【问题标题】:Use 2 leds and 2 buttons using arduino and processing使用 arduino 和处理使用 2 个 LED 和 2 个按钮
【发布时间】:2018-06-16 23:42:50
【问题描述】:

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

现在的问题。我已经尝试了几件事,但我无法让第二个工作。第一个 LED 正在处理中的两个按钮。

谁能帮我弄清楚我做错了什么?

ARDUINO 代码

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);
}
} 
}

【问题讨论】:

    标签: c++ arduino processing


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多