如何解决我知道代码或电路中有一个小错误,但我找不到
/* 该程序控制可伸缩的扰流板。 */
int brightness = 0;
int rainSensor;
int speedSensor;
int currentState;
#define INITIAL_STATE 0
#define ST_SPOILER_DOWN 1
#define ST_SPOILER_UP 2
#define IO_I_RAINSENSOR 3
#define IO_PWM_SPEEDSENSOR 0
#define IO_PWM_LIGHT 7
#define YES 0
#define NO 1
void setup(){
currentState = INITIAL_STATE;
pinMode(IO_I_RAINSENSOR,INPUT);
pinMode(IO_PWM_SPEEDSENSOR,INPUT);
pinMode(IO_I_RAINSENSOR,OUTPUT);
pinMode(IO_PWM_LIGHT,OUTPUT);
Serial.begin(9600);
currentState = ST_SPOILER_DOWN;
brightness = 0;
}
void loop()
{
/*
在这种状态下,扰流板缩回
因此电路灯熄灭。下面的代码
规定,如果速度传感器或下雨
传感器检测到它们的事件,电路切换
到下一个状态。
*/
if(currentState == ST_SPOILER_DOWN){
rainSensor = digitalRead(IO_I_RAINSENSOR);
speedSensor = analogRead(IO_PWM_SPEEDSENSOR);
if ((speedSensor > 100)||(rainSensor == YES)){
brightness = 255;
analogWrite(IO_PWM_LIGHT,brightness);
currentState = ST_SPOILER_UP;
Serial.println("- Spoiler Down event detected. \n" );
}
}
/* 在这种状态下,扰流板伸出。 电路灯亮起代表这一点。 下面的代码规定,如果 速度传感器或雨量传感器检测到它们的事件, 电路切换到下一个状态。 */
if(currentState == ST_SPOILER_UP){
rainSensor = digitalRead(IO_I_RAINSENSOR);
speedSensor = analogRead(IO_PWM_SPEEDSENSOR);
if ((speedSensor <95) && (rainSensor == NO)){
brightness = 0;
analogWrite(IO_PWM_LIGHT,brightness);
currentState = ST_SPOILER_DOWN;
Serial.println("- Spoiler Up event detected. \n" );
}
}
}
这是代码在 tinkerCAD 中使用的电路。开关代表雨量传感器,而电位器代表速度传感器。扰流板本身由灯光代表。
当我运行电路时,无论我用开关和电位器做什么,灯都会熄灭,但代码没有显示任何错误。
这是电路:
这是系统应该如何工作的一般图:
解决方法
首先我建议删除 pinMode(IO_I_RAINSENSOR,OUTPUT);
然后将 #define IO_PWM_SPEEDSENSOR 0
更改为 #define IO_PWM_SPEEDSENSOR A0
我对 Arduino 的工作不多,但如果我没记错的话,模拟输入是在引脚编号前用“A”定义的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。