Ошибка ISO C++ forbids comparison between pointer and integer [-fpermissive]

KorAndr
Offline
Зарегистрирован: 01.12.2021

Помогите исправить ошибку, новичек, следом и еще одна:

In function 'void loop()'

Скетч прилагаю:

#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
 
OneWire oneWire(8);
DallasTemperature ds(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
//датчики температури за адресом
DeviceAddress TempV = {0x28, 0xD8, 0xF5, 0x8F, 0x38, 0x20, 0x1, 0x28};
DeviceAddress Tosol = {0x28, 0x80, 0xC3, 0x90, 0x38, 0x20, 0x1, 0x1D};
float Volt = 0;
 
int led = 10;//светодиод
 
void setup() {
    Serial.begin(9600);
    ds.begin();
    lcd.init();                                // Инициализация lcd    
    lcd.backlight();                           // Включаем подсветку
    
  pinMode(led, OUTPUT);  //светодиод
 }
 
void loop() {
 
    ds.requestTemperatures(); // считываем температуру с датчиков
    
   // Serial.print("Temp: ");
  //  Serial.print(ds.getTempC(TempV)); // отправляем температуру
  //  Serial.println("C");
  //  Serial.print("Tosol: ");
 //   Serial.print(ds.getTempC(Tosol)); // отправляем температуру
  //  Serial.println("C");
        
//    Serial.println("");
//    delay(300);
    
    Volt = analogRead(A0) / 40.92; //пiн для вольтметру
    Serial.println(Volt);
    Serial.println("Вт");
    delay(300);
    
  ds.requestTemperatures();              // Считываем показания температуры
  lcd.setCursor(0,0);                        // Устанавливаем курсор на 1 строку, ячейка 1
  lcd.print("tv");   
  lcd.setCursor(3,0);                         // Устанавливаем курсор на 1 строку, ячейка 3 
  lcd.print(ds.getTempC(TempV),0);      // Выводим показания температуры 
                       
  lcd.setCursor(6,0);                        // Устанавливаем курсор на 1 строку, ячейка 6
  lcd.print("ts"); 
  lcd.setCursor(8,0);                         // Устанавливаем курсор на 1 строку, ячейка 8 
  lcd.print(ds.getTempC(Tosol),0);      // Выводим показания температуры 
 
  lcd.setCursor(11,0);                        // Устанавливаем курсор на 1 строку, ячейка 11
  lcd.print("v"); 
  lcd.setCursor(12,0);                         // Устанавливаем курсор на 1 строку, ячейка 12 
  lcd.print(Volt,1);      // Выводим показания температуры 
 
  if (Volt>13) {
    digitalWrite(led, LOW);// включення светодиода
    delay(300); //затримка перевірка 5с, якщо невірно виправити 5000
    }
   if (TempV>16){
 //     digitalWrite(led, HIGH);// выключення светодиода
 //    delay(300); //затримка перевірка 3хв, якщо невірно виправити 180*1000
    }
}
KorAndr
Offline
Зарегистрирован: 01.12.2021

Выскакивает при последнем сравнении if (TempV>16){

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

вставьте код по правилам форума

KorAndr
Offline
Зарегистрирован: 01.12.2021

Извините, сразу не разобрался что нужно код вставлять в определеное место, исправлючь, как отредактировать єто не знаю.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это русскоязычный форум.

KorAndr пишет:

как отредактировать єто не знаю.

Никак вставьте в новом посте, в этой же теме, но новым постом.

KorAndr
Offline
Зарегистрирован: 01.12.2021
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
 
OneWire oneWire(8);
DallasTemperature ds(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
//датчики температури за адресом
DeviceAddress TempV = {0x28, 0xD8, 0xF5, 0x8F, 0x38, 0x20, 0x1, 0x28};
DeviceAddress Tosol = {0x28, 0x80, 0xC3, 0x90, 0x38, 0x20, 0x1, 0x1D};
float Volt = 0;
 
int led = 10;//светодиод
 
void setup() {
    Serial.begin(9600);
    ds.begin();
    lcd.init();                                // Инициализация lcd    
    lcd.backlight();                           // Включаем подсветку
    
  pinMode(led, OUTPUT);  //светодиод
 }
 
void loop() {
 
    ds.requestTemperatures(); // считываем температуру с датчиков
    
   // Serial.print("Temp: ");
  //  Serial.print(ds.getTempC(TempV)); // отправляем температуру
  //  Serial.println("C");
  //  Serial.print("Tosol: ");
 //   Serial.print(ds.getTempC(Tosol)); // отправляем температуру
  //  Serial.println("C");
        
//    Serial.println("");
//    delay(300);
    
    Volt = analogRead(A0) / 40.92; //пiн для вольтметру
    Serial.println(Volt);
    Serial.println("Вт");
    delay(300);
    
  ds.requestTemperatures();              // Считываем показания температуры
  lcd.setCursor(0,0);                        // Устанавливаем курсор на 1 строку, ячейка 1
  lcd.print("tv");   
  lcd.setCursor(3,0);                         // Устанавливаем курсор на 1 строку, ячейка 3 
  lcd.print(ds.getTempC(TempV),0);      // Выводим показания температуры 
                       
  lcd.setCursor(6,0);                        // Устанавливаем курсор на 1 строку, ячейка 6
  lcd.print("ts"); 
  lcd.setCursor(8,0);                         // Устанавливаем курсор на 1 строку, ячейка 8 
  lcd.print(ds.getTempC(Tosol),0);      // Выводим показания температуры 
 
  lcd.setCursor(11,0);                        // Устанавливаем курсор на 1 строку, ячейка 11
  lcd.print("v"); 
  lcd.setCursor(12,0);                         // Устанавливаем курсор на 1 строку, ячейка 12 
  lcd.print(Volt,1);      // Выводим показания температуры 
 
  if (Volt>13) {
    digitalWrite(led, LOW);// включення светодиода
    delay(300); //затримка перевірка 5с, якщо невірно виправити 5000
    }
   if (TempV>16){
 //     digitalWrite(led, HIGH);// выключення светодиода
 //    delay(300); //затримка перевірка 3хв, якщо невірно виправити 180*1000
    }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А текст ошибки где? Только ПОЛНОСТЬЮ и копипастой!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ошибка что типы не совпадают?

KorAndr
Offline
Зарегистрирован: 01.12.2021

BOOM пишет:

Ошибка что типы не совпадают?

на дисплее выводится вся информация правильно, но при проверке скетча выдает ошибку.

b707
Offline
Зарегистрирован: 26.05.2017

строка 65

KorAndr
Offline
Зарегистрирован: 01.12.2021

b707 пишет:
строка 65

Да, в чем может быть проблема.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

KorAndr пишет:

b707 пишет:
строка 65

Да, в чем может быть проблема.

а что вы хотели в этом блоке получить?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

строка 65.

Чудо, посмотри как описана TempV!!! ;)))) Самому не смешно?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

строка 65.

Чудо, посмотри как описана TempV!!! ;)))) Самому не смешно?

ну что вы накинулись, пацан может не хочет на непрогретом двигателе начинать движение, спутал малость, что температуру надо получить, прежде чем сравнивать )))

KorAndr
Offline
Зарегистрирован: 01.12.2021

Спасибо всем за советы, я ток начинаю, проблему вроде решил так, вместо if (TempV>16), прописал код if ((ds.getTempC(Temp)<26) и все заработало, если неверно, дайте знать.

b707
Offline
Зарегистрирован: 26.05.2017

KorAndr пишет:

прописал код if ((ds.getTempC(Temp)<26) и все заработало, если неверно, дайте знать.

неверно, в исходном коде нет переменной Temp

KorAndr
Offline
Зарегистрирован: 01.12.2021

b707 пишет:

KorAndr пишет:

прописал код if ((ds.getTempC(Temp)<26) и все заработало, если неверно, дайте знать.

неверно, в исходном коде нет переменной Temp

По советам выше TempV переименовал в Temp

ddr2
Offline
Зарегистрирован: 27.12.2020

если бы компилятор выводил ошибки в вашей родной локали, то вывод выглядел бы как "Ошибка: ISO C++ запрещает сравнение между указателем и целым числом [-fpermissive]"

И вопрос бы отпал сам собой. 

TempV это адрес структуры типа DeviceAddress, которую вы инициализировали выше. 

Компилятор С++ настолько умён, что не даёт вам сравнивать адрес на структуру с числом "16".

TempV>16

 

b707
Offline
Зарегистрирован: 26.05.2017

KorAndr пишет:

По советам выше TempV переименовал в Temp

интересно, где это вы увидели совет переименовать переменную? :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

интересно, где это вы увидели совет переименовать переменную? :)

Думаю, что в #12 :-)