Я знаю, что в коде или схеме есть небольшая ошибка, но не могу ее найти

/* Эта программа управляет выдвижным спойлером. * /

      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. Переключатель соответствует датчику дождя, а потенциометр - датчику скорости. Сам спойлер представлен светом.

Когда я запускаю схему, свет не горит независимо от того, что я делаю с переключателем и потенциометром, но код не отображает никаких ошибок.

Это схема:

Это общая схема того, как должна работать система:

1 ответ

Сначала предлагаю удалить pinMode(IO_I_RAINSENSOR, OUTPUT);

Затем измените #define IO_PWM_SPEEDSENSOR 0 к #define IO_PWM_SPEEDSENSOR A0

Я мало работаю с Arduino, но, если я правильно помню, аналоговые входы обозначаются буквой A перед номером контакта.

Другие вопросы по тегам