Подскажите....

Тема в разделе "Arduino & Shields", создана пользователем Makar, 9 апр 2014.

  1. Makar

    Makar Нуб

    подскажите пожалуйста, сто у меня в программе не правильно. Вроде все работает, но не включается второй таймер отсчета. Программа еще до конца не доделана....

    #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");
    }
    }

    }
     
  2. lerik2703

    lerik2703 Гик

    а у вас экран сильно не мерцает при таком обновлении ?:)
    как я понимаю второй таймер запуститься должен при таком условии if (segundostotal == 0) ?
     
  3. Makar

    Makar Нуб

    мерцания не видно. да при этом условии.
     
  4. lerik2703

    lerik2703 Гик

    после этого условия код должен выполняться 2 раза !
     
  5. Makar

    Makar Нуб

    почему два раза
     
  6. lerik2703

    lerik2703 Гик

    когда переменная segundostotal станет равняться -1 условие while (segundostotal > 0) станет ложным (хотя даже если будет равно 0 условие уже будет ложным) и вас соответственно выкинет из цикла!
     
  7. Makar

    Makar Нуб

    подскажите пожалуйста как это можно устранить
     
  8. lerik2703

    lerik2703 Гик

    если у вас не предусмотрено изменение времени во время работы таймера просто while (1); (хотя всегда можно воспользоваться оператором break :) ) ещё ошибки,переменные segundostotal и offsegundostotal имеют тип int а это
    допустим мне захотелось выставить таймер на 23:59:59 а это согласно расчету
    будет 86399 ну ни как не вписывается в допустимый диапазон!
     
  9. Makar

    Makar Нуб

    ну это да, я в такие большие диапазоны и не рассчитывал мне надо всего пару часов. потом хочу сделать это все в бесконечный цикл, выход из него будет нажатие кнопки настройки таймеров. я это делаю для того что бы можно было запускать циркуляционный тепловой насос
     
  10. Makar

    Makar Нуб

    спасибо что разъяснили :)
     
  11. lerik2703

    lerik2703 Гик

    я о чем похожем и подумал!:rolleyes:
    тогда ограничение введите!
    ну а пока у вас таймер один раз включиться один раз выключиться !
     
    Makar нравится это.
  12. Makar

    Makar Нуб

    спасибо, по пробую довести все до конца.:)