【发布时间】:2020-12-18 15:38:11
【问题描述】:
我在 arduino 上运行了这段代码:
#include <SoftwareSerial.h>
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// pins!!!!
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
const int delayTime=10;
const int pin_yes_gate=3;
const int pin_no_gate=5;
int switchVal =0;
void setup()
{
Serial.begin(9600); // Initialize serial port to send and receive at 9600 baud
pinMode(pin_yes_gate, OUTPUT);
pinMode(pin_no_gate, OUTPUT);
}
void loop()
{
if (switchVal ==1 ){
allow();
}else{
prohibit();
}
if ( Serial.available())
{
String string = Serial.readString();
string.trim();
Serial.print("I received: ");
Serial.print(string);
Serial.print("\n");
if(string.equals("allowed"))
{
switchVal=1;
}else if(string.equals("error"))
{
switchVal=0;
}
}
}
void allow(){
digitalWrite(pin_yes_gate,HIGH);
digitalWrite(pin_no_gate,LOW);
delay(delayTime);
}
void prohibit(){
digitalWrite(pin_yes_gate,LOW);
digitalWrite(pin_no_gate,HIGH);
delay(delayTime);
}
我正在写echo allowed >> /dev/ttyACM0,它给出了反应,但不到一秒钟,然后 arduino 返回到初始状态。这很奇怪,因为它可以完美地与 arduino IDE 配合使用。
我错过了什么吗?
【问题讨论】:
-
我唯一想知道的是
delay(delayTime);应该有什么效果,如果你重复这些digitalWrites 是否会出现问题。如果您删除if (switchVal ==1 ){ ... } else { ... }部分并在收到字符串时直接调用allow和prohibit会怎样?if(string.equals("allowed")) allowed(); else if(string.equals("error")) prohibit();在这种情况下,您也可以同时删除delays。 -
@TedLyngmo 需要延迟,因为接收信号的系统已请求延迟。我已经在下面解决了......如此微不足道但花了我很多时间
-
"接收信号的系统已请求延迟" - 如果您执行我之前建议的操作,接收信号的系统将不会注意到延迟是否消除.它只会以 9600 bps 的速度输入
error的速度切换引脚。
标签: c++ linux arduino raspberry-pi