подскажите пожалуйста, сто у меня в программе не правильно. Вроде все работает, но не включается второй таймер отсчета. Программа еще до конца не доделана.... #include <LiquidCrystal.h> //Libreria del display LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Инициализировать библиотеку с числом контактов, используемых int buzzer = 13; //Alarma int ahoras = 0; //Переменная будет отображаться на ЖК-дисплее horas int aminutos = 0; //Переменная будет отображаться на ЖК-дисплее minutos int asegundos = 0; //Переменная будет отображаться на ЖК-дисплее segundos int segundostotal = 0; //полное время int msg= 0; //Баррера для приветствия int offhoras = 0; //Переменная будет отображаться на ЖК-дисплее horas int offminutos = 0; //Переменная будет отображаться на ЖК-дисплее minutos int offsegundos = 0; int offsegundostotal = 0; int start = A0; //кнопка arranque int empieza = 1024; // Переменная кнопка хранения Старт int buth = A5; //кнопка Horas int butm = A4; //кнопка Minutos int mode = A3; //кнопка on/off int varbuth = 0; //Переменная для хранения значения кнопки buth int varbutm = 0; //Переменная для хранения значения кнопки minutos int varbuts = 0; //Переменная для хранения значения кнопки segundos int offbuth=0; //Переменная для хранения значения кнопки offbuth int offbutm=0; //Переменная для хранения значения кнопки offbutm int offbust=0; //Переменная для хранения значения кнопки offbust int a=1024; void setup() { lcd.begin(16, 2); // Мы задать количество строк и столбцов ЖК-дисплее. lcd.print("Loading"); delay(500); lcd.print("."); delay(500); lcd.print("."); delay(1000); lcd.clear(); pinMode(buzzer, OUTPUT); pinMode(buth, INPUT); pinMode(butm, INPUT); pinMode(mode, INPUT); pinMode(start, INPUT); msg = 0; empieza = 1024; varbuth = 1; varbutm = 1; varbuts = 1; offbuth=1; offbutm=1; offbust=1; a=1024; } void loop() { do { varbuth = analogRead(buth); // horas varbutm = analogRead(butm); // minutos // varbuts = analogRead(buts); //Leemos boton de segundos if(varbuth == 0) { ahoras = ahoras + 1 ; delay(250); } if(varbutm == 0) //Si el boton ha sido pulsado, aumentamos los minutos en una unidad { aminutos = aminutos + 1; delay(250); } // if(varbuts == 0) // { // asegundos = asegundos + 1; // delay(250); // } lcd.setCursor(0,0); lcd.print("Elige el tiempo"); lcd.setCursor(5,1); if (ahoras < 10) lcd.print("0"); lcd.print(ahoras); lcd.print(":"); if (aminutos < 10) lcd.print("0"); lcd.print(aminutos); // lcd.print(":"); // if (asegundos < 10) lcd.print("0"); // lcd.print(asegundos); lcd.setCursor(11,1); /////// lcd.print("hh:mm"); /////// lcd.setCursor(0,1); /////// lcd.print("on"); // empieza =analogRead(start); // if (empieza == 0) // { // segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60); // } // } while(empieza != 0); a=analogRead(mode); } while(a != 0); //////////////////////////////////////////////////////// do { offbuth = analogRead(buth); // horas offbutm = analogRead(butm); // minutos // varbuts = analogRead(buts); //Leemos boton de segundos if(offbuth == 0) { offhoras = offhoras + 1 ; delay(250); } if(offbutm == 0) { offminutos = offminutos + 1; delay(250); } // if(varbuts == 0) // { // asegundos = asegundos + 1; // delay(250); // } lcd.setCursor(0,0); lcd.print("Elige el tiempo"); lcd.setCursor(5,1); if (offhoras < 10) lcd.print("0"); lcd.print(offhoras); lcd.print(":"); if (offminutos < 10) lcd.print("0"); lcd.print(offminutos); lcd.setCursor(0,1); /////// lcd.print("off"); empieza =analogRead(start); if (empieza == 0) { segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60); } } while(empieza != 0); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// while (segundostotal > 0) { delay (1000); segundostotal--; ahoras = ((segundostotal / 60)/ 60); aminutos = (segundostotal / 60) % 60; asegundos = segundostotal % 60; lcd.setCursor(0,0); lcd.print("Tiempo restante"); lcd.setCursor(5,1); if (ahoras < 10) lcd.print("0"); lcd.print(ahoras); lcd.print(":"); if (aminutos < 10) lcd.print("0"); lcd.print(aminutos); lcd.setCursor(0,1); /////// lcd.print("on"); // lcd.print(":"); // if (asegundos < 10) lcd.print("0"); // lcd.print(asegundos); if (segundostotal == 0) { offsegundostotal--; offhoras = ((offsegundostotal / 60)/ 60); offminutos = (offsegundostotal / 60) % 60; offsegundos = offsegundostotal % 60; lcd.setCursor(0,0); lcd.print("Tiempo restante"); lcd.setCursor(5,1); if (offhoras < 10) lcd.print("0"); lcd.print(offhoras); lcd.print(":"); if (offminutos < 10) lcd.print("0"); lcd.print(offminutos); lcd.setCursor(0,1); /////// lcd.print("off"); } } }
а у вас экран сильно не мерцает при таком обновлении ? как я понимаю второй таймер запуститься должен при таком условии if (segundostotal == 0) ?
когда переменная segundostotal станет равняться -1 условие while (segundostotal > 0) станет ложным (хотя даже если будет равно 0 условие уже будет ложным) и вас соответственно выкинет из цикла!
если у вас не предусмотрено изменение времени во время работы таймера просто while (1); (хотя всегда можно воспользоваться оператором break ) ещё ошибки,переменные segundostotal и offsegundostotal имеют тип int а это допустим мне захотелось выставить таймер на 23:59:59 а это согласно расчету будет 86399 ну ни как не вписывается в допустимый диапазон!
ну это да, я в такие большие диапазоны и не рассчитывал мне надо всего пару часов. потом хочу сделать это все в бесконечный цикл, выход из него будет нажатие кнопки настройки таймеров. я это делаю для того что бы можно было запускать циркуляционный тепловой насос
я о чем похожем и подумал! тогда ограничение введите! ну а пока у вас таймер один раз включиться один раз выключиться !