【processing与arduino互动编程】第七章 控制彩色LED灯

Processeing代码

 1 import processing.serial.*;
 2 Serial port = new Serial(this, "COM3", 9600);
 3 int redDisplay, greenDisplay, blueDisplay;
 4 int red, green, blue;
 5 String strRed, strGreen, strBlue;
 6 String message;
 7 
 8 void setup() {
 9   size(700, 500);
10 }
11 
12 void draw() {
13   background(204);
14   frame();
15   RGBDisplay();
16   sendMessage();
17 }
18 
19 void frame() {
20   rectMode(CORNER);
21   noFill();
22   stroke(255, 0, 0);
23   strokeWeight(2);
24   rect(50, 100, 500, 50);
25   stroke(0, 255, 0);
26   rect(50, 200, 500, 50);
27   stroke(0, 0, 255);
28   rect(50, 300, 500, 50);
29 }
30 
31 void RGBDisplay() {
32   rectMode(CORNER);
33   noStroke();
34   fill(red, 0, 0);
35   rect(50, 100, redDisplay, 50);
36   fill(0, green, 0);
37   rect(50, 200, greenDisplay, 50);
38   fill(0, 0, blue);
39   rect(50, 300, blueDisplay, 50);
40   fill(red, green, blue);
41   rect(300, 400, 50, 50);
42   fill(0);
43   rect(400, 400, 50, 50);
44 }
45 
46 void mouseClicked() {
47   if (mouseX <= 550 && mouseX >= 50) {
48     if (mouseY <= 150 && mouseY >= 100) {
49       red = (int) map(mouseX, 50, 550, 0, 255);
50       redDisplay = mouseX - 50;
51     }
52     else if (mouseY <= 250 && mouseY >= 200) {
53       green = (int)map(mouseX, 50, 550, 0, 255);
54       greenDisplay = mouseX - 50;
55     }
56     else if (mouseY <= 350 && mouseY >= 300) {
57       blue = (int) map(mouseX, 50, 550, 0, 255);
58       blueDisplay = mouseX - 50;
59     }
60     else if (mouseX <= 450 && mouseX >= 400)
61       shut();
62   }
63 }
64 
65 void sendMessage() {
66   strRed = red + "";
67   if (red < 100)
68     strRed = "0" + red;
69   if (red < 10)
70     strRed = "00" + red;
71     
72   strGreen = green + "";
73   if (green < 100)
74     strGreen = "0" + green;
75   if (green < 10)
76     strGreen = "00" + green;
77   
78   strBlue = blue + "";
79   if (blue < 100)
80     strBlue = "0" + blue;
81   if (blue < 10)
82     strBlue = "00" + blue;
83     
84   message = "a" + strRed + strGreen + strBlue + "s";
85   port.write(message);
86 }
87 
88 void shut() {
89   redDisplay = 0;
90   greenDisplay = 0;
91   blueDisplay = 0;
92   red = 0;
93   green = 0;
94   blue = 0;
95 }

Arduino代码

 1 int redpin = 11;
 2 int bluepin = 10;
 3 int greenpin = 9;
 4 
 5 void setup() {
 6     pinMode(redpin, OUTPUT);
 7     pinMode(bluepin, OUTPUT);
 8     pinMode(greenpin, OUTPUT);
 9     Serial.begin(9600);
10 }
11 
12 char charbuf[20];
13 int color[3];
14 
15 void loop() {
16     while (Serial.available() > 0) {
17         Serial.readBytesUntil('s', charbuf, 20);
18         if (charbuf[0] == 'a') {
19             color[0] = 100 * (charbuf[1] - '0') + 10 *( charbuf[2] -'0') + charbuf[3] -'0';
20             color[1] = 100 * (charbuf[4] - '0') + 10 *( charbuf[5] -'0') + charbuf[6] -'0';
21             color[2] = 100 * (charbuf[7] - '0') + 10 *( charbuf[8] -'0') + charbuf[9] -'0';
22         }
23     analogWrite(redpin, color[0]);
24     analogWrite(greenpin, color[1]);
25     analogWrite(bluepin, color[2]);
26     }
27 }

鼠标点击的时候,有点问题,有时候会不动, 有时候会清零。将46-61行部分if语句改成else if即可。

猜你喜欢

转载自www.cnblogs.com/zlqw/p/9049593.html