блок статуса wifi и блок дисплея HD44780 не компилируются вместе

Контроллеры на основе ESP32
Ответить
pilotyac71
Рядовой
Сообщения: 9
Зарегистрирован: 06.03.2019{, 16:36}
Репутация: 1
Имя: Александр

блок статуса wifi и блок дисплея HD44780 не компилируются вместе

#1

Сообщение pilotyac71 » 29.12.2023{, 22:02}

Здравствуйте!. Моя проблема связана с блоком статуса wifi с темы "Контроль за WiFi" созданный пользователем Serquick. Проблема в том, что он не хочет работать с блоком дисплея на чипе HD44780. Вернее не работает блок статуса wifi с входом "EN". При этом отдельно от блока дисплея на чипе HD44780 или с блоками TFT дисплея, а так же его же блок без входа "EN" компилируется и работает. При компиляции выдает вот такую ошибку. Делаю все в FLProg 7.5.2.

Arduino: 1.8.19 (Windows 10), Плата:"ESP32 Dev Module, Disabled, Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None"


In file included from C:\PortableFLProg_7-5-2_Win64\ideV8\portable\packages\esp32\hardware\esp32\1.0.6\cores\esp32/Arduino.h:40:0,

from sketch\pr9.ino.cpp:1:

C:\PortableFLProg_7-5-2_Win64\ideV8\portable\packages\esp32\hardware\esp32\1.0.6\cores\esp32/binary.h:58:19: error: expected unqualified-id before numeric constant

#define B00000100 4

^

c:\PortableFLProg_7-5-2_Win64\ideV8\portable\sketchbook\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:49:12: note: in expansion of macro 'B00000100'

#define En B00000100 // Enable bit

^

C:\Users\itr_asu\AppData\Local\Temp\flprog\pr9\pr9.ino:7:6: note: in expansion of macro 'En'

bool En;

^

C:\Users\itr_asu\AppData\Local\Temp\flprog\pr9\pr9.ino: In function 'void loop()':

pr9:84:8: error: lvalue required as left operand of assignment

En = !(0);


скетч.

#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C _lcd1(0x27, 16, 2);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;
bool En;
bool out;
bool ESPControllerWifiClient_HRD = 0;
bool ESPControllerWifiClient_status = 1;
bool isWifiClientReconectWite = 0;
unsigned long startWifiClientReconectWite ;
bool ESPControllerWifiClient_isDHCP = 1;
bool ESPControllerWifiClient_IsNeedReconect = 0;
bool ESPControllerWifiClient_workStatus = 1;
char ESPControllerWifiClient_SSID[40] = "1234";
char ESPControllerWifiClient_password[40] = "1234rfhkhjhc";
IPAddress ESPControllerWifiClient_ip(0, 0, 0, 0);
IPAddress ESPControllerWifiClient_dns (0, 0, 0, 1);
IPAddress ESPControllerWifiClient_gateway (0, 0, 0, 1);
IPAddress ESPControllerWifiClient_subnet (255, 255, 255, 0);
uint8_t ESPControllerWifiClient_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
int _disp1oldLength = 0;
void setup()
{
pinMode(12, OUTPUT);
digitalWrite(12, 0);
Wire.begin();
delay(10);
WiFi.mode(WIFI_STA);
if (WiFi.getAutoConnect() != true) WiFi.setAutoConnect(true);
WiFi.setAutoReconnect(true);
_esp32WifiModuleClientReconnect();
_parseMacAddressString(WiFi.macAddress(), ESPControllerWifiClient_mac);
_lcd1.init();
_lcd1.backlight();
}
void loop()
{
if (_isNeedClearDisp1)
{
_lcd1.clear();
_isNeedClearDisp1= 0;
}
if(ESPControllerWifiClient_IsNeedReconect)
{
_esp32WifiModuleClientReconnect();
ESPControllerWifiClient_IsNeedReconect = 0;
}
ESPControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
if (ESPControllerWifiClient_status)
{
if (! ESPControllerWifiClient_HRD)
{
ESPControllerWifiClient_ip = WiFi.localIP();
ESPControllerWifiClient_subnet = WiFi.subnetMask();
ESPControllerWifiClient_gateway = WiFi.gatewayIP();
ESPControllerWifiClient_dns = WiFi.dnsIP();
ESPControllerWifiClient_HRD = 1;
}
}
else
{
ESPControllerWifiClient_HRD = 0;
}
if(ESPControllerWifiClient_workStatus&&(! ESPControllerWifiClient_status))
{
if (! isWifiClientReconectWite)
{
isWifiClientReconectWite = 1;
startWifiClientReconectWite = millis();
}
else
{
if (_isTimer(startWifiClientReconectWite , 5000))
{
WiFi.disconnect();
_esp32WifiModuleClientReconnect();
isWifiClientReconectWite = 0;
}
}
}
//Плата:1
En = !(0); (в этом месте подсвечивает ошибку)
if(En)
{
if(WiFi.status() == WL_CONNECTED)
{
out = true;

}
else
{
out = false;
}
}
digitalWrite(12, out);
if (!(0))
{
_dispTempLength1 = (String("123вса")).length();
if (_disp1oldLength > _dispTempLength1)
{
_isNeedClearDisp1 = 1;
}
_disp1oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 - _dispTempLength1)/2), 0);
_lcd1.print(String("123вса"));
}
else
{
if (_disp1oldLength > 0)
{
_isNeedClearDisp1 = 1;
_disp1oldLength = 0;
}
}
}
bool _isTimer(unsigned long startTime, unsigned long period)
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime)
{
return (currentTime>=(startTime + period));
}
else
{
return (currentTime >=(4294967295-startTime+period));
}
}
int hexStrToInt(String instring)
{
byte len = instring.length();
if (len == 0) return 0;
int result = 0;
for (byte i = 0; i < 8; i++) // только первые 8 цыфар влезуть в uint32
{
char ch = instring;
if (ch == 0) break;
result <<= 4;
if (isdigit(ch))
result = result | (ch - '0');
else result = result | (ch - 'A' + 10);
}
return result;
}
void _esp32WifiModuleClientReconnect()
{
if(ESPControllerWifiClient_isDHCP)
{
WiFi.config(0U, 0U, 0U, 0U, 0U);
}
else
{
WiFi.config(ESPControllerWifiClient_ip, ESPControllerWifiClient_gateway, ESPControllerWifiClient_subnet, ESPControllerWifiClient_dns , ESPControllerWifiClient_dns);
}
WiFi.begin(ESPControllerWifiClient_SSID, ESPControllerWifiClient_password);
}
bool _checkMacAddres(byte array[])
{
bool result = 0;
for (byte i = 0; i < 6; i++)
{
if (array == 255)
{
return 0;
}
if (array > 0)
{
result = 1;
}
}
return result;
}
void _parseMacAddressString(String value, byte array[])
{
int index;
byte buffer[6] = {255, 255, 255, 255, 255, 255};
byte raz = 0;
String tempString;
while ((value.length() > 0) && (raz <= 6))
{
index = value.indexOf(":");
if (index == -1)
{
tempString = value;
value = "";
}
else
{
tempString = value.substring(0, index);
value = value.substring(index + 1);
}
buffer[raz] = byte(hexStrToInt(tempString));
raz++;
}
if (_checkMacAddres(buffer))
{
for (byte i = 0; i < 6; i++)
{
array = buffer;
}
}
}
bool _compareMacAddreses(byte array1[], byte array2[])
{
for (byte i = 0; i < 6; i++)
{
if (array1 != array2)
{
return 0;
}
}
return 1;
}
bool _compareMacAddresWithString(byte array[], String value)
{
byte buffer[6] = {255, 255, 255, 255, 255, 255};
_parseMacAddressString(value, buffer);
return _compareMacAddreses(array, buffer);
}
bool _checkMacAddresString(String value)
{
byte buffer[6] = {255, 255, 255, 255, 255, 255};
_parseMacAddressString(value, buffer);
return _checkMacAddres(buffer);
}
String _macAddresToString(byte array[])
{
String result = "";
String temp ="";
for (byte i = 0; i < 6; i++)
{
temp=String(array,HEX);
if (temp.length() < 2)
{
temp = String("0") + temp;
}
result = result + temp;
if (i < 5)
{
result = result + String(":");
}
}
result.toUpperCase();
return result;
}

Naladchik
Капитан
Сообщения: 824
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

блок статуса wifi и блок дисплея HD44780 не компилируются вместе

#2

Сообщение Naladchik » 30.12.2023{, 10:29}

pilotyac71 писал(а):
29.12.2023{, 22:02}
не работает блок статуса wifi с входом "EN".
Зайти в редактор блока и переименовать вход En, добавив какие нибудь буквы, символы. Переменная с таким именем уже используется в блоке LiquidCrystal_I2C
Win10-64. FLProg Portable.
Изображение

pilotyac71
Рядовой
Сообщения: 9
Зарегистрирован: 06.03.2019{, 16:36}
Репутация: 1
Имя: Александр

блок статуса wifi и блок дисплея HD44780 не компилируются вместе

#3

Сообщение pilotyac71 » 31.12.2023{, 21:57}

Спасибо за помощь. Все получилось. Я не разбираюсь в программировании, но в других блоках тоже есть вход EN и на эти входа он не ругается. Например в проекте с дисплеем st7735, у меня все работает. Если можно объясните это явление. Спасибо.

Naladchik
Капитан
Сообщения: 824
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

блок статуса wifi и блок дисплея HD44780 не компилируются вместе

#4

Сообщение Naladchik » 01.01.2024{, 04:33}

1. Эта проблема характерна для блоков, сделаных в старом редакторе, в новом названия входов/выходов в текст скетча не переносятся.
2. Написания En и EN не равнозначны, возможно попалось такое сочетание.
Win10-64. FLProg Portable.
Изображение

pilotyac71
Рядовой
Сообщения: 9
Зарегистрирован: 06.03.2019{, 16:36}
Репутация: 1
Имя: Александр

блок статуса wifi и блок дисплея HD44780 не компилируются вместе

#5

Сообщение pilotyac71 » 03.01.2024{, 09:39}

Спасибо.

OLGA
Сержант
Сообщения: 101
Зарегистрирован: 04.08.2021{, 09:21}
Репутация: 0
Имя: Павел

блок статуса wifi и блок дисплея HD44780 не компилируются вместе

#6

Сообщение OLGA » 03.01.2024{, 10:40}

-

Ответить

Вернуться в «ESP32»