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