Здравствуйте!. Моя проблема связана с блоком статуса 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;
}
			
			
									
						блок статуса wifi и блок дисплея HD44780 не компилируются вместе
- 
				pilotyac71
- Рядовой
- Сообщения: 27
- Зарегистрирован: 06 мар 2019, 16:36
- Имя: Александр
- 
				Naladchik
- Капитан
- Сообщения: 909
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 22 раза
- Поблагодарили: 22 раза
блок статуса wifi и блок дисплея HD44780 не компилируются вместе
Зайти в редактор блока и переименовать вход En, добавив какие нибудь буквы, символы. Переменная с таким именем уже используется в блоке LiquidCrystal_I2C
- 
				pilotyac71
- Рядовой
- Сообщения: 27
- Зарегистрирован: 06 мар 2019, 16:36
- Имя: Александр
блок статуса wifi и блок дисплея HD44780 не компилируются вместе
Спасибо за помощь. Все получилось. Я не разбираюсь в программировании, но в других блоках тоже есть вход EN и на эти входа он не ругается. Например в проекте с дисплеем st7735, у меня все работает. Если можно объясните это явление. Спасибо.
			
			
									
						- 
				Naladchik
- Капитан
- Сообщения: 909
- Зарегистрирован: 04 окт 2015, 19:10
- Откуда: Новосибирск
- Имя: Павел
- Благодарил (а): 22 раза
- Поблагодарили: 22 раза
блок статуса wifi и блок дисплея HD44780 не компилируются вместе
1.  Эта проблема характерна для блоков, сделаных в старом редакторе, в новом названия входов/выходов в текст скетча не переносятся.
2. Написания En и EN не равнозначны, возможно попалось такое сочетание.
			
			
									
						2. Написания En и EN не равнозначны, возможно попалось такое сочетание.
- 
				pilotyac71
- Рядовой
- Сообщения: 27
- Зарегистрирован: 06 мар 2019, 16:36
- Имя: Александр
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость
