使用arduino和处理使用2个LED和2个按钮

时间:2018-06-16 23:42:50

标签: c++ arduino processing

我有点卡在某事上。我正在尝试使用带有2个按钮的arduino处理2个LED。目标是将1个按钮链接到一个led。

现在问题。我已经尝试了几件事,但我不能让第二件工作。第一个负责人正在处理这两个按钮。

有人可以帮我弄清楚我做错了吗?

ARDUINO CODE

int LED1 = 10;
int LED2 = 11;

int val1 = 0;
int val2 = 0;

void setup() {
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  analogWrite(LED1, LOW);
  analogWrite(LED2, LOW);

 if (Serial.available() >1){
  val1 = Serial.read();
  val2 = Serial.read();
}

if (val1 >10 && val2 ==0){
  digitalWrite(LED1, HIGH);
  }else{
  digitalWrite(LED1, LOW);
}

if (val2 >10 && val1 ==0){
 digitalWrite(LED2, HIGH);
 }else{
 digitalWrite(LED2, LOW);
 }
}

处理代码

 import processing.serial.*;

  Serial myPort;

void setup() {
size(640, 360);
background(100); 
noStroke();

String portName = Serial.list() [1];
myPort = new Serial(this, portName, 9600);
} 

int value1 = 0; 
int value2 = 0; 

void draw() { 
if (myPort.available()>0){
}

fill(value1); 
rect(150, 50, 50, 50); 
fill(value2); 
rect(50, 210, 50, 50); 

println("VALUE1_"+value1);
println("VALUE2_"+value2);
}

void mousePressed() { 
if (mouseX > 149 && mouseX < 200 && mouseY > 49 && mouseY < 101) {
  if (value1 == 0){
    value1 = 255;
    myPort.write(value1);
  }else{ 
  value1 = 0;
  myPort.write(value1);
} 
}
if (mouseX > 49 && mouseX < 100 && mouseY > 209 && mouseY < 250) {
  if (value2 == 0){
    value2 = 255;
    myPort.write(value2);

}else {
value2 = 0;
myPort.write(value2);
}
} 
}

1 个答案:

答案 0 :(得分:0)

首先要做的事情。设计你的系统!什么是聪明的沟通方式?发送这么多字节?还是只有一个字节?如果我这样做,我会想到4种不同的可能状态:1-两个LED应该打开 - &gt;我会将A发送到Arduino以指示此状态2-左LED指示灯亮,而右LED指示灯熄灭 - &gt;将B发送到Arduino 3-右侧LED亮,而左侧LED熄灭 - &gt;将C发送到Arduino 4-两个LED都关闭 - &gt;发送D到Arduino

现在您的处理代码可能是这样的:

import processing.serial.*;

Serial myPort;

boolean leftLed;
boolean rightLed;

void setup() {
    size(640, 360);
    background(100); 
    noStroke();

    String portName = Serial.list() [1];
    myPort = new Serial(this, portName, 9600);

    leftLed=false;
    rightLed=false;
} 


void draw() { 

    fill(value1); 
    rect(150, 50, 50, 50); 
    fill(value2); 
    rect(50, 210, 50, 50); 
}

void updateArduino(){
    if(rightLed && leftLed) myPort.write("A");
    else if(leftLed) myPort.write("B");
    else if(rightLed) myPort.write("C");
    else myPort.write("D");
}

void mousePressed() { 
    if (mouseX > 149 && mouseX < 200 && mouseY > 49 && mouseY < 101) 
        leftLed = !leftLed;
    else if (mouseX > 49 && mouseX < 100 && mouseY > 209 && mouseY < 250) 
        rightLed=!rightLed;
    updateArduino();
}

在Arduino中,请按照以下方式阅读:

if (Serial.available()){
  char temp=Serial.read();
  if(temp=='A') {
    //turn on both lights
  }
  else if(temp=='B'){
    //turn on left light
  }
  else if(temp=='C'){
    //turn on right light
  }
  else if(temp=='D'){
   //turn off both lights
  }
}