Я знаю, что в коде или схеме есть небольшая ошибка, но не могу ее найти
/* Эта программа управляет выдвижным спойлером. * /
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 перед номером контакта.