按钮开关 Arduino 到处理:串行输出给出空



我正在尝试使用 Arduino 中的按钮开关来触发处理中的视觉显示。我使用"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);
}
}
}

write()

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

Serial.write(str) 

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


所以当你在Serial.write中使用写HIGHLOW时,它将被作为一系列字节发送。编辑处理部分以处理传入的字节。如下:

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

只需将 buttonState 变量类型从整数更改为布尔值,然后使用

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

在Arduino中,HIGHLOW定义为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("HIGHn");Serial.print("LOWn");.

最新更新