/* 这个程序控制可伸缩的扰流板。*/
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 中代码使用的电路。开关代表雨量传感器,而电位器代表速度传感器。扰流板本身由灯光表示。
当我运行电路时,无论我对开关和电位器做什么,灯都会熄灭,但代码不会显示任何错误。
这是电路:
这是系统应该如何工作的总图: