按钮开关Arduino到Processing:串行输出给出null

时间:2017-11-28 22:04:31

标签: arduino processing

我正在尝试使用Arduino中的按钮开关来触发Processing中的视觉显示。我使用“HIGH”和“LOW”来识别按钮是否被按下。

但是,我的代码不断给出null,而不是根据按钮状态给出“HIGH”或“LOW”。我认为这是非常基本的,但我很遗憾。任何帮助或评论将不胜感激!

以下是我的Arduino和Processing代码。

const int buttonPin = 2; 
const int LEDPin = 13; 

int buttonState = 0; 

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(LEDPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int analogValue = analogRead(A0)/4;
  Serial.write(analogValue);
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    Serial.write(HIGH);
    digitalWrite(LEDPin, HIGH);
  } else {
    Serial.write(LOW);
    digitalWrite(LEDPin, LOW);
  }
  delay(100);
}

处理代码:

import processing.serial.*;
Serial myPort;
String val; 

void setup() {
  size(400,400);
  String portName = Serial.list()[1];
  myPort = new Serial(this, portName, 9600);
}

void draw() {
  if (myPort.available() > 0) {
    val = myPort.readStringUntil('\n');
    println(val);
    if (val == "HIGH") {
      background(127,0,0);
    }
    if (val == "LOW") {
      background(144, 26, 251);
    }
  }
}

3 个答案:

答案 0 :(得分:3)

<强> write()

将二进制数据写入串行端口。该数据以字节或字节序列的形式发送。

Serial.write(str) 

str:要作为一系列字节发送的字符串

因此,当您在HIGH中使用写LOWSerial.write时,它将作为一系列字节发送。编辑处理部分以处理传入的字节。如下:

import processing.serial.*;
Serial myPort;
String val; 
int len; //length of byte array

void setup() {
  size(400,400);
  String portName = Serial.list()[1];
  myPort = new Serial(this, portName, 9600);
}

void draw() {
  if ((len=myPort.available()) > 0) {
    for(i=0;i<len;i++)
      myByteArray=myPort.read();
    String val = String(myByteArray);
    println(val);
    if (val == "HIGH") {
      background(127,0,0);
    }
    if (val == "LOW") {
      background(144, 26, 251);
    }
  }
}

答案 1 :(得分:2)

只需将buttonState变量类型从integer更改为boolean,然后使用

if(buttonState) {
       Serial.println("HIGH");
}
else {
      Serial.println("LOW");
}

答案 2 :(得分:1)

在Arduino中,HIGHLOW are defined为1和0。

执行Serial.write(HIGH);Serial.write(LOW);,您只需发送一个字节1或0。

但根据您的处理代码,您希望Serial.write(HIGH);发送'H''I''G''H''\n'个字符

在您的Arduino代码中,您需要将Serial.write(HIGH);Serial.write(LOW);替换为Serial.print("HIGH\n");Serial.print("LOW\n");