Помогите! что не так в скетче?

Тема в разделе "Arduino & Shields", создана пользователем Aleks77777, 23 фев 2020.

  1. Aleks77777

    Aleks77777 Нуб

    Компилятор не ругается. Просто дисплей ничего не отображает(вернее отображает белые квадратики).
    Код (C++):
    //НАСТРОЙКИ
    #define VENT=26
    //#define OBOG=20
    #define POL=50
    #define LCD_ADDR_AND_TUPE 0x27,16,2
    #define BME_ADDR 0x76
    //АНАЛОГОВЫЕ ДАТЧИКИ
    #define DALLAS A2
    #define VLAG_POCV A3
    //БИБЛИОТЕКИ
    //ОБЪЯВЛЯЕМ УСТРОЙСТВА I2C
    Adafruit_BME280 bme;
    LiquidCrystal_I2C lcd(LCD_ADDR_AND_TUPE);
    DallasTemperature ds(DALLAS);
    RTC_DS3231 rtc;
    //ПЕРЕМЕННЫЕ
    float Temp(bme.readTemperature());
    int Vlag (bme.readHumidity());
    float Temp_pocv (ds.getTempCByIndex(0));
    int vlag = analogRead(VLAG_POCV);
    int vlag100=map(vlag, 0, 1023, 0, 100);
    int KeyOutPin = 4;
    int KeyInPin1 = 6;
    int KeyInPin2 = 5;
    int KeyInPin3 = 8;
    int KeyInPin4 = 7;
    char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    void setup(){
    pinMode(KeyOutPin, OUTPUT);

    pinMode(KeyInPin1, INPUT);
    digitalWrite(KeyInPin1, HIGH);

    pinMode(KeyInPin2, INPUT);
    digitalWrite(KeyInPin2, HIGH);

    pinMode(KeyInPin3, INPUT);
    digitalWrite(KeyInPin3, HIGH);

    pinMode(KeyInPin4, INPUT);
    digitalWrite(KeyInPin4, HIGH);
    lcd.init();
    lcd.backlight();
    privetFunk();
    glavlcdFunk();
    }
    void privetFunk(){
    lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print("Hallo,Alex");
    lcd.setCursor(5, 1);
    lcd.print("LOADING");
    delay(5000);

    }
    void glavlcdFunk(){
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    lcd.clear();
    lcd.setCursor(0, 0);
    glavlcdFunkloop;
    }
    void loop() {
    if((!digitalRead(KeyInPin1))){
    vosdFunk();
    }
    if((!digitalRead(KeyInPin2))){
    pocvFunk();
    }
    if((!digitalRead(KeyInPin3))){
    glavlcdFunk();
    }
    }
    void pocvFunk(){
    lcd.clear();
    lcd.setCursor(5,0);
    lcd.print("POCV");
    lcd.setCursor(0, 0);
    lcd.print("TEMP");
    lcd.setCursor(11, 0);
    lcd.print("VLAG");
    lcd.setCursor(0, 1);
    lcd.print (Temp_pocv);
    lcd.print("C");
    lcd.setCursor(11, 1);
    lcd.print(vlag100);
    lcd.print("%");
    delay(1000);
    }
    void vosdFunk(){
    lcd.clear();
    lcd.setCursor(5,0);
    lcd.print("VOSD");
    lcd.setCursor(0, 0);
    lcd.print("TEMP");
    lcd.setCursor(11, 0);
    lcd.print("VLAG");
    lcd.setCursor(0, 1);
    lcd.print (Temp);
    lcd.print("C");
    lcd.setCursor(11, 1);
    lcd.print(Vlag);
    lcd.print("%");
    delay(1000);

    }
    void glavlcdFunkloop(){
    DateTime now = rtc.now();
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    lcd.print(now.second(), DEC);
    lcd.setCursor(2,1);
    lcd.print(now.day(), DEC);
    lcd.print('/');
    lcd.print(now.month(), DEC);
    lcd.print('/');
    lcd.print(now.year(), DEC);
    lcd.setCursor(8,0);
    lcd.print(daysOfTheWeek[now.day TheWeek()]);
    delay(1000);
    }
    P.S. библиотеки просто лень было вставить).
    И с тем же подключением прошивал примером для дисплея и всё работало.
    Значит, что то в скетче не так.
     
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Если вам лень, то кому НЕ лень ?
    #define VENT=26 - это синтаксически правильно ? Мой компилятор ругается.
    #define POL=50
    #define LCD_ADDR_AND_TUPE(может TYPE ?) 0x27,16,2

    #define LCD_ADDR_AND_TUPE 0x27,16,2
    ...
    LiquidCrystal_I2C lcd(LCD_ADDR_AND_TUPE); Передача группы параметров поддерживается ?
    Не сильно спец в языке, поэтому просто - что в глаза попало.
     
    Последнее редактирование: 23 фев 2020
  3. Asper Daffy

    Asper Daffy Иксперд

    О как!

    P.S. Прости братан, в твоём бреде просто лень было разбираться.
     
  4. Aleks77777

    Aleks77777 Нуб

    Извините. А если так.
    Код (C++):
    #include <Keypad.h>
    #include <DallasTemperature.h>
    #include <OneWire.h>
    #include <LiquidCrystal_I2C.h>
    #include <Adafruit_Sensor.h>
    #include <Adafruit_BME280.h>
    //ОБЪЯВЛЯЕМ УСТРОЙСТВА I2C
      Adafruit_BME280 bme;
      LiquidCrystal_I2C lcd(0x27, 16, 2);
      /*DallasTemperature ds(A2);*/
      RTC_DS3231 rtc;
    float Temp(bme.readTemperature());
    int Vlag (bme.readHumidity());
      float Temp_pocv (ds.getTempCByIndex(0));
      int vlag = analogRead(A3);
      int vlag100 = map(vlag, 0, 1023, 0, 100);
      char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
     
    void setup() {
      rtc.begin();


      lcd.init();
      lcd.backlight();
      lcd.setCursor(4, 0);
      lcd.print("Hello,Alex");
      lcd.setCursor(5, 1);
      lcd.print("LOADING");
      rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
     
      delay(5000);
    }
    void loop() {
    lcd.clear();
    lcd.backlight();
      lcd.setCursor(0, 0);
        DateTime now = rtc.now();
      lcd.print(now.hour(), DEC);
      lcd.print(':');
      lcd.print(now.minute(), DEC);
      lcd.print(':');
      lcd.print(now.second(), DEC);
      lcd.setCursor(4, 1);
      lcd.print(now.day(), DEC);
      lcd.print('/');
      lcd.print(now.month(), DEC);
      lcd.print('/');
      lcd.print(now.year(), DEC);
      lcd.setCursor(9, 0);
      lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
      delay(10000);



       lcd.clear();
      lcd.setCursor(5, 0);
      lcd.print("VOSD");
      lcd.setCursor(0, 0);
      lcd.print("TEMP");
      lcd.setCursor(11, 0);
      lcd.print("VLAG");
      lcd.setCursor(0, 1);
      lcd.print (Temp);
      lcd.print("C");
      lcd.setCursor(11, 1);
      lcd.print(Vlag);
      lcd.print("%");
      delay(1000);

    }
    if ((!digitalRead(KeyInPin1))) {
        vosdFunk();
      }
      if ((!digitalRead(KeyInPin2))) {
        pocvFunk();
      }
      if ((!digitalRead(KeyInPin3))) {
        glavlcdFunk();
      }

    void glavlcdFunkloop() {
      DateTime now = rtc.now();
      lcd.print(now.hour(), DEC);
      lcd.print(':');
      lcd.print(now.minute(), DEC);
      lcd.print(':');
      lcd.print(now.second(), DEC);
      lcd.setCursor(2, 1);
      lcd.print(now.day(), DEC);
      lcd.print('/');
      lcd.print(now.month(), DEC);
      lcd.print('/');
      lcd.print(now.year(), DEC);
      lcd.setCursor(8, 0);
      lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
      delay(1000);
    }






    void pocvFunk() {
      lcd.clear();
      lcd.setCursor(5, 0);
      lcd.print("POCV");
      lcd.setCursor(0, 0);
      lcd.print("TEMP");
      lcd.setCursor(11, 0);
      lcd.print("VLAG");
      lcd.setCursor(0, 1);
      lcd.print (Temp_pocv);
      lcd.print("C");
      lcd.setCursor(11, 1);
      lcd.print(vlag100);
      lcd.print("%");
      delay(1000);


    }
    void vosdFunk() {

    }
     
  5. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Если у вас не получается увидеть на дисплее хоть что-нибудь - нет смысла подсовывать Ардуине такие "простыни". Закомментируйте всё кроме загрузки библиотеки дисплея, инициализации и добивайтесь вывода в цикле например своего имени. Задачу любую в жизни всегда разбивают на элементарные куски и запускают по частям.
     
    kraus и issaom нравится это.
  6. Aleks77777

    Aleks77777 Нуб

    Я уже так делал. Выводилось приветствие на 5 секунд и потом выводился главный экран с текущим временем, датой и т.д. Как только я добавляю управление клавиатурой дисплей показывает белые квадраты.
     
  7. Ariadna-on-Line

    Ariadna-on-Line Гуру

    То есть выводит приветствие на 5с, время дату на 10с, очищает экран, тут же выводит несколько слов, ждет 1с, и здесь у вас сейчас цикл закругляется. В норме у вас скобочка повторения цикла должна стоять перед void glavlcd... ?
     
    Последнее редактирование: 24 фев 2020
  8. Aleks77777

    Aleks77777 Нуб

    Я вообще хотел сделать так
    Код (C++):
    #include <Keypad.h>
    #include <DallasTemperature.h>
    #include <OneWire.h>
    #include <LiquidCrystal_I2C.h>
    #include <Adafruit_Sensor.h>
    #include <Adafruit_BME280.h>
    //ОБЪЯВЛЯЕМ УСТРОЙСТВА
      Adafruit_BME280 bme;
      LiquidCrystal_I2C lcd(0x27, 16, 2);
      /*DallasTemperature ds(A2);*/
      RTC_DS3231 rtc;
    float Temp(bme.readTemperature());
    int Vlag (bme.readHumidity());
      float Temp_pocv (ds.getTempCByIndex(0));
      int vlag = analogRead(A3);
      int vlag100 = map(vlag, 0, 1023, 0, 100);
      char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

    void setup() {
      rtc.begin();
      lcd.init();
      lcd.backlight();
      lcd.setCursor(4, 0);
      lcd.print("Hello,Alex");
      lcd.setCursor(5, 1);
      lcd.print("LOADING");
      rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

      delay(5000);
    }
    void loop() {
    lcd.clear();
    lcd.backlight();
      lcd.setCursor(0, 0);
        DateTime now = rtc.now();
      lcd.print(now.hour(), DEC);
      lcd.print(':');
      lcd.print(now.minute(), DEC);
      lcd.print(':');
      lcd.print(now.second(), DEC);
      lcd.setCursor(4, 1);
      lcd.print(now.day(), DEC);
      lcd.print('/');
      lcd.print(now.month(), DEC);
      lcd.print('/');
      lcd.print(now.year(), DEC);
      lcd.setCursor(9, 0);
      lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
      delay(1000);

    }
    if ((!digitalRead(KeyInPin1))) {
        lcd.clear();
      lcd.setCursor(5, 0);
      lcd.print("VOSD");
      lcd.setCursor(0, 0);
      lcd.print("TEMP");
      lcd.setCursor(11, 0);
      lcd.print("VLAG");
      lcd.setCursor(0, 1);
      lcd.print (Temp);
      lcd.print("C");
      lcd.setCursor(11, 1);
      lcd.print(Vlag);
      lcd.print("%");
      delay(1000);

      }
      if ((!digitalRead(KeyInPin2))) {
        lcd.clear();
      lcd.setCursor(5, 0);
      lcd.print("POCV");
      lcd.setCursor(0, 0);
      lcd.print("TEMP");
      lcd.setCursor(11, 0);
      lcd.print("VLAG");
      lcd.setCursor(0, 1);
      lcd.print (Temp_pocv);
      lcd.print("C");
      lcd.setCursor(11, 1);
      lcd.print(vlag100);
      lcd.print("%");
      delay(1000);


    }
      }
      if ((!digitalRead(KeyInPin3))) {
      DateTime now = rtc.now();
      lcd.print(now.hour(), DEC);
      lcd.print(':');
      lcd.print(now.minute(), DEC);
      lcd.print(':');
      lcd.print(now.second(), DEC);
      lcd.setCursor(2, 1);
      lcd.print(now.day(), DEC);
      lcd.print('/');
      lcd.print(now.month(), DEC);
      lcd.print('/');
      lcd.print(now.year(), DEC);
      lcd.setCursor(8, 0);
      lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
      delay(1000);
    }
    И delay нужен чтобы показания датчиков обновлялись раз в секунду
     
  9. Aleks77777

    Aleks77777 Нуб

    Не знаю, важно или нет. Но деталька, которая отмечена на картинке, отсутствует. Может в ней и проблема? edited_image.jpg
     
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Я совсем не программист (скорее электронщик- схемотехник). Не могу понять как ваша прога будет работать, если у нее в цикле нет ничего кроме приветствия. Или я не прав ?
     

    Вложения:

    • Скетч.JPG
      Скетч.JPG
      Размер файла:
      47 КБ
      Просмотров:
      233
  11. Aleks77777

    Aleks77777 Нуб

    Упс.... Забыл убрать }, но это не решило проблему(
     
  12. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Как это убрать, а что цикл закрывать будет ? Вы хотели сказать - перенес ? А здесь ?
     

    Вложения:

  13. fogary

    fogary Гик

    Aleks77777
    Код (C++):
    ...
    //ПЕРЕМЕННЫЕ
    float Temp(bme.readTemperature());
    int Vlag (bme.readHumidity());
    float Temp_pocv (ds.getTempCByIndex(0));
    ...
    Могу ошибаться, но странные какие-то переменные.


    Код (C++):

    char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
     
    Почему не так:
    Код (C++):

    char *daysOfTheWeek[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
     
     
  14. Aleks77777

    Aleks77777 Нуб

    Компилятор ругается если убрать)
     
  15. Aleks77777

    Aleks77777 Нуб

    Вот я тут ещё один код сделал, но он опять не работает. По частям нормально, а как только всё сразу, то никак.
    Код (C++):
    #include <LiquidCrystal_I2C.h>




    #include <GyverEncoder.h>


    //БИБЛИОТЕКИ
    #include <RTClib.h>
    #include <Keypad.h>
    #include <DallasTemperature.h>
    #include <OneWire.h>
    #include <Adafruit_Sensor.h>
    #include <Adafruit_BME280.h>

    //ОБЪЯВЛЯЕМ УСТРОЙСТВА I2C
      Adafruit_BME280 bme;
      LiquidCrystal_I2C lcd(0x27, 16, 2);
      DallasTemperature ds(A2);
      RTC_DS3231 rtc;
      Encoder enc(2, 1, 10);
    float Temp(bme.readTemperature());
    int Vlag (bme.readHumidity());
      float Temp_pocv (ds.getTempCByIndex(0));
      int vlag = analogRead(A3);
      int vlag100 = map(vlag, 0, 1023, 0, 100);
      char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
      int menu = 0;
    void setup() {
      rtc.begin();
    pinMode(10, INPUT);
    bme.begin(0x76);

      lcd.init();
      lcd.backlight();
      lcd.setCursor(4, 0);
      lcd.print("Hello,Alex");
      lcd.setCursor(5, 1);
      lcd.print("LOADING");
      rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
     
      delay(5000);
    }
    void loop() {
     

    lcd.clear();
    lcd.backlight();
      lcd.setCursor(0, 0);
        DateTime now = rtc.now();
      lcd.print(now.hour(), DEC);
      lcd.print(':');
      lcd.print(now.minute(), DEC);
      lcd.print(':');
      lcd.print(now.second(), DEC);
      lcd.setCursor(4, 1);
      lcd.print(now.day(), DEC);
      lcd.print('/');
      lcd.print(now.month(), DEC);
      lcd.print('/');
      lcd.print(now.year(), DEC);
      lcd.setCursor(9, 0);
      lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
     
      delay(1000);
      enc.tick();
      if (enc.isRight()){
        menu++;
      }
      if(enc.isLeft()){
        menu--;
      }
       if(enc.isDouble()){
        lcd.backlight();
      }if(enc.isClick()){
        lcd.noBacklight();
      }
      switch(menu){
        case 0:
         lcd.clear();
    lcd.backlight();
      lcd.setCursor(0, 0);
        DateTime now = rtc.now();
      lcd.print(now.hour(), DEC);
      lcd.print(':');
      lcd.print(now.minute(), DEC);
      lcd.print(':');
      lcd.print(now.second(), DEC);
      lcd.setCursor(4, 1);
      lcd.print(now.day(), DEC);
      lcd.print('/');
      lcd.print(now.month(), DEC);
      lcd.print('/');
      lcd.print(now.year(), DEC);
      lcd.setCursor(9, 0);
      lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
     
      delay(1000);
      break;
      case 1:
      lcd.clear();
      lcd.setCursor(5, 0);
      lcd.print("VOSD");
      lcd.setCursor(0, 0);
      lcd.print("TEMP");
      lcd.setCursor(11, 0);
      lcd.print("VLAG");
      lcd.setCursor(0, 1);
      lcd.print (Temp);
      lcd.print("C");
      lcd.setCursor(11, 1);
      lcd.print(Vlag);
      lcd.print("%");
      delay(1000);
      break;
      case -1:
      lcd.clear();
      lcd.setCursor(5, 0);
      lcd.print("POCV");
      lcd.setCursor(0, 0);
      lcd.print("TEMP");
      lcd.setCursor(11, 0);
      lcd.print("VLAG");
      lcd.setCursor(0, 1);
      lcd.print (Temp_pocv);
      lcd.print("C");
      lcd.setCursor(11, 1);
      lcd.print(vlag100);
      lcd.print("%");
      delay(1000);
    break;
      }
      }
     
     
  16. parovoZZ

    parovoZZ Гуру

    Ну что же - дебаггер в руки и вперёд с песней по строчкам!
     
    b707 и Ariadna-on-Line нравится это.
  17. Aleks77777

    Aleks77777 Нуб

    А можно без острот?
     
  18. Ariadna-on-Line

    Ariadna-on-Line Гуру

    ...Ржевский, вы любите детей ? Детей ? ...нет-с. Но сам процесс !...
    Вместо того чтобы исправить ошибку и сообщить о результатах, вы генерИте очередной вариант "простыни".
    Ну чтож. Возможно вам нравится "сам процесс"...
     
    Последнее редактирование: 28 фев 2020
  19. parovoZZ

    parovoZZ Гуру

    Если без острот, то дай понятный комментарий в коде на каждую строчку. Тогда мы все будем понимать, что делает код.
     
  20. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Не работает вывод на ЖК из-за несуразицы в коде.Именно на это, он жаловался. А сам "наталкивает" библ...
     
    Последнее редактирование: 28 фев 2020