Доброго дня!
Странно ведет себя код - выполняется цикл while 15 раз и зависает - начинает мигать встроенным LED с большой частотой. Не реагирует пока не перезапустишь. Не важно - подключена периферия или нет - поведение одинаково. И платы разные пробовал - поведение одинаково.
отдельно цикл WHILE в отдельном скетче - работает отлично. А тут - висит.
Не пойму в чем ошибка.
По меткам check - проходит все этапы, и висит 15 раз выполнив цикл while
Собственно в цикле должно быть ожидание срабатывания датчиков, выкинул - думал что что то с обработчиком не так, но даже просто считать до 1000 это зараза не хочет.
Где мой косяк?
Спасибо.
Странно ведет себя код - выполняется цикл while 15 раз и зависает - начинает мигать встроенным LED с большой частотой. Не реагирует пока не перезапустишь. Не важно - подключена периферия или нет - поведение одинаково. И платы разные пробовал - поведение одинаково.
отдельно цикл WHILE в отдельном скетче - работает отлично. А тут - висит.
Не пойму в чем ошибка.
C++:
#include <EEPROM.h> // работа с еепром
#include "GyverButton.h" // работа с кнопками
#include "GyverTimer.h" // таймера
#include "GyverWDT.h" // сторожевой таймер
// Описание интерфейсных каналов
#define Sensor_top A0 // Верхняя мертвая точка привода
#define Cassete A1 // датчик кассеты
#define Sensor_left A2 // датчик правого болта
#define Sensor_right A3 // датчик левого болта
#define Cassete_valve 12 // калапан подачи кассеты
#define Vint_feed 11 // подача винтов
#define Pusk 10 // пуск цикла
#define Press_Start_LED 9 // светодиод СТАРТ
#define Insert_cassete_LED 8 // светодиод вставь кассету
#define Remove_bolt_LED 7 // светодиод извлеки болт
#define Work_LED 6 // светодиод Работа
#define Button 5 // кнопка Старт
// таймера
// создаём таймеры в миллисекундах
//GTimer timer (MS, 500); // таймер 0.5 сек
// инициализация кнопок
GButton Start_button(5);
// Описание переменных
int t=0;
int flag=0;
// переменные настроек, хранятся в EEPROM
void setup() {
//timer.start(); // старт таймера
// опрос кнопок - автоматически
Start_button.setTickMode(AUTO);
// Включили последовательный порт
Serial.begin(9600);
pinMode (Sensor_top, INPUT_PULLUP); // Верхняя мертвая точка привода
pinMode (Cassete, INPUT_PULLUP); // датчик кассеты
pinMode (Sensor_left, INPUT_PULLUP); // датчик правого болта
pinMode (Sensor_right, INPUT_PULLUP); // датчик левого болта
pinMode (Cassete_valve,OUTPUT); // калапан подачи кассеты
pinMode (Vint_feed,OUTPUT); // подача винтов
pinMode (Pusk,OUTPUT); // пуск цикла
pinMode (Press_Start_LED,OUTPUT); // светодиод СТАРТ
pinMode (Insert_cassete_LED,OUTPUT); // светодиод вставь кассету
pinMode (Remove_bolt_LED,OUTPUT); // светодиод извлеки болт
pinMode (Work_LED,OUTPUT); // светодиод Работа
pinMode (Button, INPUT_PULLUP); // кнопка Старт
Watchdog.enable(RESET_MODE, WDT_PRESCALER_512); // Режим сторжевого сброса , таймаут ~4с
Serial.println("ready");
mig(5);
startup();
}
void loop() {
if (digitalRead(Cassete)==LOW) // Если сработал датчик кассеты
{
Serial.println("Cassete on");
}
if (digitalRead(Sensor_left)==LOW) // Если сработал датчик кассеты
{
Serial.println("Left_on");
}
if (digitalRead(Sensor_right)==LOW) // Если сработал датчик кассеты
{
Serial.println("Right_on");
}
if (Start_button.isClick())
{
mig (10);
}
Watchdog.reset(); // Переодический сброс watchdog, означающий, что устройство не зависло
} // КОНЕЦ ОСНОВНОГО ЦИКЛА
void mig(int x)
{
for (int i=0; i <= x; i++){
digitalWrite(Work_LED, HIGH);
delay (200);
digitalWrite(Work_LED, LOW);
delay (200);
}
}
void startup()
{
Serial.println("check1");
if (digitalRead(Sensor_left)==HIGH || digitalRead(Sensor_right)==HIGH) //если есть болт слева или болт справа
{
Serial.println("check2");
digitalWrite(Remove_bolt_LED, HIGH);
Serial.println("check2.5");
}
while (t<1000){
delay(100);
Serial.println("check3");
Serial.println(t);
//if (t=1000) flag=1;
t=t+1;
}
flag=0;
Serial.println("check4");
}
Собственно в цикле должно быть ожидание срабатывания датчиков, выкинул - думал что что то с обработчиком не так, но даже просто считать до 1000 это зараза не хочет.
Где мой косяк?
Спасибо.