Это, что за глюки??? Разные IDE arduino

Тема в разделе "Arduino & Shields", создана пользователем Максим B, 15 дек 2017.

  1. Максим B

    Максим B Гуру

    Всем привет. Народ, скомпилируйте у себя код
    Код (Text):

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display

    void setup()
    {
      lcd.init();                      // initialize the lcd
     
      // Print a message to the LCD.
      lcd.backlight();
      lcd.print("Hi");

    }

    void loop()
    {
    }
     
    Это ардуино уно + LCd 16x2 . Одна и таже библиотека , но в версии 1.8.1 - выводится только 1 символ- первый и все, а версии 1.0.5-r2 полностью - все ок. Что не так???
     
  2. DIYMan

    DIYMan Гуру

    В исходнике библиотеки должно быть такое:
    Код (C++):
    inline size_t LiquidCrystal_I2C::write(uint8_t value) {
        send(value, Rs);
        return 1;
    }
     
    return 1 должен быть. Если там return 0 - поменяй. Когда-то давно была такая проблема
     
    arkadyf и Максим B нравится это.
  3. Максим B

    Максим B Гуру

    Сможете помочь исправить ?

    Код (Text):

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    #include <lib_bl999.h>

    static BL999Info info;


    LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display

    void setup()
    {
      lcd.init();   // initialize the lcd
     
          Serial.begin(115200);

        //set digital pin to read info from
        bl999_set_rx_pin(2);

        //start reading data from sensor
        bl999_rx_start();
       
     
      // Print a message to the LCD.
      lcd.backlight();

    }

    void loop()
    {
       bl999_wait_rx();

        //read message to info and if check sum correct - outputs it to the serial port
        if (bl999_get_message(info)) {
            lcd.print("Temperature: " + String(info.temperature / 10.0));
            lcd.print("Humidity: " + String(info.humidity) + "%");
        }
    }
     
    sketch_dec15a.ino: In function 'void loop()':
    sketch_dec15a:35: error: call of overloaded 'String(double)' is ambiguous
    C:\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:70: note: candidates are: String::String(long unsigned int, unsigned char)
    C:\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:69: note: String::String(long int, unsigned char)
    C:\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:68: note: String::String(unsigned int, unsigned char)
    C:\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:67: note: String::String(int, unsigned char)
    C:\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:66: note: String::String(unsigned char, unsigned char)
    C:\arduino-1.0.5-r2\hardware\arduino\cores\arduino/WString.h:65: note: String::String(char)
     
  4. DIYMan

    DIYMan Гуру

    У String нет конструктора для типа double, вот что вам пишут. Вместо вот этого:

    Код (C++):
            lcd.print("Temperature: " + String(info.temperature / 10.0));
            lcd.print("Humidity: " + String(info.humidity) + "%");
    Попробуйте так:
    Код (C++):
    String s1 =    (info.temperature / 10.0);
    String s2 =    info.humidity);

    lcd.print("Temperature: " + s1);
    lcd.print("Humidity: " + s2 + "%");
    Хотя, конечно, дичь так с памятью обходиться :(
     
    arkadyf нравится это.
  5. Максим B

    Максим B Гуру

    Это временный вариант, спасибо, попробую
     
  6. Максим B

    Максим B Гуру

    sketch_dec15a.ino: In function 'void loop()':
    sketch_dec15a:32: error: conversion from 'double' to non-scalar type 'String' requested
    sketch_dec15a:33: error: invalid conversion from 'byte' to 'const char*'
    sketch_dec15a:33: error: initializing argument 1 of 'String::String(const char*)'
     
  7. Максим B

    Максим B Гуру



    Спасибо, даже не знаю, собираются ли такой косяк исправлять - у меня этих arduino IDE очень много. И каждый раз компилить то там, то сям это ппц (((( СПАСИБО помогло.
     
  8. Максим B

    Максим B Гуру


    Данный код заработал как надо , в новой IDe, благодаря вашей подсказке- спасибо.

    Код (Text):

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    #include <lib_bl999.h>

    static BL999Info info;


    LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display

    void setup()
    {
      lcd.init();   // initialize the lcd
     
          Serial.begin(115200);

        //set digital pin to read info from
        bl999_set_rx_pin(2);

        //start reading data from sensor
        bl999_rx_start();
       
     
      // Print a message to the LCD.
      lcd.backlight();

    }

    void loop()
    {
       bl999_wait_rx();

        //read message to info and if check sum correct - outputs it to the serial port
        if (bl999_get_message(info)) {
            lcd.print("Temperature: " + String(info.temperature / 10.0));
            lcd.print("Humidity: " + String(info.humidity) + "%");
        }
    }