• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP-12F без Blynk без remotexy без интернета и роутера

Мурат

New member
Здравствуйте.
Большая просьба помочь в решении следующей проблемы.
Создаю простейшую RC модель: движение вперед назад (задний привод - коллекторный мотор) повороты влево вправо (передняя подвеска с серво мотором - обычный дешевый китайский сервопривод).
Железо: ESP-12F в комплекте с платой для разработчика и двойной H-мост для основного электромотора (Модуль контроллера L298N).
Необходима работа без интерната, без роутера, без Blynk, без remotexy. Управление напрямую с айфона.
Нашел похожий проект - Делаем бюджетный чудо корабль с управлением по WiFi на базе ESP8266, но Arduino IDE выдает ошибку при компиляции - missing terminating " character
ESP-12F работает - проверил через Blynk
Компьютер на Windows 10.
ARDUINO 1.8.5 2017.09.29
ESP8266 Arduino Core - установил.
 

CodeNameHawk

Moderator
Команда форума
Строки разбились, поправьте.
Код:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

ESP8266WebServer server(80);
const char* ssid="ABPOPA"; //название точки доступа
const char* password=""; // пароль не будем писать
//const char* ssid="HomeIoT"; // здесь пишем название домашней точки доступа
//const char* password="DDV987654321"; // и пароль

String webSite,javaScript,XML;
unsigned long wait000=0UL,wait001=1000UL;
int OUT1=14, OUT2=12, BAT=17;//Назначение выводов
int Sila, SilaLow = -43;   // Контроль силы сигнала WiFi
int Batareya, BatLow = 400; //Контроль напряжения батареи
float Povorot = 0.8, Trimer;    // Переменные для значений поворота и тримера двигателя
String Bat, SilaW;
const int sliderMAX=3;     // This sets the number of sliders you want
int sliderVal[3]={100, 50, 50};  //Начальные значения 1 слайдера - скорость, 2-го - поворот, 3- тример
int ESPval[sliderMAX];

void Batare(){
  Batareya = analogRead(BAT);         // Меряем напряжение батареи
  if (Batareya < BatLow){            // Если напряжение батареи меньше порогового значения
    Bat = "          Батарея села, ПОРА на ЗАРЯДКУ"; // Пишем предупреждение
  }
  else{                              // Если норма
    Bat = "";                       // Ничего не пишем
  }
}
void SilaWifi(){
  Sila = WiFi.RSSI();  // Меряем силу сигнала WiFi
  if (Sila < SilaLow){
    SilaW = "          Сигнал слабый, РАЗВОРАЧИВАЙ";
  }
  else{
    SilaW = "";
  }
}

void buildJavascript(){
  javaScript="<SCRIPT>\n";
  javaScript+="xmlHttp=createXmlHttpObject();\n";
 
  javaScript+="function createXmlHttpObject(){\n";
  javaScript+="  if(window.XMLHttpRequest){\n";
  javaScript+="    xmlHttp=new XMLHttpRequest();\n";
  javaScript+="  }else{\n";
  javaScript+="    xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');\n";
  javaScript+="  }\n";
  javaScript+="  return xmlHttp;\n";
  javaScript+="}\n";
 
  javaScript+="function process(){\n";
  javaScript+="  if(xmlHttp.readyState==0||xmlHttp.readyState==4){\n";
  javaScript+="    xmlHttp.onreadystatechange=function(){\n";
  javaScript+="      if(xmlHttp.readyState==4&&xmlHttp.status==200){\n";
  javaScript+="        xmlDoc=xmlHttp.responseXML;\n";
  javaScript+="        xmlmsg=xmlDoc.getElementsByTagName('millistime')[0].firstChild.nodeValue;\n";
  javaScript+="        document.getElementById('runtime').innerHTML=xmlmsg;\n";               // Добавляем наши данные
  javaScript+="        xmlmsg=xmlDoc.getElementsByTagName('Sila')[0].firstChild.nodeValue;\n";// Сила сигнала WiFi
  javaScript+="        document.getElementById('Sila').innerHTML=xmlmsg;\n";                  // Сила сигнала WiFi
  javaScript+="        xmlmsg=xmlDoc.getElementsByTagName('Batareya')[0].firstChild.nodeValue;\n";// Напряжение батареи
  javaScript+="        document.getElementById('Batareya').innerHTML=xmlmsg;\n";                  // Напряжение батареи
  javaScript+="        for(i=0;i<"+(String)sliderMAX+";i++){\n";
  javaScript+="          xmlmsg=xmlDoc.getElementsByTagName('sliderval'+i)[0].firstChild.nodeValue;\n";
  javaScript+="          document.getElementById('slider'+i).value=xmlmsg;\n";
  javaScript+="          document.getElementById('Sliderval'+i).innerHTML=xmlmsg;\n";
  javaScript+="          xmlmsg=xmlDoc.getElementsByTagName('ESPval'+i)[0].firstChild.nodeValue;\n";
  javaScript+="          document.getElementById('ESPval'+i).innerHTML=xmlmsg;\n";
  javaScript+="        }\n";
  javaScript+="      }\n";
  javaScript+="    }\n";
  javaScript+="    xmlHttp.open('PUT','xml',true);\n";
  javaScript+="    xmlHttp.send(null);\n";
  javaScript+="  }\n";
  javaScript+="  setTimeout('process()',1000);\n";
  javaScript+="}\n";
 
  javaScript+="function Slider(cnt){\n";
  javaScript+="  sliderVal=document.getElementById('slider'+cnt).value;\n";
  javaScript+="  document.getElementById('Sliderval'+cnt).innerHTML=sliderVal;\n";
  javaScript+="  document.getElementById('ESPval'+cnt).innerHTML=9*(100-sliderVal)+100;\n";
  javaScript+="  if(xmlHttp.readyState==0||xmlHttp.readyState==4){\n";
  javaScript+="    xmlHttp.open('PUT','setESPval?cnt='+cnt+'&val='+sliderVal,true);\n";
  javaScript+="    xmlHttp.send(null);\n";
  javaScript+="  }\n";
  javaScript+="}\n";
 
  javaScript+="</SCRIPT>\n";
}
void buildWebsite(){    // Создаём страницу с элементами управления
  buildJavascript();
  webSite="<!DOCTYPE HTML>\n";
  webSite+="<META name='viewport' content='width=device-width, initial-scale=1', charset=\"utf-8\">\n";
  webSite+=javaScript;
  webSite+="<BODY onload='process()'>\n";
  webSite+="Кораблик\n";
  webSite+="Время работы = <A ID='runtime'></A>\n";
  webSite+="Сила сигнала <A ID='Sila'></A>\n";
  // Сила сигнала WiFi
  webSite+="Напряжение батареи <A ID='Batareya'></A>\n"; // Напряжение батареи
  webSite+="<TABLE BORDER=1 width='700' height='200' style='text-align:center;border-collapse:collapse'>\n";
  //  webSite+="<INPUT ' TYPE='range' width='600'> \n";  // это пример слайдера
  webSite+="<TR>\n";        // 1 слайдер
  webSite+="<TD><INPUT ID='slider"+(String)0+"' TYPE='range' ONCHANGE='Slider("+(String)0+")'></TD>\n";
  webSite+="<TD>Обороты = <A ID='Sliderval"+(String)0+"'></A>\n";
  webSite+="Моторов = <A ID='ESPval"+(String)0+"'></A> * </TD>\n";
  webSite+="</TR>\n";
  webSite+="<TR>\n";        // 2 слайдер
  webSite+="<TD><INPUT ID='slider"+(String)1+"' TYPE='range' ONCHANGE='Slider("+(String)1+")'></TD>\n";
  webSite+="<TD>Направление = <A ID='Sliderval"+(String)1+"'></A>\n";
  webSite+="Движения = <A ID='ESPval"+(String)1+"'></A></TD>\n";
  webSite+="</TR>\n";
  webSite+="<TR>\n";        // 3 слайдер
  webSite+="<TD><INPUT ID='slider"+(String)2+"' TYPE='range' ONCHANGE='Slider("+(String)2+")'></TD>\n";
  webSite+="<TD>Корекция = <A ID='Sliderval"+(String)2+"'></A>\n";
  webSite+="Моторов = <A ID='ESPval"+(String)2+"'></A></TD>\n";
  webSite+="</TR>\n";

  webSite+="</TABLE>\n";
  webSite+="</BODY>\n";
  webSite+="</HTML>\n";
}

String millis2time(){ // преобразование милисекунд в вид ч/м/с
  String Time="";
  unsigned long ss;
  byte mm,hh;
  ss=millis()/1000;
  hh=ss/3600;
  mm=(ss-hh*3600)/60;
  ss=(ss-hh*3600)-mm*60;
  if(hh<10)Time+="0";
  Time+=(String)hh+":";
  if(mm<10)Time+="0";
  Time+=(String)mm+":";
  if(ss<10)Time+="0";
  Time+=(String)ss;
  return Time;
}

void buildXML(){
  XML="<?xml version='1.0'?>";
  XML+="<xml>";
  XML+="<millistime>";
  XML+=millis2time();
  XML+="</millistime>";   // Добавляем наши данные
  SilaWifi();             // Здесь измеряем силу сигнала
  XML+="<Sila>";          // Сила сигнала WiFi
  XML+=String(Sila)+SilaW;// Сила сигнала WiFi
  XML+="</Sila>";         // Сила сигнала WiFi
  Batare();                 // Здесь измеряем напряжение батареи
  XML+="<Batareya>";        // Напряжение батареи
  XML+=String(Batareya)+Bat;// Напряжение батареи
  XML+="</Batareya>";       // Напряжение батареи
  for(int i=0;i<sliderMAX;i++){
    XML+="<sliderval"+(String)i+">";
    XML+=String(sliderVal[i]);
    XML+="</sliderval"+(String)i+">";
    XML+="<ESPval"+(String)i+">";
    ESPval[i]=9*(100-sliderVal[i])+100;
    XML+=String(ESPval[i]);
    XML+="</ESPval"+(String)i+">";
  }
  XML+="</xml>";
}

void handleWebsite(){
  buildWebsite();
  server.send(200,"text/html",webSite);
}

void handleXML(){
  buildXML();
  server.send(200,"text/xml",XML);
}

void handleESPval(){
  int sliderCNT=server.arg("cnt").toInt();
  sliderVal[sliderCNT]=server.arg("val").toInt();
  buildXML();
  server.send(200,"text/xml",XML);
}

void setup() {
  Serial.begin(115200);
  pinMode(OUT1,OUTPUT);
  pinMode(OUT2,OUTPUT);
  pinMode(BAT,INPUT);
  WiFi.softAP(ssid, password); // Создаём точку доступа
//  WiFi.begin(ssid,password);  //Это вариант для подключения к существующей точке
//  while(WiFi.status()!=WL_CONNECTED)delay(500);
//  WiFi.mode(WIFI_STA);
 
  Serial.println("\n\nBOOTING ESP8266 ...");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("Station IP address: ");
  Serial.println(WiFi.localIP());     // Вывод в монитор порта присвоенный IP
  server.on("/",handleWebsite);
  server.on("/xml",handleXML);
  server.on("/setESPval",handleESPval);
  server.begin();
}

void loop() {
  server.handleClient();
  if(millis()>wait000){
    buildXML();
    wait000=millis()+1000UL;
  }
  if(millis()>wait001){
    wait001=millis()+300;           //Обновляем значения раз в 300 милисекунд
    Trimer = (ESPval[2]*.0015);
    Serial.print("   Skorost] ");
    Serial.print(ESPval[0]);
    Serial.print("   Povorot ");
    Serial.print(ESPval[1]);
    Serial.print("   Trimer ");  
    Serial.print(ESPval[2]);
    Serial.print(Trimer);

   if (ESPval[0] > 200){               // Если слайдер скорости  > 200
        if ( ESPval[1] > 600) {        //  Если слайдер поворота > 600 то поворачиваем на лево
            analogWrite(OUT1, ESPval[0]);
            analogWrite(OUT2, int(ESPval[0] * Povorot*Trimer));
            Serial.print(" Le  ");
            Serial.print(ESPval[0] * Povorot*Trimer);
           }
       else if (400 > ESPval[1] ){     //  Если слайдер поворота < 400 то поворачиваем на право
           analogWrite(OUT1, int(ESPval[0] * Povorot));
           analogWrite(OUT2, int(ESPval[0]*Trimer));
           Serial.print("   Pr ");
           Serial.print(int(ESPval[0] * Povorot));
           }
       else {                          //  Если слайдер поворота > 400 и < 600то едем прямо
           analogWrite(OUT1, ESPval[0]);
           analogWrite(OUT2, int(ESPval[0]*Trimer));
           Serial.print("   OK ");
           }
      }
   else {                          //  Если слайдер скорости  < 200 - выключить моторы
       analogWrite(OUT1, 0);
       analogWrite(OUT2, 0);
       Serial.print("   Stop ");
       }   
    Serial.print("   Batareya ");
    Serial.println(Batareya);
}
}
 

Мурат

New member
Строки разбились, поправьте.
Код:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

ESP8266WebServer server(80);
const char* ssid="ABPOPA"; //название точки доступа
const char* password=""; // пароль не будем писать
//const char* ssid="HomeIoT"; // здесь пишем название домашней точки доступа
//const char* password="DDV987654321"; // и пароль

String webSite,javaScript,XML;
unsigned long wait000=0UL,wait001=1000UL;
int OUT1=14, OUT2=12, BAT=17;//Назначение выводов
int Sila, SilaLow = -43;   // Контроль силы сигнала WiFi
int Batareya, BatLow = 400; //Контроль напряжения батареи
float Povorot = 0.8, Trimer;    // Переменные для значений поворота и тримера двигателя
String Bat, SilaW;
const int sliderMAX=3;     // This sets the number of sliders you want
int sliderVal[3]={100, 50, 50};  //Начальные значения 1 слайдера - скорость, 2-го - поворот, 3- тример
int ESPval[sliderMAX];

void Batare(){
  Batareya = analogRead(BAT);         // Меряем напряжение батареи
  if (Batareya < BatLow){            // Если напряжение батареи меньше порогового значения
    Bat = "          Батарея села, ПОРА на ЗАРЯДКУ"; // Пишем предупреждение
  }
  else{                              // Если норма
    Bat = "";                       // Ничего не пишем
  }
}
void SilaWifi(){
  Sila = WiFi.RSSI();  // Меряем силу сигнала WiFi
  if (Sila < SilaLow){
    SilaW = "          Сигнал слабый, РАЗВОРАЧИВАЙ";
  }
  else{
    SilaW = "";
  }
}

void buildJavascript(){
  javaScript="<SCRIPT>\n";
  javaScript+="xmlHttp=createXmlHttpObject();\n";
 
  javaScript+="function createXmlHttpObject(){\n";
  javaScript+="  if(window.XMLHttpRequest){\n";
  javaScript+="    xmlHttp=new XMLHttpRequest();\n";
  javaScript+="  }else{\n";
  javaScript+="    xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');\n";
  javaScript+="  }\n";
  javaScript+="  return xmlHttp;\n";
  javaScript+="}\n";
 
  javaScript+="function process(){\n";
  javaScript+="  if(xmlHttp.readyState==0||xmlHttp.readyState==4){\n";
  javaScript+="    xmlHttp.onreadystatechange=function(){\n";
  javaScript+="      if(xmlHttp.readyState==4&&xmlHttp.status==200){\n";
  javaScript+="        xmlDoc=xmlHttp.responseXML;\n";
  javaScript+="        xmlmsg=xmlDoc.getElementsByTagName('millistime')[0].firstChild.nodeValue;\n";
  javaScript+="        document.getElementById('runtime').innerHTML=xmlmsg;\n";               // Добавляем наши данные
  javaScript+="        xmlmsg=xmlDoc.getElementsByTagName('Sila')[0].firstChild.nodeValue;\n";// Сила сигнала WiFi
  javaScript+="        document.getElementById('Sila').innerHTML=xmlmsg;\n";                  // Сила сигнала WiFi
  javaScript+="        xmlmsg=xmlDoc.getElementsByTagName('Batareya')[0].firstChild.nodeValue;\n";// Напряжение батареи
  javaScript+="        document.getElementById('Batareya').innerHTML=xmlmsg;\n";                  // Напряжение батареи
  javaScript+="        for(i=0;i<"+(String)sliderMAX+";i++){\n";
  javaScript+="          xmlmsg=xmlDoc.getElementsByTagName('sliderval'+i)[0].firstChild.nodeValue;\n";
  javaScript+="          document.getElementById('slider'+i).value=xmlmsg;\n";
  javaScript+="          document.getElementById('Sliderval'+i).innerHTML=xmlmsg;\n";
  javaScript+="          xmlmsg=xmlDoc.getElementsByTagName('ESPval'+i)[0].firstChild.nodeValue;\n";
  javaScript+="          document.getElementById('ESPval'+i).innerHTML=xmlmsg;\n";
  javaScript+="        }\n";
  javaScript+="      }\n";
  javaScript+="    }\n";
  javaScript+="    xmlHttp.open('PUT','xml',true);\n";
  javaScript+="    xmlHttp.send(null);\n";
  javaScript+="  }\n";
  javaScript+="  setTimeout('process()',1000);\n";
  javaScript+="}\n";
 
  javaScript+="function Slider(cnt){\n";
  javaScript+="  sliderVal=document.getElementById('slider'+cnt).value;\n";
  javaScript+="  document.getElementById('Sliderval'+cnt).innerHTML=sliderVal;\n";
  javaScript+="  document.getElementById('ESPval'+cnt).innerHTML=9*(100-sliderVal)+100;\n";
  javaScript+="  if(xmlHttp.readyState==0||xmlHttp.readyState==4){\n";
  javaScript+="    xmlHttp.open('PUT','setESPval?cnt='+cnt+'&val='+sliderVal,true);\n";
  javaScript+="    xmlHttp.send(null);\n";
  javaScript+="  }\n";
  javaScript+="}\n";
 
  javaScript+="</SCRIPT>\n";
}
void buildWebsite(){    // Создаём страницу с элементами управления
  buildJavascript();
  webSite="<!DOCTYPE HTML>\n";
  webSite+="<META name='viewport' content='width=device-width, initial-scale=1', charset=\"utf-8\">\n";
  webSite+=javaScript;
  webSite+="<BODY onload='process()'>\n";
  webSite+="Кораблик\n";
  webSite+="Время работы = <A ID='runtime'></A>\n";
  webSite+="Сила сигнала <A ID='Sila'></A>\n";
  // Сила сигнала WiFi
  webSite+="Напряжение батареи <A ID='Batareya'></A>\n"; // Напряжение батареи
  webSite+="<TABLE BORDER=1 width='700' height='200' style='text-align:center;border-collapse:collapse'>\n";
  //  webSite+="<INPUT ' TYPE='range' width='600'> \n";  // это пример слайдера
  webSite+="<TR>\n";        // 1 слайдер
  webSite+="<TD><INPUT ID='slider"+(String)0+"' TYPE='range' ONCHANGE='Slider("+(String)0+")'></TD>\n";
  webSite+="<TD>Обороты = <A ID='Sliderval"+(String)0+"'></A>\n";
  webSite+="Моторов = <A ID='ESPval"+(String)0+"'></A> * </TD>\n";
  webSite+="</TR>\n";
  webSite+="<TR>\n";        // 2 слайдер
  webSite+="<TD><INPUT ID='slider"+(String)1+"' TYPE='range' ONCHANGE='Slider("+(String)1+")'></TD>\n";
  webSite+="<TD>Направление = <A ID='Sliderval"+(String)1+"'></A>\n";
  webSite+="Движения = <A ID='ESPval"+(String)1+"'></A></TD>\n";
  webSite+="</TR>\n";
  webSite+="<TR>\n";        // 3 слайдер
  webSite+="<TD><INPUT ID='slider"+(String)2+"' TYPE='range' ONCHANGE='Slider("+(String)2+")'></TD>\n";
  webSite+="<TD>Корекция = <A ID='Sliderval"+(String)2+"'></A>\n";
  webSite+="Моторов = <A ID='ESPval"+(String)2+"'></A></TD>\n";
  webSite+="</TR>\n";

  webSite+="</TABLE>\n";
  webSite+="</BODY>\n";
  webSite+="</HTML>\n";
}

String millis2time(){ // преобразование милисекунд в вид ч/м/с
  String Time="";
  unsigned long ss;
  byte mm,hh;
  ss=millis()/1000;
  hh=ss/3600;
  mm=(ss-hh*3600)/60;
  ss=(ss-hh*3600)-mm*60;
  if(hh<10)Time+="0";
  Time+=(String)hh+":";
  if(mm<10)Time+="0";
  Time+=(String)mm+":";
  if(ss<10)Time+="0";
  Time+=(String)ss;
  return Time;
}

void buildXML(){
  XML="<?xml version='1.0'?>";
  XML+="<xml>";
  XML+="<millistime>";
  XML+=millis2time();
  XML+="</millistime>";   // Добавляем наши данные
  SilaWifi();             // Здесь измеряем силу сигнала
  XML+="<Sila>";          // Сила сигнала WiFi
  XML+=String(Sila)+SilaW;// Сила сигнала WiFi
  XML+="</Sila>";         // Сила сигнала WiFi
  Batare();                 // Здесь измеряем напряжение батареи
  XML+="<Batareya>";        // Напряжение батареи
  XML+=String(Batareya)+Bat;// Напряжение батареи
  XML+="</Batareya>";       // Напряжение батареи
  for(int i=0;i<sliderMAX;i++){
    XML+="<sliderval"+(String)i+">";
    XML+=String(sliderVal[i]);
    XML+="</sliderval"+(String)i+">";
    XML+="<ESPval"+(String)i+">";
    ESPval[i]=9*(100-sliderVal[i])+100;
    XML+=String(ESPval[i]);
    XML+="</ESPval"+(String)i+">";
  }
  XML+="</xml>";
}

void handleWebsite(){
  buildWebsite();
  server.send(200,"text/html",webSite);
}

void handleXML(){
  buildXML();
  server.send(200,"text/xml",XML);
}

void handleESPval(){
  int sliderCNT=server.arg("cnt").toInt();
  sliderVal[sliderCNT]=server.arg("val").toInt();
  buildXML();
  server.send(200,"text/xml",XML);
}

void setup() {
  Serial.begin(115200);
  pinMode(OUT1,OUTPUT);
  pinMode(OUT2,OUTPUT);
  pinMode(BAT,INPUT);
  WiFi.softAP(ssid, password); // Создаём точку доступа
//  WiFi.begin(ssid,password);  //Это вариант для подключения к существующей точке
//  while(WiFi.status()!=WL_CONNECTED)delay(500);
//  WiFi.mode(WIFI_STA);
 
  Serial.println("\n\nBOOTING ESP8266 ...");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("Station IP address: ");
  Serial.println(WiFi.localIP());     // Вывод в монитор порта присвоенный IP
  server.on("/",handleWebsite);
  server.on("/xml",handleXML);
  server.on("/setESPval",handleESPval);
  server.begin();
}

void loop() {
  server.handleClient();
  if(millis()>wait000){
    buildXML();
    wait000=millis()+1000UL;
  }
  if(millis()>wait001){
    wait001=millis()+300;           //Обновляем значения раз в 300 милисекунд
    Trimer = (ESPval[2]*.0015);
    Serial.print("   Skorost] ");
    Serial.print(ESPval[0]);
    Serial.print("   Povorot ");
    Serial.print(ESPval[1]);
    Serial.print("   Trimer "); 
    Serial.print(ESPval[2]);
    Serial.print(Trimer);

   if (ESPval[0] > 200){               // Если слайдер скорости  > 200
        if ( ESPval[1] > 600) {        //  Если слайдер поворота > 600 то поворачиваем на лево
            analogWrite(OUT1, ESPval[0]);
            analogWrite(OUT2, int(ESPval[0] * Povorot*Trimer));
            Serial.print(" Le  ");
            Serial.print(ESPval[0] * Povorot*Trimer);
           }
       else if (400 > ESPval[1] ){     //  Если слайдер поворота < 400 то поворачиваем на право
           analogWrite(OUT1, int(ESPval[0] * Povorot));
           analogWrite(OUT2, int(ESPval[0]*Trimer));
           Serial.print("   Pr ");
           Serial.print(int(ESPval[0] * Povorot));
           }
       else {                          //  Если слайдер поворота > 400 и < 600то едем прямо
           analogWrite(OUT1, ESPval[0]);
           analogWrite(OUT2, int(ESPval[0]*Trimer));
           Serial.print("   OK ");
           }
      }
   else {                          //  Если слайдер скорости  < 200 - выключить моторы
       analogWrite(OUT1, 0);
       analogWrite(OUT2, 0);
       Serial.print("   Stop ");
       }  
    Serial.print("   Batareya ");
    Serial.println(Batareya);
}
}
Огромное спасибо! Компиляция прошла успешно. Вам случайно не попадались еще аналогичные проекты? Я в русскоязычных источниках не нашел.
 
Сверху Снизу