Команда вывода значения на TFT SPI

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

  1. MontiMonolitov

    MontiMonolitov Нерд

    Вот кусок кода, график работает, в сериал порт тем и влажность показывает, а на вывод самой темп и влажности ругается,
    Код (C++):
    float humd = htu21d.getHumidity();
      float temp = htu21d.getTemperature();
       
        Serial.print("Temperature: "); Serial.print(temp);
        Serial.print("\t\tHumidity: "); Serial.println(humd);
        TFTscreen.setTextSize(1);
        TFTscreen.text("Temperature", 1, 2);
      TFTscreen.setTextSize(2);
       TFTscreen.text(temp, 100, 2);
      TFTscreen.setTextSize(1);
      TFTscreen.text("Humidity", 1, 50);
    TFTscreen.setTextSize(2);
      TFTscreen.text(humd, 100, 50);
       
       TFTscreen.stroke(255, 200, 100);
       y = map(temp, 15, 30, 40, 20);
      TFTscreen.line(x, 45, x, y);

    TFTscreen.stroke(255, 0, 200);
      z = map(humd, 15, 90, 127, 25);
      TFTscreen.line(x, 127, x, z);
     
      x++;
      if (x >= 160) {
        x = 0;

    exit status 1
    no matching function for call to 'TFT::text(float&, int, int)'
     
  2. Larscliff

    Larscliff Нерд

    Возможно ошибка в этих строчках:
    Код (C++):
    TFTscreen.text(temp, 100, 2);
    TFTscreen.text(humd, 100, 50);
    Метод TFTscreen.text принимает на вход первым аргументом char array, а у вас float. Необходимо сделать преобразование.
     
    Последнее редактирование: 15 янв 2018
  3. MontiMonolitov

    MontiMonolitov Нерд

    Изучаю
    пока нашел вот такое преобразование Float
    Код (C++):
    float humd = htu21d.getHumidity();
    float temp = htu21d.getTemperature();
        Serial.print("Temperature: "); Serial.print(temp);
        Serial.print("\t\tHumidity: "); Serial.println(humd);
        TFTscreen.setTextSize(1);
        TFTscreen.text("Temperature", 1, 2);
      TFTscreen.setTextSize(2);
       TFTscreen.text((int)temp, 90, 2);
    TFTscreen.setTextSize(1);
       TFTscreen.text("~C", 145, 5);
      TFTscreen.setTextSize(1);
      TFTscreen.text("Humidity", 1, 50);
    TFTscreen.setTextSize(2);
      TFTscreen.text((int)humd, 90, 50);
    TFTscreen.setTextSize(1);
      TFTscreen.text("%", 150, 60);
    На экране вместо показаний иероглифы
     
  4. DIYMan

    DIYMan Guest

    В лоб:
    Код (C++):
    String sHumidity, sTemperature;
    float humd = htu21d.getHumidity();
    float temp = htu21d.getTemperature();
    sHumidity = humd;
    sTemperature = temp;


    Serial.print("Temperature: "); Serial.print(temp);
    Serial.print("\t\tHumidity: "); Serial.println(humd);

    TFTscreen.setTextSize(1);
    TFTscreen.text("Temperature", 1, 2);

    TFTscreen.setTextSize(2);
    TFTscreen.text(sTemperature.c_str(), 90, 2);

    TFTscreen.setTextSize(1);
    TFTscreen.text("~C", 145, 5);

    TFTscreen.setTextSize(1);
    TFTscreen.text("Humidity", 1, 50);

    TFTscreen.setTextSize(2);
    TFTscreen.text(sHumidity.c_str(), 90, 50);

    TFTscreen.setTextSize(1);
    TFTscreen.text("%", 150, 60);
     
    arkadyf нравится это.
  5. Larscliff

    Larscliff Нерд

    Попробуйте так:
    Код (C++):
    char temp2[8];
    char humd2[8];
    dtostrf(temp, 1, 2, temp2);
    TFTscreen.text(temp2, 90, 2);
    Ну и для влажности то же самое.
     
    arkadyf нравится это.
  6. MontiMonolitov

    MontiMonolitov Нерд

    DIYMan, спасибо значения отображаются, только при изменении значений цифры друг на друга накладываются
     
  7. DIYMan

    DIYMan Guest

    Стирайте перед отображением. Или юзайте sprintf в буфер, вариантов масса. Тот, что предложил я - просто тупо в лоб.
     
    arkadyf нравится это.