Ошибка invalid conversion from 'int' to 'HardwareSerial*' [-fpermissive]

totoshka41
Offline
Зарегистрирован: 24.05.2021

Добрый день уважаемые форумчане! Прошу Вашей помощи в решении некоторой задачи, а именно, во время компиляции скетча возникает такая ошибка "invalid conversion from 'int' to 'HardwareSerial*' [-fpermissive]".

Более конкретно:

Arduino: 1.8.13 (Windows 7), Плата:"ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 115200, None"

sketch_may24a:10:23: error: invalid conversion from 'int' to 'HardwareSerial*' [-fpermissive]
 
In file included from C:\Users\ПК\Documents\Arduino\PZEMSoftwareSerial\sketch_may24a\sketch_may24a.ino:3:0:
 
C:\Program Files (x86)\Arduino\libraries\PZEM-004T-v30-master/PZEM004Tv30.h:65:5: note:   initializing argument 1 of 'PZEM004Tv30::PZEM004Tv30(HardwareSerial*, uint8_t)'
 
     PZEM004Tv30(HardwareSerial* port, uint8_t addr=PZEM_DEFAULT_ADDR);
 
     ^
 
exit status 1
 
invalid conversion from 'int' to 'HardwareSerial*' [-fpermissive]
 
буду рад любой помощи! Спасибо!

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

На 146% уверен, что ошибка в строке :,№

 

ЗЫ: даже интересно стало, как такое можно сделать invalid conversion from 'int' to 'HardwareSerial*' )))

totoshka41
Offline
Зарегистрирован: 24.05.2021
//пример кода который я пытаюсь скомпелировать

#include <SoftwareSerial.h>
#include <PZEM004Tv30.h>
#include <dummy.h>

PZEM004Tv30 pzem(16,17);
void setup() {
  Serial.begin(115200);

  Serial.print("Reset Energy");
  pzem.resetEnergy();


  Serial.print("Set address to 0x42");
  pzem.setAddress(0x42);
}

void loop() {
  float volt = pzem.voltage();
  Serial.print("Voltage: ");
  Serial.print(volt);
  Serial.println("V");

  float cur = pzem.current();
  Serial.print("Current: ");
  Serial.print(cur);
  Serial.println("A");

  float powe = pzem.power();
  Serial.print("Power: ");
  Serial.print(powe);
  Serial.println("W");

  float ener = pzem.energy();
  Serial.print("Energy: ");
  Serial.print(ener,3);
  Serial.println("kWh");

  float freq = pzem.frequency();
  Serial.print("Frequency: ");
  Serial.print(freq);
  Serial.println("Hz");

  float pf = pzem.pf();
  Serial.print("PF: ");
  Serial.println(pf);

  delay(1000);
}

 

totoshka41
Offline
Зарегистрирован: 24.05.2021

Rumata пишет:

На 146% уверен, что ошибка в строке :,№

 

ЗЫ: даже интересно стало, как такое можно сделать invalid conversion from 'int' to 'HardwareSerial*' )))

В какой строке? или это сарказм?

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Кажется, эта штука первым аргументов в конструкторе явно не "16" ждала))

Был сарказм. Теперь появились вопросы к конкретной строке 7

Оно там явно хочет адрес/указатель экземпляра HardwareSerial найти

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

totoshka41 пишет:

В какой строке?

Так в Вашем же сообщении написано - в строке №65 файла PZEM004Tv30.h

totoshka41 пишет:

C:\Program Files (x86)\Arduino\libraries\PZEM-004T-v30-master/PZEM004Tv30.h:65:5: note:   initializing argument 1 of 'PZEM004Tv30::PZEM004Tv30(HardwareSerial*, uint8_t)'

Только вот в Вашем коде никакой строки №65 нет. Значит Вы нам пудрите мозг. Компилируете одно, а показывает другое.

Ах, да, Вы же не компилируете, а "компелируете", извините.

А так, про строку №7 Вам уже всё сказали. Посмотрите какие у этой функции параметры и передавайте ей то, чего она ждёт, а не то, что Вам захотелось.

totoshka41
Offline
Зарегистрирован: 24.05.2021

К моему сожалению, мне есть чем заняться, кроме как "пудрить Вам мозги". так что вы не правы. данный пример кода широко распространён в сети и в основном работает. Но у меня увы. во всяком случае спасибо что не поленились потыкать пальцами по клавиатуре ради тонкой шутки о компиляции.

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

totoshka41 пишет:

данный пример кода широко распространён в сети и в основном работает.

1. Если "в основном работает", какого хрена тебе надо?

2. Нахер у тебя софт сериал поключен, если на ESP32 аж три хард сериала и один из них как раз на тех ногах, которые ты пытался указать?

3. Если тебе вот-прям-в-хер-ууперся софт сериал, то ты вообще текст библиотеки открывал? Чтобы включился софт-сериал нужно дефайн прописать.

4. успехов в компЕляции! напиши вот так

PZEM004Tv30 pzem(&Serial2); и придет Щастье!  ;))

 

 

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

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

Т.е. прямого объяснения, как исправить ошибку, которое я привёл

ЕвгенийП пишет:
про строку №7 Вам уже всё сказали. Посмотрите, какие у этой функции параметры и передавайте ей то, чего она ждёт, а не то, что Вам захотелось.

Вы не заметили? Или не поняли?

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

ЕвгенийП пишет:

Вы не заметили? Или не поняли?

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

такой интересный народ - приходят на форум с элементарными вопросами, но при этом никогда не признаются, что нихера не понимают :)

totoshka41
Offline
Зарегистрирован: 24.05.2021

Решено. 

https://github.com/mandulaj/PZEM-004T-v30/issues/24

спасибо за участие!

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

totoshka41 пишет:

Решено. 

https://github.com/mandulaj/PZEM-004T-v30/issues/24

спасибо за участие!

ага, молодец...  Кривой обьезд кривого решения :)

В коде, оказывается, даже оставлена специальная "калитка" для подобных персонажей,  что софт и хард сериалы не отличают :))))

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

И Вам не хворать.

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

b707 пишет:

 ...при этом никогда не признаются...

форум видимо надо рассматривать как пособие по выбиванию признательных показаний )))