Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс дек 08, 2019 21:56:06

Версия компилятора, наверное, очень старая.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс дек 08, 2019 21:57:21

avr-gcc 9.2.0
WinAVR новее, чем WinAVR-20100110 не нашел

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс дек 08, 2019 22:19:54

Ну не знаю, должно собираться:
Код:
wiselord@home /home/AVR/Projects/ampcontrol-m32 $ avr-gcc --version
avr-gcc (Gentoo 9.2.0-r2 p3) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

wiselord@home /home/AVR/Projects/ampcontrol-m32 $ make -s

AVR Memory Usage:

Program:  31794 bytes (.text + .data)
Data:     1763 bytes (.data + .bss)

Точно исходники нужной версией собираются? а не той древней, что в комплекте с WinAVR идёт?

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс дек 08, 2019 22:23:07

На этой системе другая не стояла. Всё скачано и поставлено с нуля

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс дек 08, 2019 22:23:48

avr-gcc --version

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вс дек 08, 2019 23:16:49

Наверное я что-то делаю не так. Уже перекачал заново с другого места. Результат вот такой

Добавлено after 20 minutes 1 second:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Всё получилось. Спасибо, Владимир!

Добавлено after 9 minutes 28 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Только вот сдается мне, что памяти не хватит


Код:
AVR Memory Usage:

Program:  32304 bytes (.text + .data)
Data:     1764 bytes (.data + .bss)
Вложения
Снимок.PNG
(14.4 KiB) Скачиваний: 332

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Пн дек 09, 2019 01:26:43

Ну.. почему не хватит. Ещё 464 байта незанятых осталось.

Но всё равно странно, что так много получилось. Может, из-за убранного -flto?

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Пн дек 09, 2019 21:38:03

Вечером попробую вернуть эту "фиту" назад)) Отпишусь. Спасибо за помощь

Добавлено after 9 hours 20 minutes 3 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Владимир, вернул назад функцию -flto
Вот результат компиляции

Код:
AVR Memory Usage:

Program:  31798 bytes (.text + .data)
Data:     1763 bytes (.data + .bss)

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Пн дек 16, 2019 02:51:37

сделал wifi пульт с управлением по Modbus TCP :))
(даже с обратной связью для ON\OFF и MUTE и возможностью удаленного управления через KaScada_Cloud :) )
+есть теперь возможность вывести на экран пульта температуру и напряжение (через esp8266, а не через МК)
-esp8266 (NodeMCU v.3) + KaScada HMI ModBus + FLProg 6.1.1
-принцип управления по UART, т.е. также как и версия для ПК

Пульт
СпойлерИзображение



Изображение



Изображение



Изображение



Изображение



Изображение



Изображение


проект в flprog 6.1.1
Спойлер
esp8266_MUZZON_new.rar
(29.22 KiB) Скачиваний: 20


проект для KaScada HMI ModBus
Спойлер
esp8266...muZZon...6.0.rar
(658.5 KiB) Скачиваний: 13


скетч для IDE 1.8.8 - АХТУНГ! ПОРТЯНКА
Спойлер#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <ESP8266mDNS.h>
#include <EEPROM.h>
#include <ArduinoOTA.h>
extern "C" {
#include "user_interface.h";
}
bool _modbusSlaveDataTable_0[17];
int _modbusSlaveAddresTable_0[17] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 15, 16, 17, 18, 19};
int _modbusSlaveDataTable_4[3];
int _modbusSlaveAddresTable_4[3] = {0, 1, 2};
byte _modbusSlaveBufferSize = 0;
byte _modbusSlaveBuffer[64];
const unsigned char _modbusSlave_fctsupported[] = {1, 5, 15, 3, 6, 16};
WiFiServer _modbusSlaveTCPServer(502);
WiFiClient _modbusSlaveTCPClient;
byte _modbusSlaveMBAPBuffer[6];
extern "C" {
#include "user_interface.h"
}
os_timer_t watchDogTimer;
int _PWDC = 0;
bool ESP8266ControllerWifiClient_HRD = 0;
bool ESP8266ControllerWifiClient_status = 1;
bool ESP8266ControllerWifiClient_isDHCP = 0;
bool ESP8266ControllerWifiClient_IsNeedReconect = 0;
bool ESP8266ControllerWifiClient_workStatus = 1;
char ESP8266ControllerWifiClient_SSID[40] = "GavigorWiFi-2.4";
char ESP8266ControllerWifiClient_password[40] = "24061984";
IPAddress ESP8266ControllerWifiClient_ip(192, 168, 138, 90);
IPAddress ESP8266ControllerWifiClient_dns (192, 168, 138, 1);
IPAddress ESP8266ControllerWifiClient_gateway (192, 168, 138, 1);
IPAddress ESP8266ControllerWifiClient_subnet (255, 255, 255, 0);
uint8_t ESP8266ControllerWifiClient_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
bool ESP8266ControllerWifi_isNeededRestsrt= 0;
String _OtaUpdater_Name = "esp8266_MUZZON" ;
int ESP8266_freeParam_4202586 = 50 ;
String _OtaUpdater_Password = "87654321" ;
WiFiServer ESP8266ControllerWifi_tspWebServer(80);
WiFiClient ESP8266ControllerWifi_tspWebServer_client;
String ESP8266ControllerWifi_tspWebServer_client_buffer="";
String webSettingPageHeader1 = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<meta charset=\"utf-8\">\r\n<html>\r\n";
String webSettingPageFooterString = "ESP8266 - Разработано в программе FLProg (https://flprog.ru)";
String webSettingPageHeaderString = "ESP8266";
String _ESP8266WebInterfacePageButton_save = "<input type=\"submit\" class = \"buttonFlp\" value=\"Сохранить\"></form>";
String _ESP8266WebInterfacePageButton_reset = "<form action=\"\" method=\"POST\"><input type=\"hidden\" name=\"resetController\" value=\"reset\"><input type=\"submit\" class = \"buttonFlp\" value=\"Перезагрузить\"></form>";
String webSettingPageMainStyle = " .menu {float:left; padding: 1%; margin: 1%;width:16%; border: 1px solid black;border-radius: 8px;} .menuItem { font-weight: 600;font-family: &#39;Times New Roman&#39;, Times, serif;} .header { padding: 10px; left: 0px; right: 0px; top: 0px; background: #00FFFF; text-align: center;font-weight: 600;font-family: &#39;Times New Roman&#39;, Times, serif;font-size: 250%; } .content { float:right; width:78%; } .footer{ float:left; padding: 1%; width:98%; background: #00FFFF; margin-top: 1%; text-align: center;font-weight: 600;font-family: &#39;Times New Roman&#39;, Times, serif;font-size: 150%;}.buttonFlp {width:150px;border-radius:20px;background:#459DE5;color:#fff;font-size:12px;cursor:pointer;float:left; padding: 1%; margin: 1%;}.buttonFlp:hover{background:#358DE5;}.buttonFlp:focus{outline:none;}";
bool isNeededCommitESP8266EEprom = 0;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
bool _changeNumber1_Out = 0;
int _changeNumber1_OLV;
bool _trgrt4 = 0;
bool _trgrt4I = 0;
bool _stou14 = 0;
bool _stou2 = 0;
bool _trgrt3 = 0;
bool _trgrt3I = 0;
bool _stou9 = 0;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _trgrt10 = 0;
bool _trgrt10I = 0;
bool _stou8 = 0;
bool _stou5 = 0;
bool _trgrt5 = 0;
bool _trgrt5I = 0;
bool _stou7 = 0;
bool _stou1 = 0;
bool _trgrt8 = 0;
bool _trgrt8I = 0;
bool _stou11 = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _changeNumber2_Out = 0;
int _changeNumber2_OLV;
bool _stou6 = 0;
bool _trgrt7 = 0;
bool _trgrt7I = 0;
bool _trgrt9 = 0;
bool _trgrt9I = 0;
bool _stou13 = 0;
bool _stou10 = 0;
bool _trgrt14 = 0;
bool _trgrt14I = 0;
bool _stou3 = 0;
bool _stou4 = 0;
bool _trgrt11 = 0;
bool _trgrt11I = 0;
bool _gen2I = 0;
bool _gen2O = 0;
unsigned long _gen2P = 0UL;
bool _trgrt6 = 0;
bool _trgrt6I = 0;
bool _trgrt13 = 0;
bool _trgrt13I = 0;
bool _SysParSave_1_OldSt = 0;

void setup()
{

EEPROM.begin(168);
if(((readByteFromEEPROM(0, 0, 0x0))) != 252) {
(updateByteToEEPROM(0, 0, 0x0, (252)));
(updateBooleanToEEPROM(1, 0, 0x0, (0)));
(updateIntegerToEEPROM(2, 0, 0x0, (50)));
(updateUnsignedLongToEEPROM(4, 0, 0x0, (1519036608)));
(updateStringToEEPROM(8, 40, 0x0, ("GavigorWiFi-2.4")));
(updateStringToEEPROM(48, 40, 0x0, ("24061984")));
(updateStringToEEPROM(88, 40, 0x0, ("esp8266_MUZZON")));
(updateStringToEEPROM(128, 40, 0x0, ("87654321")));
EEPROM.commit();
}
ESP8266ControllerWifiClient_isDHCP = readBooleanFromEEPROM(1, 0, 0x0);
ESP8266_freeParam_4202586 = readIntegerFromEEPROM(2,0,0x0);
ESP8266ControllerWifiClient_ip = _ipAddressFromUnsignetLong(readUnsignedLongFromEEPROM(4, 0, 0x0));
(readStingFromEEPROM(8, 40, 0x0)).toCharArray(ESP8266ControllerWifiClient_SSID, 40);
(readStingFromEEPROM(48, 40, 0x0)).toCharArray(ESP8266ControllerWifiClient_password, 40);
_OtaUpdater_Name = readStingFromEEPROM(88, 40, 0x0);
_OtaUpdater_Password = readStingFromEEPROM(128, 40, 0x0);
char _otaUpdaterNameBuffer[40];
_OtaUpdater_Name.toCharArray(_otaUpdaterNameBuffer, 40);
if(_OtaUpdater_Name.length() > 0){ArduinoOTA.setHostname (_otaUpdaterNameBuffer);}
char _otaUpdaterPasswordBuffer[40];
_OtaUpdater_Password.toCharArray(_otaUpdaterPasswordBuffer, 40);
if(_OtaUpdater_Password.length() > 0){ArduinoOTA.setPassword(_otaUpdaterPasswordBuffer);}
ArduinoOTA.begin();
WiFi.mode(WIFI_STA);
_esp8266WifiModuleClientReconnect();
ESP8266ControllerWifi_tspWebServer.begin();
_modbusSlaveTCPServer.begin();
satrtWachDogTimer();
Serial.begin(9600, SERIAL_8N1);
pinMode(15, INPUT);
pinMode(13, INPUT);


}
void loop()
{

bool _tempVariable_bool;
int _tempVariable_int;
_modbusSlavePoll();
_PWDC = 0;
ESP8266ControllerWifi_tspWebServer_client = ESP8266ControllerWifi_tspWebServer.available();
if (ESP8266ControllerWifi_tspWebServer_client) {
String _WSCReqest="";
int _WSCPageNumber=0;
delay(5);
while (ESP8266ControllerWifi_tspWebServer_client.available())
{
_WSCReqest.concat(char(ESP8266ControllerWifi_tspWebServer_client.read()));
}
ESP8266ControllerWifi_tspWebServer_client.flush();
_WSCPageNumber = _parseWebServerReqest(_WSCReqest);
_sendWebServerPage(_WSCPageNumber);
}
if (isNeededCommitESP8266EEprom) { EEPROM.commit(); isNeededCommitESP8266EEprom=0; }
if(ESP8266ControllerWifi_isNeededRestsrt) {ESP.restart();}
if(ESP8266ControllerWifiClient_IsNeedReconect) {_esp8266WifiModuleClientReconnect(); ESP8266ControllerWifiClient_IsNeedReconect = 0; }
ArduinoOTA.handle();
ESP8266ControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
if (ESP8266ControllerWifiClient_status) { if ( ! ESP8266ControllerWifiClient_HRD) { ESP8266ControllerWifiClient_ip = WiFi.localIP();
ESP8266ControllerWifiClient_subnet = WiFi.subnetMask();
ESP8266ControllerWifiClient_gateway = WiFi.gatewayIP();
ESP8266ControllerWifiClient_dns = WiFi.dnsIP();
WiFi.macAddress(ESP8266ControllerWifiClient_mac);
ESP8266ControllerWifiClient_HRD = 1;
}} else {ESP8266ControllerWifiClient_HRD = 0;}





//Плата:1
//Наименование:вкл-выкл
if ((_modbusSlaveDataTable_0[0])) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if (_trgrt1){if (!_stou5){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(0, HEX))))); _stou5=1;}} else {_stou5=0;}

//Плата:2
//Наименование:громкость +
_tempVariable_bool = (_modbusSlaveDataTable_0[4]);
_modbusSlaveDataTable_0[13] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[4])) { if (! _gen2I) { _gen2I = 1; _gen2O = 1; _gen2P = millis(); } } else { _gen2I = 0 ; _gen2O= 0;}
if (_gen2I) { if ( _isTimer ( _gen2P , ESP8266_freeParam_4202586 )) { _gen2P = millis(); _gen2O = ! _gen2O;}}
if (_gen2O) { if (_trgrt4I) { _trgrt4 = 0;} else {_trgrt4 = 1; _trgrt4I = 1;} } else {_trgrt4 = 0; _trgrt4I = 0;};
if (_trgrt4){if (!_stou3){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(3, HEX))))); _stou3=1;}} else {_stou3=0;}

//Плата:3
//Наименование:громкость -
_tempVariable_bool = (_modbusSlaveDataTable_0[3]);
_modbusSlaveDataTable_0[14] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[3])) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
if (_gen1I) { if ( _isTimer ( _gen1P , ESP8266_freeParam_4202586 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
if (_gen1O) { if (_trgrt5I) { _trgrt5 = 0;} else {_trgrt5 = 1; _trgrt5I = 1;} } else {_trgrt5 = 0; _trgrt5I = 0;};
if (_trgrt5){if (!_stou2){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(4, HEX))))); _stou2=1;}} else {_stou2=0;}

//Плата:4
//Наименование:радио
if ((_modbusSlaveDataTable_0[2])) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
if (_trgrt3){if (!_stou1){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(9, HEX))))); _stou1=1;}} else {_stou1=0;}

//Плата:5
//Наименование:ПК
if ((_modbusSlaveDataTable_0[1])) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;};
if (_trgrt2){if (!_stou4){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(6, HEX))))); _stou4=1;}} else {_stou4=0;}

//Плата:6
//Наименование:mute
if ((_modbusSlaveDataTable_0[5])) { if (_trgrt6I) { _trgrt6 = 0;} else {_trgrt6 = 1; _trgrt6I = 1;} } else {_trgrt6 = 0; _trgrt6I = 0;};
if (_trgrt6){if (!_stou6){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(1, HEX))))); _stou6=1;}} else {_stou6=0;}

//Плата:7
//Наименование:TV
if ((_modbusSlaveDataTable_0[6])) { if (_trgrt7I) { _trgrt7 = 0;} else {_trgrt7 = 1; _trgrt7I = 1;} } else {_trgrt7 = 0; _trgrt7I = 0;};
if (_trgrt7){if (!_stou7){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(7, HEX))))); _stou7=1;}} else {_stou7=0;}

//Плата:8
//Наименование:блютус
if ((_modbusSlaveDataTable_0[7])) { if (_trgrt8I) { _trgrt8 = 0;} else {_trgrt8 = 1; _trgrt8I = 1;} } else {_trgrt8 = 0; _trgrt8I = 0;};
if (_trgrt8){if (!_stou8){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(8, HEX))))); _stou8=1;}} else {_stou8=0;}

//Плата:9
//Наименование:фм след
_tempVariable_bool = (_modbusSlaveDataTable_0[8]);
_modbusSlaveDataTable_0[15] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[8])) { if (_trgrt9I) { _trgrt9 = 0;} else {_trgrt9 = 1; _trgrt9I = 1;} } else {_trgrt9 = 0; _trgrt9I = 0;};
if (_trgrt9){if (!_stou9){Serial.println(((String("RC")) + (String(" ")) + ((String(1, HEX))) + ((String(1, HEX))))); _stou9=1;}} else {_stou9=0;}

//Плата:10
//Наименование:фм пред
_tempVariable_bool = (_modbusSlaveDataTable_0[9]);
_modbusSlaveDataTable_0[16] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[9])) { if (_trgrt10I) { _trgrt10 = 0;} else {_trgrt10 = 1; _trgrt10I = 1;} } else {_trgrt10 = 0; _trgrt10I = 0;};
if (_trgrt10){if (!_stou10){Serial.println(((String("RC")) + (String(" ")) + ((String(1, HEX))) + ((String(2, HEX))))); _stou10=1;}} else {_stou10=0;}

//Плата:11
//Наименование:параметры
if ((_modbusSlaveDataTable_0[10])) { if (_trgrt13I) { _trgrt13 = 0;} else {_trgrt13 = 1; _trgrt13I = 1;} } else {_trgrt13 = 0; _trgrt13I = 0;};
if (_trgrt13){if (!_stou13){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(2, HEX))))); _stou13=1;}} else {_stou13=0;}

//Плата:12
//Наименование:спектр
if ((_modbusSlaveDataTable_0[11])) { if (_trgrt11I) { _trgrt11 = 0;} else {_trgrt11 = 1; _trgrt11I = 1;} } else {_trgrt11 = 0; _trgrt11I = 0;};
if (_trgrt11){if (!_stou11){Serial.println(((String("RC")) + (String(" ")) + ((String(2, HEX))) + ((String(5, HEX))))); _stou11=1;}} else {_stou11=0;}

//Плата:13
//Наименование:таймер
if ((_modbusSlaveDataTable_0[12])) { if (_trgrt14I) { _trgrt14 = 0;} else {_trgrt14 = 1; _trgrt14I = 1;} } else {_trgrt14 = 0; _trgrt14I = 0;};
if (_trgrt14){if (!_stou14){Serial.println(((String("RC")) + (String(" ")) + ((String(2, HEX))) + ((String(2, HEX))))); _stou14=1;}} else {_stou14=0;}

//Плата:14
if (_changeNumber1_Out) {_changeNumber1_Out = 0;} else {_tempVariable_int = (_modbusSlaveDataTable_4[0]);
if (_tempVariable_int != _changeNumber1_OLV) {_changeNumber1_OLV = _tempVariable_int; _changeNumber1_Out = 1;}
}
if(_changeNumber1_Out) {
if( ! _SysParSave_1_OldSt) {
_SysParSave_1_OldSt = 1;
ESP8266_freeParam_4202586 = (_modbusSlaveDataTable_4[0]);
updateIntegerToEEPROM(2,0 , 0x0,( ESP8266_freeParam_4202586));
}} else {
_SysParSave_1_OldSt = 0;}
if (_changeNumber2_Out) {_changeNumber2_Out = 0;} else {_tempVariable_int = ESP8266_freeParam_4202586;
if (_tempVariable_int != _changeNumber2_OLV) {_changeNumber2_OLV = _tempVariable_int; _changeNumber2_Out = 1;}
}
if (_changeNumber2_Out){
_tempVariable_int = ESP8266_freeParam_4202586;
_modbusSlaveDataTable_4[0] = _tempVariable_int;
}

//Плата:15
_tempVariable_int = (byte( (digitalRead (15))));
_modbusSlaveDataTable_4[1] = _tempVariable_int;
_tempVariable_int = (byte( (digitalRead (13))));
_modbusSlaveDataTable_4[2] = _tempVariable_int;






}

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));}
}

void wachDogTimerTick(void *pArg) {
if (_PWDC >= 100){ ESP.reset(); }else{_PWDC = _PWDC+1;}
}
void satrtWachDogTimer(void ) {
os_timer_setfn(&watchDogTimer, wachDogTimerTick, NULL);
os_timer_arm(&watchDogTimer, 100, true);
}
byte _modbusSlavePoll()
{
if( !_modbusSlaveTCPClient.connected()) {_modbusSlaveTCPClient = _modbusSlaveTCPServer.available();}
if (_modbusSlaveTCPClient) { _modbusGetSlaveRxBuffer();} else{return 0;}
if(_modbusSlaveBufferSize ==0) {return 0;}
if ((_modbusSlaveBuffer[0] != 1) && (_modbusSlaveBuffer[0] != 0)) return 0;
byte exception = _modbusValidateRequest();
if (exception > 0) {

if (exception != 255) { _modbusSlaveBuildException( exception );
_modbusSlaveSendTxBuffer();
}
return exception;
}

switch ( _modbusSlaveBuffer[1] ) {
case 1 :
return process_modbus_FC1(0);
break;
case 5:
return process_modbus_FC5();
break;
case 15:
return process_modbus_FC15();
break;
case 3 :
return process_modbus_FC3(4);
break;
case 6 :
return process_modbus_FC6();
break;
case 16 :
return process_modbus_FC16();
break;
default:
break;
}
return 25;
}
byte _modbusValidateRequest() {
boolean isSupported = false;
for (uint8_t i = 0; i < sizeof( _modbusSlave_fctsupported ); i++) {
if (_modbusSlave_fctsupported[i] == _modbusSlaveBuffer[1]) {
isSupported = 1;
break;
}
}
if (!isSupported) { return 1;}
int intRegs = 0;
byte byteRegs;
switch ( _modbusSlaveBuffer[1] ) {
case 1:
if(!(checkModbusRange( word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]) , word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5]) ,0))){return 2;}
break;
case 5:
if(!(checkModbusAddres( word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]),0))){return 2;}
break;
case 15 :
if(!(checkModbusRange(word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]) , word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5]) ,0))){return 2;}
break;
case 6 :
if(!(checkModbusAddres(( word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]) ),4))){return 2;}
break;
case 3 :
case 16 :
if(!(checkModbusRange((word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3])), (word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5])),4))){return 2;}
break;
}
return 0; // OK, no exception code thrown
}
bool checkModbusAddres(int addr, byte table)
{
return (!(( modbusSlaveIndexForAddres(addr,table)) == -1));
}
int modbusSlaveIndexForAddres(int addr, byte table)
{
int tableSize = 0;
switch (table) {
case 0:
tableSize = 17;
break;
case 4:
tableSize = 3;
break;
}
for (byte i = 0; i < tableSize; i++) {if((modbusSlaveAddresFromIndex(i,table)) == addr){return i;}}
return -1;
}
int modbusSlaveAddresFromIndex(byte index, byte table)
{
switch (table) {
case 0:
return _modbusSlaveAddresTable_0[index];
break;
case 4:
return _modbusSlaveAddresTable_4[index];
break;
}
return -1;
}
bool checkModbusRange(int startAddr, int addrNumber, byte table)
{
for (int i=0; i < addrNumber; i++) {if(!(checkModbusAddres((startAddr+i),table))){return false;}}
return true;
}
void _modbusSlaveBuildException( byte exception ) {
byte func = _modbusSlaveBuffer[1];
_modbusSlaveBuffer[0] = 1;
_modbusSlaveBuffer[1] = func + 0x80;
_modbusSlaveBuffer[ 2 ] = exception;
_modbusSlaveBufferSize = 3;}
void _modbusSlaveSendTxBuffer()
{
if(_modbusSlaveBuffer[0] == 0) {_modbusSlaveTCPClient.stop();return;}
String stringBuffer = "";
_modbusSlaveMBAPBuffer[4] = highByte(_modbusSlaveBufferSize);
_modbusSlaveMBAPBuffer[5] = lowByte(_modbusSlaveBufferSize);
for (int i=0; i <6; i++){stringBuffer.concat(char( _modbusSlaveMBAPBuffer[i] ));}
for (int i=0; i <_modbusSlaveBufferSize; i++){stringBuffer.concat(char( _modbusSlaveBuffer[i]));}
_modbusSlaveTCPClient.print(stringBuffer);
_modbusSlaveBufferSize = 0;
}
byte _modbusGetSlaveRxBuffer()
{
byte currentByte = 0;
boolean bBuffOverflow = false;
byte currentByteIndex = 0;
_modbusSlaveBufferSize = 0;
while (_modbusSlaveTCPClient.available() ) {currentByte = _modbusSlaveTCPClient.read();
if (currentByteIndex < 6)
{_modbusSlaveMBAPBuffer[currentByteIndex] = currentByte; }
else
{
_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = currentByte;
_modbusSlaveBufferSize ++;
if (_modbusSlaveBufferSize >= 64) bBuffOverflow = true;}
currentByteIndex++;
}
if (bBuffOverflow) {return -3; }
return _modbusSlaveBufferSize;
}
byte process_modbus_FC1(byte table)
{
byte bytesNo, bitsNo;
int currentCoil, coil;
bool value;
byte index;
int startCoil = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[ 3] );
int coilNo = word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
bytesNo = byte(coilNo / 8);
if (coilNo % 8 != 0) bytesNo ++;
_modbusSlaveBuffer[2] = bytesNo;
_modbusSlaveBufferSize = 3;
bitsNo = 0;
for (currentCoil = 0; currentCoil < coilNo; currentCoil++) {
coil = startCoil + currentCoil;
index = modbusSlaveIndexForAddres(coil, table);
if (table == 0) {value = _modbusSlaveDataTable_0[index]; }
bitWrite(
_modbusSlaveBuffer[ _modbusSlaveBufferSize ],
bitsNo,
value);
bitsNo ++;
if (bitsNo > 7) {
bitsNo = 0;
_modbusSlaveBufferSize++;
}
}
if (coilNo % 8 != 0) _modbusSlaveBufferSize ++;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC3(byte table)
{
int startAddr = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
int byteRegsno = word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
int i;
int value;
byte index;
_modbusSlaveBuffer[ 2 ] = byteRegsno * 2;
_modbusSlaveBufferSize = 3;
for (i = startAddr; i < startAddr + byteRegsno; i++) {
index = modbusSlaveIndexForAddres(i, table);
if (table == 4) {value = _modbusSlaveDataTable_4[index]; }
_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = highByte(value);
_modbusSlaveBufferSize++;
_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = lowByte(value);
_modbusSlaveBufferSize++;
}
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC5()
{
byte index;
int coil = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
index = modbusSlaveIndexForAddres(coil, 0);
_modbusSlaveDataTable_0[index] = (_modbusSlaveBuffer[4] == 0xff );
_modbusSlaveBufferSize = 6;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC15( )
{
byte frameByte, bitsNo;
byte currentCoil, coil;
byte index;
int startCoil = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
int coilNo = word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
bitsNo = 0;
frameByte = 7;
for (currentCoil = 0; currentCoil < coilNo; currentCoil++) {
coil = startCoil + currentCoil;
index = modbusSlaveIndexForAddres(coil, 0);
_modbusSlaveDataTable_0[index] = bitRead( _modbusSlaveBuffer[ frameByte ], bitsNo );
bitsNo ++;
if (bitsNo > 7) {
bitsNo = 0;
frameByte++;
}
}
_modbusSlaveBufferSize = 6;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC6()
{
int addres = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
int index;
index = modbusSlaveIndexForAddres(addres, 4);
_modbusSlaveDataTable_4[index] =word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
_modbusSlaveBufferSize = 6;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC16( )
{
byte func = _modbusSlaveBuffer[1];
int startAddr = _modbusSlaveBuffer[2] << 8 | _modbusSlaveBuffer[3];
int byteRegsno = _modbusSlaveBuffer[4] << 8 | _modbusSlaveBuffer[5];
int i;
int index;
_modbusSlaveBuffer[4] = 0;
_modbusSlaveBuffer[5] = byteRegsno;
_modbusSlaveBufferSize = 6;
for (i = 0; i < byteRegsno; i++) {
index = modbusSlaveIndexForAddres((startAddr+i), 4);
_modbusSlaveDataTable_4[index] =word( _modbusSlaveBuffer[ 7 + i * 2 ], _modbusSlaveBuffer[8 + i * 2 ]);
}
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize +2;
}
void _sendWebServerPage(int sendPageNumber)
{
if (sendPageNumber == -1) {
return;
}
if (sendPageNumber ==1) {_sendWebServerPage1(); return; }
_sendWebServerSend404Page();
}
void _sendWebServerSend404Page(void)

{
ESP8266ControllerWifi_tspWebServer_client.print("HTTP/1.0 404 Not Found\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML><html><body><p>404 - Page not fond</p></body></html>\r\n");
delay(1);
ESP8266ControllerWifi_tspWebServer_client.flush();
ESP8266ControllerWifi_tspWebServer_client.stop();

}
int _parseWebServerReqest(String reqestAddres)
{
int index;
int result=0;
if ((reqestAddres.indexOf("POST")) == 0) {
_parsePostWebServerReqest(reqestAddres);
return -1;
}
index=reqestAddres.indexOf("/");
reqestAddres =reqestAddres.substring(index+1);
index=reqestAddres.indexOf(" ");
reqestAddres =reqestAddres.substring(0, index);
if (reqestAddres==""){result= 1;}
return result;
}
void _parsePostWebServerReqest(String reqestAddres)
{
int index = reqestAddres.indexOf("\r\n\r\n");
String paramsValue;
String params = reqestAddres.substring(index + 4);
while (params.length() > 0) {
index = params.indexOf("&");
if (index == -1) {
paramsValue = params;
params = "";
} else {
paramsValue = params.substring(0, index) ;
params = params.substring(index + 1) ;
}
_processingPostWebServerReqestData(paramsValue);
}
index = reqestAddres.indexOf("Referer:");
paramsValue = reqestAddres.substring(index + 8);
index = paramsValue.indexOf("\r");
paramsValue = paramsValue.substring(0 , index);
params = "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML><html><head> <script type=\"text/javascript\">document.location.replace(\"";
params = params + paramsValue;
params = params + "\");</script></head><body></body></html>\r\n";
ESP8266ControllerWifi_tspWebServer_client.print(params);
delay(1);
ESP8266ControllerWifi_tspWebServer_client.flush();
ESP8266ControllerWifi_tspWebServer_client.stop();
}
void _processingPostWebServerReqestData(String paramData)
{
byte index=paramData.indexOf("=");
if(index<0){return;}
String key = paramData.substring(0,index);
String value = convertPostData(paramData.substring(index+1));
if (key.equals(String("resetController"))) {ESP8266ControllerWifi_isNeededRestsrt = 1; return;}
if (key.equals(String("parSetPage5131609E"))) { if (checkIPAdressString(value)) {
if ((_unsignetLongFromIPAdress(_ipAddressFromString(value))) != (_unsignetLongFromIPAdress(ESP8266ControllerWifiClient_ip))) {
ESP8266ControllerWifiClient_IsNeedReconect =1;
ESP8266ControllerWifiClient_ip.fromString(value);
updateUnsignedLongToEEPROM(4, 0, 0x0, (_unsignetLongFromIPAdress(ESP8266ControllerWifiClient_ip)));
}}
}
if (key.equals(String("parSetPage186902281E"))) {if ( ! (value.equals(String(ESP8266ControllerWifiClient_SSID)))) {
ESP8266ControllerWifiClient_IsNeedReconect =1;
value.toCharArray(ESP8266ControllerWifiClient_SSID, 40);
updateStringToEEPROM(8, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage260890144E"))) {if ( ! (value.equals(String(ESP8266ControllerWifiClient_password)))) {
ESP8266ControllerWifiClient_IsNeedReconect =1;
value.toCharArray(ESP8266ControllerWifiClient_password, 40);
updateStringToEEPROM(48, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage103625498E"))) {if(ESP8266ControllerWifiClient_isDHCP != (value.equals(String("on")))) {;ESP8266ControllerWifiClient_isDHCP = value.equals(String("on"));
ESP8266ControllerWifiClient_IsNeedReconect =1;
updateBooleanToEEPROM(1, 0, 0x0, ESP8266ControllerWifiClient_isDHCP);
}
}
if (key.equals(String("parSetPage115327664E"))) {if ( ! (value.equals(_OtaUpdater_Name))) {
_OtaUpdater_Name = value;
updateStringToEEPROM(88, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage241386574E"))) {if ( ! (value.equals(_OtaUpdater_Password))) {
_OtaUpdater_Password = value;
updateStringToEEPROM(128, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage233353492E"))) {ESP8266_freeParam_4202586 = value.toInt();
updateIntegerToEEPROM(2,0 , 0x0, ESP8266_freeParam_4202586);}
}
String convertPostData(String value)
{
String result = "";
char symbol;
byte code;
int i = 0;
String codeString;
while (i < value.length()) {
symbol = value.charAt(i);
if (symbol == &#39;+&#39;) {
result.concat(&#39; &#39;);
} else {
if (symbol == &#39;%&#39;)
{
codeString="";
i++;
codeString.concat(value[i]);
i++;
codeString.concat(value[i]);
code = hexStrToInt(codeString);
Serial.println(codeString);
Serial.println(code,HEX);
result.concat(char(code));
} else {
result.concat(symbol);
}
}
i++;
}

return result;
}


void _sendWebServerPage1(void)
{
printToClient(webSettingPageHeader1, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<head>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<head><style>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient((webSettingPageMainStyle+" "), &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("\"</style>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</head>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);

printToClient("<body>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<div class=\"header\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(webSettingPageHeaderString, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</div>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<div class=\"content\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<form action=\"\" method=\"POST\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "время переключения громкости (мсек) (Integer)", String(ESP8266_freeParam_4202586, DEC), "parSetPage233353492E", "20", 0, 0)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "Обновление прошивки по WiFi (OTA) - Имя устройства", _OtaUpdater_Name, "parSetPage115327664E", "20", 0, 0)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "Обновление прошивки по WiFi (OTA) - Пароль", _OtaUpdater_Password, "parSetPage241386574E", "20", 0, 0)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "WiFi клиент - Имя сети (SSID)", ESP8266ControllerWifiClient_SSID, "parSetPage186902281E", "20", 0, 1)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "WiFi клиент - Пароль", ESP8266ControllerWifiClient_password, "parSetPage260890144E", "20", 0, 1)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "WiFi клиент - IP адрес", (ESP8266ControllerWifiClient_ip.toString()), "parSetPage5131609E", "20", 1, 1)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageCheckBoxVisualElement("", "WiFi клиент - Получение IP по DHCP", ESP8266ControllerWifiClient_isDHCP, "parSetPage103625498E")) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(_ESP8266WebInterfacePageButton_save, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(_ESP8266WebInterfacePageButton_reset, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</div>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<div class=\"footer\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(webSettingPageFooterString, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</div>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</body></html>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
commitClient(&ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
}
void printToClient(String value, WiFiClient* sendClient, String* sendBuffer)
{
for (int i = 0; i < value.length(); i++)
{
if (sendBuffer->length() > 800)
{
sendClient->print(*sendBuffer);
*sendBuffer = "";
}
sendBuffer->concat(value.charAt(i));
}
}

void commitClient(WiFiClient* sendClient, String* sendBuffer)
{
if ((sendBuffer->length()) > 0) {
sendClient->print(*sendBuffer);
}
*sendBuffer = "";
sendClient->flush();
sendClient->stop();
}
byte readByteFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
return EEPROM.read(addres);
}
void updateByteToEEPROM(int addres, byte bitAddres, byte chipAddres, byte value)
{
isNeededCommitESP8266EEprom = 1;
return EEPROM.write(addres, value);
}
bool readBooleanFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte temp = readByteFromEEPROM( addres, bitAddres, chipAddres);
return bitRead(temp, bitAddres);
}
void updateBooleanToEEPROM(int addres, byte bitAddres, byte chipAddres, bool value)
{
byte temp = readByteFromEEPROM( addres, bitAddres, chipAddres);
bitWrite(temp, bitAddres, value);
updateByteToEEPROM( addres, bitAddres, chipAddres, temp);
}
int readIntegerFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte hight = readByteFromEEPROM( addres, bitAddres, chipAddres);
byte low = readByteFromEEPROM( (addres+1), bitAddres, chipAddres);
return word(hight, low);
}
void updateIntegerToEEPROM(int addres, byte bitAddres, byte chipAddres, int value)
{
updateByteToEEPROM( addres, bitAddres, chipAddres, highByte(value));
updateByteToEEPROM( (addres+1), bitAddres, chipAddres, lowByte(value));
}
unsigned long readUnsignedLongFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte x[4];
for(byte i = 0; i < 4; i++) { x[i] = readByteFromEEPROM( (addres+i), bitAddres, chipAddres);}
unsigned long *y = (unsigned long *)&x;
return y[0];
}
void updateUnsignedLongToEEPROM(int addres, byte bitAddres, byte chipAddres, unsigned long value)
{
byte *x = (byte *)&value;
for(byte i = 0; i < 4; i++) {updateByteToEEPROM( (addres+i), bitAddres, chipAddres, x[i]);}
}
char readCharFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
return readByteFromEEPROM( addres, bitAddres, chipAddres);
}
void updateCharToEEPROM(int addres, byte bitAddres, byte chipAddres, char value)
{
updateByteToEEPROM( addres, bitAddres, chipAddres, value);
}
String readStingFromEEPROM(int addres, int dataLength, byte chipAddres)
{
String result = "";
char tempChar;
for (int i = 0; i < dataLength; i++) {
tempChar = readCharFromEEPROM((addres + i), 0, chipAddres);
if (byte(tempChar) == 0) {
return result;
}
result.concat(tempChar);
}
return result;
}
void updateStringToEEPROM(int addres, int dataLength, byte chipAddres, String value)
{
char tempChar;
for (int i = 0; i < dataLength; i++) {
if (i < value.length()) {
tempChar = value.charAt(i);
} else {
tempChar = char(0);
}
updateCharToEEPROM((addres + i), 0, chipAddres, tempChar);
}
}
String _eSP8266SettingWebPageAllVisualElementsHeader (String style, String label)
{
String result = "<div";
if (style.length() > 0) {
result.concat(" class=\"");
result.concat(style);
result.concat("\"");
}
result.concat("> <p>");
result.concat(label);
result.concat("<br>");
return result;
}
String _eSP8266SettingWebPageATextVisualElement (String style, String label, String value, bool isIP, bool isClient)
{
String result = _eSP8266SettingWebPageAllVisualElementsHeader (style, label);
if ( isClient && isIP && ESP8266ControllerWifiClient_isDHCP && (! ESP8266ControllerWifiClient_status)) {result.concat("??.??.??.??");} else {result.concat(value);}
result.concat("</p></div>");
return result;
}
String _eSP8266SettingWebPageInputFieldVisualElement (String style, String label, String value, String name, String maxlength, bool isIP, bool isClient)
{
if ( isClient && isIP && ESP8266ControllerWifiClient_isDHCP) { return _eSP8266SettingWebPageATextVisualElement (style, label, value, isIP, isClient);}
String result = _eSP8266SettingWebPageAllVisualElementsHeader (style, label);
result.concat("<input type=\"text\" name=\"");
result.concat(name);
result.concat( "\" value=\"");
result.concat(value);
result.concat("\" maxlength=\"");
result.concat( maxlength);
result.concat("\" ></p></div>");
return result;
}
String _eSP8266SettingWebPageCheckBoxVisualElement (String style, String label, bool value, String name)
{
String result = "<div";
if (style.length() > 0) {
result.concat("class=\"");
result.concat(style);
result.concat("\"");
}
result.concat("> <label><input type=\"checkbox\" id=\"");
result.concat(name);
result.concat("1\"");
if(value) { result.concat(" checked ");}
result.concat("/>");
result.concat(label);
result.concat("</label><input type=\"hidden\" name=\"");
result.concat(name);
result.concat("\" id=\"");
result.concat(name);
result.concat("2");
result.concat("\" value=\"");
if(value) {result.concat( "on");} else { result.concat( "off");}
result.concat( "\"><script> var el");
result.concat(name);
result.concat( " = document.querySelector(&#39;#");
result.concat(name);
result.concat("1");
result.concat("&#39;); el");
result.concat(name);
result.concat( ".onclick = function() {if (el");
result.concat(name);
result.concat( ".checked) { document.getElementById(&#39;");
result.concat(name);
result.concat("2");
result.concat("&#39;).value =&#39;on&#39;; } else { document.getElementById(&#39;");
result.concat(name);
result.concat("2");
result.concat("&#39;).value =&#39;off&#39;;}} </script> </div>");
return result;
}
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[i];
if (ch == 0) break;
result <<= 4;
if (isdigit(ch))
result = result | (ch - &#39;0&#39;);
else result = result | (ch - &#39;A&#39; + 10);
}
return result;
}
void _esp8266WifiModuleClientReconnect()
{
if( _checkMacAddres(ESP8266ControllerWifiClient_mac)) { wifi_set_macaddr(0, const_cast<uint8*>(ESP8266ControllerWifiClient_mac));}
if( ESP8266ControllerWifiClient_isDHCP) { WiFi.config(0U, 0U, 0U, 0U, 0U); } else {
WiFi.config(ESP8266ControllerWifiClient_ip, ESP8266ControllerWifiClient_gateway, ESP8266ControllerWifiClient_subnet, ESP8266ControllerWifiClient_dns , ESP8266ControllerWifiClient_dns );
}
WiFi.begin(ESP8266ControllerWifiClient_SSID, ESP8266ControllerWifiClient_password);
}
IPAddress _ipAddressFromUnsignetLong(unsigned long value)
{
IPAddress result;
byte *x = (byte *)&value;
for (byte i = 0; i < 4; i++) {
result[i] = x[i];
}
return result;
}

bool checkIPAdressString(String value)
{
IPAddress temp;
return temp.fromString(value);
}

IPAddress _ipAddressFromString(String value)
{
IPAddress temp;
temp.fromString(value);
return temp;
}

unsigned long _unsignetLongFromIPAdress(IPAddress value)
{
byte buufer[4] = {0, 0, 0, 0};
for (byte i = 0; i < 4; i++) {
buufer[i] = value[i];
}
unsigned long *y = (unsigned long *)&buufer;
return y[0];
}
bool _checkMacAddres(byte array[])
{
bool result = 0;
for (byte i = 0; i < 6; i++)
{
if (array[i] == 255) {
return 0;
}
if (array[i] > 0 ) {
result = 1;
}
}
return result;
}





WiseLord,

А Вас Благодарю за терпение и труд!

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вт дек 17, 2019 11:09:35

Видеообзор пульта

www.youtube.com/watch?v=uyrW5G_bKjk

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вт дек 17, 2019 11:41:27

заинтересовался проектом
вопрос: в дальнейшем планируется поддержка дисплеев ST7735S и ILI9341spi? сейчас они можно сказать недорогие и ходовые, 9341 если с платой адаптации можно задействовать гнездо флешки для расширения проигрывателем SD

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вт дек 17, 2019 16:01:28

в дальнейшем планируется поддержка дисплеев ST7735S и ILI9341spi?

Здесь посмотрите: https://radiokot.ru/artfiles/6484/

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Вт дек 17, 2019 19:16:36

Евгений-34
огромное спасибо! :))) то что нужно

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Ср дек 18, 2019 23:21:52

Владимир, после недельного использования последней прошивки, заметил некорректную работу спектроанализатора. При нормальной (столбики почти во весь рост) работе в режиме спектроанализатора, пиковый индикатор зашкаливает, практически не двигается. Если уменьшить чувствительность, ориентируясь на пиковый индикатор, анализатор спектра работает на половину экрана.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Ср дек 18, 2019 23:38:43

Это мелочи.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Ср дек 18, 2019 23:39:56

Все важное состоит из мелочей)

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Чт дек 19, 2019 01:13:28

Достал старый усилитель на ATmega32, прошил последним кодом - да, на реальной музыке не очень выглядело. Поправил в последних исходниках.

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Чт дек 19, 2019 20:13:43

Благодарю

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Пн янв 06, 2020 02:57:55

жаль у меня только беспонтовый, без подсветки wg12864( bg16080 без переписки кода не пойдет(

Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12

Сб янв 11, 2020 11:26:31

Доброго времени суток. Читаю форум и у меня есть вопрос. Можно ли этот проект реализовать на Ардуино , если подобный вопрос обсуждался то подскажите где на форуме. Я новичек сильно не пинайте.
Ответить