Arduino:等待串行输入
我正在写一个简单的arduino代码。我有两个LED和相应的两个开关。按下一个开关时,一个led点亮,另一个led熄灭。然后有一个Serial.read函数,它从计算机读取重置。然后两个开关都关闭。按下另一个开关后,另一个led亮起。我的问题是,当一个开关打开时,另一个开关在串行读取发生之前不应该工作。但在我的情况下,当led1打开时,如果我按下开关2,led2打开,led1关闭。但这不是我想要的行动。我想做一个逻辑,当led1打开时,如果我按下开关2,led2不应该打开,并等待Serial.read发生。这是我的密码。我需要知道逻辑中的更正是什么:Arduino:等待串行输入,arduino,serial-port,Arduino,Serial Port,我正在写一个简单的arduino代码。我有两个LED和相应的两个开关。按下一个开关时,一个led点亮,另一个led熄灭。然后有一个Serial.read函数,它从计算机读取重置。然后两个开关都关闭。按下另一个开关后,另一个led亮起。我的问题是,当一个开关打开时,另一个开关在串行读取发生之前不应该工作。但在我的情况下,当led1打开时,如果我按下开关2,led2打开,led1关闭。但这不是我想要的行动。我想做一个逻辑,当led1打开时,如果我按下开关2,led2不应该打开,并等待Serial.r
int switch1 = 2;
int motorled1 = 3;
int switch2 = 4;
int motorled2 = 5;
int d1=2;
int d2=3;
int reset1 = 0;
int reset2= 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
d1=digitalRead(2);
d2=digitalRead(4);
if (d1==1)
{
digitalWrite(3, HIGH);
digitalWrite(5, LOW);
if (Serial.available() > 0)
{
Serial.write(1);
}
if (Serial.available() > 0)
{
reset1 = (Serial.read());
digitalWrite(motorled1, LOW);
digitalWrite(motorled2, LOW);
}
}
else if (d2==1)
{
digitalWrite(3, LOW);
digitalWrite(5, HIGH);
if (Serial.available() > 0)
{
Serial.write(2);
}
if (Serial.available() > 0)
{
reset2 = (Serial.read());
digitalWrite(motorled1, LOW);
digitalWrite(motorled2, LOW);
}
}
}
您似乎正在使用某种异步代码结构。这是一件好事,但我不确定这是否是你打算做的 在当前状态下,代码将不断循环,检查是否按下了其中一个按钮 现在,有两种方法可以实现这一点:
- 或者做一个合适的设计,哪一个是首选的方式
- 或者只是等待序列号在某个时候可用
if (Serial.available() > 0)
{
reset1 = (Serial.read());
digitalWrite(motorled1, LOW);
digitalWrite(motorled2, LOW);
}
借
这是基本思想。作为练习,我将让您整理各种错误和改进(例如再次将serial\u read
设置为false
)
我还强烈建议您阅读一些关于编程的一般知识,特别是C编程。我还建议您尝试遵守一些缩进代码的约定。没有什么比混合缩进代码更糟糕的了。这就是答案
int switch1 = 2;
int motorled1 = 3;
int switch2 = 4;
int motorled2 = 5;
int d1 = 0;
int d2 = 0;
int buzzer;
char reset1;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
d1 = digitalRead(2);
d2 = digitalRead(4);
if (d1 == 1 && buzzer == 0) {
digitalWrite(motorled1, HIGH);
buzzer = 1;
} else if (d2 == 1 && buzzer == 0) {
digitalWrite(motorled2, HIGH);
buzzer = 2;
}
if (Serial.available() > 0) {
Serial.write(buzzer);
reset1 = Serial.read();
buzzer = 0;
if (reset1 == 'R') {
Serial.println("LED is off");
digitalWrite(motorled1, LOW);
digitalWrite(motorled2, LOW);
}
}
}
int serial_read = false;
if(Serial.available() > 0)
{
reset1 = (Serial.read());
serial_read = true;
}
int switch1 = 2;
int motorled1 = 3;
int switch2 = 4;
int motorled2 = 5;
int d1 = 0;
int d2 = 0;
int buzzer;
char reset1;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
d1 = digitalRead(2);
d2 = digitalRead(4);
if (d1 == 1 && buzzer == 0) {
digitalWrite(motorled1, HIGH);
buzzer = 1;
} else if (d2 == 1 && buzzer == 0) {
digitalWrite(motorled2, HIGH);
buzzer = 2;
}
if (Serial.available() > 0) {
Serial.write(buzzer);
reset1 = Serial.read();
buzzer = 0;
if (reset1 == 'R') {
Serial.println("LED is off");
digitalWrite(motorled1, LOW);
digitalWrite(motorled2, LOW);
}
}
}