Ребята, приятно что вы откликнулись! =) Спасибо!
Если есть девушки то всех с 8 марта!
На самом деле я так понимаю, что нет придела совершенства!
Давайте попробуем ответить на мой вопрос, конечно если есть какое то хорошее предложение, как изменить все на 100% то в развернутой форме, что для чего тогда будет интересно, но так как я не профи, я выбрал путь (может и не лучший) и хотелось бы понять что именно не так…
я прокомментирую весь код, может быть не понятно что для чего у меня:
//подсветка ступеней лесницы
//датчик движения ,в глобальном условии задачи это датчик на верхнем этаже, в локальном (в
//данном вопросе) мы используем только этот датчик
#define PIR_UP A3
//этот датчик сейчас не используем
#define PIR_DOWN A2
//ступеньки - тестово 6шт, вообще их больше но я собрал макет и тут их 6 шт...
#define STEP_1 A0
#define STEP_2 10
#define STEP_3 11
#define STEP_4 12
#define STEP_5 13
#define STEP_6 A1
//переменная IO задумана принятия показания с PIR_UP и она же является ключом для switch
int IO;
// таймеры на все случаи жизни
uint32_t myTimer1;
uint32_t myTimer2;
uint32_t myTimer3;
// не работает сейчас
int STATUS;
void setup()
{Serial.begin(9600);
// направления работы пина - на выдачу =) и на прием
pinMode(STEP_1, OUTPUT);
pinMode(STEP_2, OUTPUT);
pinMode(STEP_3, OUTPUT);
pinMode(STEP_4, OUTPUT);
pinMode(STEP_5, OUTPUT);
pinMode(STEP_6, OUTPUT);
pinMode(PIR_UP, INPUT);
pinMode(PIR_DOWN, INPUT);
delay (500);
}
void loop()
{
Serial.println("____________________");
Serial.print("myTimer1:");
Serial.println(millis()-myTimer1);
Serial.print("myTimer2:");
Serial.println(millis()- myTimer2);
Serial.print("myTimer3:");
Serial.println(millis()- myTimer3);
Serial.print("IO: ");
Serial.println(IO);
delay(1000);
// Если PIR_UP сработал то записываем значение 1 в IO и запускаем таймер myTimer1
if (digitalRead(PIR_UP) == HIGH)
{
IO = 1;
myTimer1=millis();
}
//Если IO == 1 и myTimer1 > 10с, то записываем значение 0 в IO это как раз не дает перейти во //второй кейс сразу и начать сразу выключать ступеньки
if (IO == 1 && millis() - myTimer1 > 10000)
IO = 0;
switch (IO)
{
//Если IO == 1, то вывести на экран "case 1", обнулить таймер myTimer2, выключить ступеньки и выйти из кейса
case 1:
Serial.println("case 1");
//тут и есть основной заплет, почему этот таймер стоит на месте
myTimer2=millis();
if(millis()- myTimer2 > 1000)
digitalWrite(STEP_1, HIGH);
if(millis()- myTimer2 > 2000)
digitalWrite(STEP_2, HIGH);
if(millis()- myTimer2 > 3000)
digitalWrite(STEP_3, HIGH);
if(millis()- myTimer2 > 4000)
digitalWrite(STEP_4, HIGH);
break;
case 0:
//Если IO == 0, то вывести на экран "case 0", однулить таймер myTimer3, выключить ступеньки и выйти из кейса
Serial.println("case 0");
myTimer3=millis();
if(millis()- myTimer3 > 1000)
digitalWrite(STEP_4, LOW);
if(millis()- myTimer3 > 2000)
digitalWrite(STEP_3, LOW);
if(millis()- myTimer3 > 3000)
digitalWrite(STEP_2, LOW);
if(millis()- myTimer3 > 4000)
digitalWrite(STEP_1, LOW);
break;
}
}
если кому то интересно как выглядит мой макет на данном этапе
фото