-2

/* このプログラムは格納式スポイラーを制御します。*/

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 で作成されたコードが使用する回路です。スイッチは雨センサーを表し、ポテンショメーターは速度センサーを表します。スポイラー自体はライトで表現。

回路を実行すると、スイッチとポテンショメータで何をしてもライトは消えたままですが、コードにはエラーは表示されません。

これは回路です:

回路

これは、システムがどのように機能するかを示す一般的な図です。

ダイアグラム

4

1 に答える 1

0

まず、削除することをお勧めしますpinMode(IO_I_RAINSENSOR, OUTPUT);

次に、に変更#define IO_PWM_SPEEDSENSOR 0します#define IO_PWM_SPEEDSENSOR A0

私は Arduino をあまり使用しませんが、私の記憶が正しければ、アナログ入力はピン番号の前に「A」を付けて定義されています。

于 2021-04-28T10:22:32.527 に答える