/* このプログラムは格納式スポイラーを制御します。*/
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 で作成されたコードが使用する回路です。スイッチは雨センサーを表し、ポテンショメーターは速度センサーを表します。スポイラー自体はライトで表現。
回路を実行すると、スイッチとポテンショメータで何をしてもライトは消えたままですが、コードにはエラーは表示されません。
これは回路です:
これは、システムがどのように機能するかを示す一般的な図です。