зависание через неопределенное время
- Войдите на сайт для отправки комментариев
Ср, 21/12/2016 - 14:31
сделал скеч гирлянды, происходит зависание по прошествии некоторого времени, остается включен один пин. отключаю питание все опять работает. 1-2ч всегда по разному.
int Pot = A0; int but1 = 2; int led1 = 9; int led2 = 10; int led3 = 11; int led4 = 12; boolean lastButton = LOW; boolean currentButton = LOW; int set1 = 0; int del; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(Pot,INPUT); pinMode(but1,INPUT); } boolean debounce(boolean last){ boolean current = digitalRead(but1); if (last != current){ delay(10); return current; } } void setMode(int mode) { if (mode == 0) { digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(del); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, HIGH); delay(del); digitalWrite(led1, LOW); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(del); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); delay(del); } else if (mode ==1) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); delay(del); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); digitalWrite(led4, HIGH); delay(del); digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(del); digitalWrite(led1, LOW); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(del); } else if (mode == 2) { digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(del); digitalWrite(led1, LOW); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(del); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); delay(del); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, HIGH); delay(del); } else if (mode == 3) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(del); digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); delay(del); digitalWrite(led1, LOW); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); digitalWrite(led4, HIGH); delay(del); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(del); // analogWrite(led, 100); } } void loop() { currentButton = debounce(lastButton); if (lastButton == LOW && currentButton == HIGH) { set1 ++; } lastButton; currentButton; if (set1 == 4) set1=0; setMode(set1); del=map(analogRead(Pot),0,1024,100,800); }
1. что означает глубокомысленная запись в строке 124?
2. строка 17 - для аналогового чтения это бессмыслица - уберите
3. в функции setMode акстивно используется del. Чему она (del) равна при первом вызове setMode?
4. Где и когда изменяется переменная lastBuoon? Она у Вас всегда false.
Спасибо понял! лишнее убрал, del - при первом запуске как неизвестная, переделал. буду пробовать.
не понял что с 4 пунктом не так, но все работает, изучаю все по видио с ютуба, мож не правильно скеч написал поэтому.
Вообще описанные Вами зависания встречаются из-за проблем с питанием. Имеет смысл опубликовать схему Вашего устройства.
не понял что с 4 пунктом не так, но все работает, изучаю все по видио с ютуба, мож не правильно скеч написал поэтому.
А чего там понимать? Попробуйте тупо ответить на мой вопрос.
Вы сравниваете что-то с этой переменной, но сама переменная НИКОГДА в программе не изменяется. Значит, здесь какая-то логическая ошибка.
Отож наверно 124 строка предполагалась как lastButton= currentButton;. Просто пальцем не туда попали ;)