Помогите пожалуйста найти ошибку.

Тема в разделе "Arduino & Shields", создана пользователем Garry_Poter, 11 апр 2018.

  1. Garry_Poter

    Garry_Poter Нерд

    Что то тут не так с millis() датчик часто собирает данные, каждую секунду а в коде я сравниваю millis() - lasttime > temptime . Но все равно ардуино каждую секунду обращаеться к датчику. Помогите выявить ошибку)
    Код (C++):
    #include <Wire.h>                           // Подключаем библиотеку Wire
    #include <LiquidCrystal_I2C.h>              // Подключаем библиотеку LiquidCrystal_I2C
    #include <DallasTemperature.h>              // Подключаем библиотеку DallasTempature
    #define DS18B20 0                         // Указываем, к какому выводу подключена DQ
    byte simvol[8]   = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса
    byte P[8] = {0b11111,0b10001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000}; // создаем русскую букву "П"
    byte Y[8] = {0b10001,0b10001,0b10001,0b01111,0b00001,0b00001,0b01110,0b00000}; // создаем русскую букву "У"
    byte Z[8] = {B01111,B10001,B10001,B01111,B00101,B01001,B10001,B00000,}; // буква Я
    int lasttime;
    const int temptime = 60000;
    int temp1;
    LiquidCrystal_I2C lcd(0x38,20,4);           // Задаем адрес и размер дисплея
    OneWire oneWire(DS18B20);                  
    DallasTemperature sensors(&oneWire);
    unsigned long TimeLightOffOn = 86397000;
    int buttonPin = 7; // пин для кнопки
    boolean isTurnOn = true;
    boolean isLedEnabled = false;
    int flag;
    void setup()
    {
      sensors.begin();                           // Запуск библиотеки, по умолчанию 9 бит, то есть кратность 0.5 градуса
      lcd.init();
      //lcd.backlight()  ;                 // Инициализация lcd  
      pinMode(buttonPin, INPUT_PULLUP);
      lcd.createChar(1,simvol);                  // генерируем символ
      lcd.createChar(2, P);
      lcd.createChar(3, Y);
      lcd.createChar(4, Z);
      lasttime = 0;
    }
    void loop()
    {
    boolean isButtonUp = digitalRead(buttonPin);

    byte Seconds = ((millis()+TimeLightOffOn)/1000UL)%60;
    byte Minutes  = (((millis()+TimeLightOffOn)/1000UL)/60UL)%60;
    byte Hours   = (((millis()+TimeLightOffOn)/1000UL)/3600UL)%24;
    if (millis() - lasttime > temptime);{
    sensors.requestTemperatures();
    temp1 = sensors.getTempCByIndex(0);
    lasttime = millis ();
    }
    if (isTurnOn && !isButtonUp) {
    isButtonUp = digitalRead(buttonPin);
    if (!isButtonUp) {
    flag++ ;
        }
      if (flag > 1){
      flag = 0;
    }
    }
    isTurnOn = isButtonUp;
    if (flag == 1){
      //lcd.clear();
      lcd.setCursor(0,0);                      
      lcd.print("TEM");
      lcd.print(char(2));  // выводим русскую букву "П"
      lcd.print("EPAT");   // используем латинские буквы
      lcd.print(char(3));  // выводим русскую букву "У"
      lcd.print("PA: ");
      lcd.setCursor(12,0);                                            
      lcd.print(temp1);                          
      lcd.print("\1");                            // Выводим символ градуса                        
      lcd.print("C");
      lcd.print("         ");
    }
    if (flag == 0) {
    lcd.setCursor(0, 0);
    lcd.print("BPEM");
    lcd.print(char(4));
    lcd.print(":");
    lcd.setCursor(6, 0);
    lcd.print(Hours);
    lcd.print(':');
    lcd.print(Minutes);
    lcd.print(':');
    lcd.print(Seconds);
    lcd.print("          ");
    lcd.print(" ");
    }

    }
     
  2. AlexU

    AlexU Гуру

    Точка с запятой лишняя.
     
    arkadyf и Garry_Poter нравится это.
  3. Garry_Poter

    Garry_Poter Нерд

    Благодарю) банальная ошибка получилась)
     
  4. DIYMan

    DIYMan Guest

    lasttime должна быть не int, а unsigned long. Про точку с запятой уже сказали.
     
    arkadyf и Garry_Poter нравится это.
  5. Garry_Poter

    Garry_Poter Нерд

    Вас тоже благодарю)
     
  6. Harly

    Harly Нуб

    Привет!
    Парни подскажите, весь моск уже сломал, при заливке скетча на ардуино(NANO), самые первые строки в черном поле, красным цветом сообщают о библиотеке которая включена (include) из такой-то траектории,
    это ошибка или нет? при этом чуть ниже уже белым цветом пишет сколько места занимает скетч и оставшееся место...(пока не понимаю принципа перезаливки скетча, он каким то образом перезаписывает старый? или встает следом) сильно не пинайте я ток учусь...
     
  7. parovoZZ

    parovoZZ Гуру

    :eek:
    каким-то образом стирает всю память и заливает новую программу.
     
  8. Harly

    Harly Нуб

    спасиб! Понятно, значит в этом плане все гуд.