sketch_52_ESP_Blynk_Autofahren

sketch_52_ESP_Blynk_Autofahren
  /*Die Fahrrichtung sowie Geschwindigkeit des Autos werden ueber den Blynk-Server gesteuert.
    Das kann entweder von einem Computer oder von einem Smartphone erfolgen (App "Blynk IoT"). 
    Der ESP8266 wird ueber WLAN mit einem Router verbunden (der Router verbindet zum Internet).
    Alternativ kann die Verbindung des ESP zum Internet auch ueber ein Smartphone mit aktiviertem Tethering erfolgen: 
    "Mobile HotSpot" auf "Ein". Der ESP waehlt sich in diesen HotSpot ein (der ESP muss in WLAN-Reichweite zu diesem Smartphone bleiben).
    Wenn dieses Smartphone am Auto angebracht wird, kann ueber beliebig weite Entfernung gesteuert werden.
        
    Zuerst wird der sketch gestartet, dann die App "Blynk" (sonst zeigt die App an "Offline").
    Falls es nicht funktioniert: 
    - ist der ESP mit WLAN verbunden ?
    - sind ssid und pass richtig eingetragen ?
    - sind BLYNK_TEMPLATE_ID und BLYNK_AUTH_TOKEN richtig eingetragen ? 
  
    Am Serial Monitor muss eine Ausschrift erscheinen, ob die Verbindung zu Blynk steht.
    Bei Ausfall der Verbindung - erneut Reset am ESP oder Refresh der Blynk Webseite bzw App.
  */
  #define BLYNK_PRINT Serial
  #define BLYNK_TEMPLATE_ID "TMPLjly43WpC"                     //uebernommen von der Website (Blynk-Device)
  #define BLYNK_DEVICE_NAME "Autofahren"                       //uebernommen von der Website (Blynk-Device)
  #define BLYNK_AUTH_TOKEN "-c8PXoVIxpN4wSWzr16tb92D0c5OY1Y3"  //uebernommen von der Website (Blynk-Device)
  #include <ESP8266WiFi.h>
  #include <BlynkSimpleEsp8266.h>
  #include "Fahrablaufmodule.h"                                //Binde den Programmablauf von Fahrablaufmodule.h ein  
  char auth[] = BLYNK_AUTH_TOKEN;                              //Authority-Token (siehe oben)
  char ssid[] = "AndroidAP3232";                               //SSID (Name) des Smartphone, das den HotSpot fuer den ESP bildet
  char pass[] = "20c93d0xxxxx";                                //WLAN-Passwort fuer den Zugriff auf das Smartphone 
  int ENA_ENB;
  
  BLYNK_CONNECTED()
  {
   Blynk.syncVirtual(V0);
  }
  
  void setup()
  { 
   pinMode(D1, OUTPUT);                                        //Motoren rechts - Bruecke
   pinMode(D2, OUTPUT);                                        //Motoren rechts - Bruecke
   pinMode(D5, OUTPUT);                                        //Motoren rechts - PWM
   pinMode(D3, OUTPUT);                                        //Motoren links - Bruecke
   pinMode(D4, OUTPUT);                                        //Motoren links - Bruecke
   pinMode(D6, OUTPUT);                                        //Motoren links - PWM
   delay (2000);                                               //Bis Programmstart warten, damit Anzeige im Serial Monitor sichtbar ist
   Serial.begin(9600);                                         //fuer Test-Ausschrift am Serial Monitor ob Verbindung zu Blynk steht
   Blynk.begin(auth, ssid, pass);
  }
  
  BLYNK_WRITE(V5)                                              //Festlegung, was der ESP bei einer Aenderung des Virtual Pin V5 machen soll 
  {
   if(param.asInt() == 1)
   {
    Stopp();                                       
   }
   else
   {
    Stopp();    
   }
  }
      
  BLYNK_WRITE(V0)                                              //Festlegung, was der ESP bei einer Aenderung des Virtual Pin VO machen soll 
  {
   if(param.asInt() == 1)
   {
    Vor();                                       
   }
   else
   {
    Stopp();   
   }
  }
  
  BLYNK_WRITE(V1)                                              //Festlegung, was der ESP bei einer Aenderung des Virtual Pin V1 machen soll 
  {
   if(param.asInt() == 1)
   {
    Rueck();                                        
   }
   else
   {
    Stopp();   
   }
  }
  
  BLYNK_WRITE(V2)                                              //Festlegung, was der ESP bei einer Aenderung des Virtual Pin V2 machen soll 
  {
   if(param.asInt() == 1)
   {
    RechtsDrehen();                                        
   }
   else
   {
    Stopp();   
   }
  }
  
  BLYNK_WRITE(V3)                                              //Festlegung, was der ESP bei einer Aenderung des Virtual Pin V3 machen soll 
  {
   if(param.asInt() == 1)
   {
    LinksDrehen();                                        
   }
   else
   {
    Stopp();   
   }
  }
  
  BLYNK_WRITE(V4)                                             // In der Blynk-App ist V4 als virtuelles Pin fuer das widget "Slider" angelegt
  {
   int Geschwindigkeit = param.asInt();                       // Der Eingabewert von V4 wird in eine Variable geladen
   Serial.print("Geschwindigkeit ist: ");
   Serial.println (Geschwindigkeit);
   ENA_ENB = Geschwindigkeit * 100;                           // uebertragen des Werts in die Variablen ENA und ENB 
  }
  
  void loop()
  {
   Blynk.run();
  }
Fahrablaufmodule.h
  extern int ENA_ENB;
  
  void Stopp()                      //Achtung: "stop" funktioniert nicht , es ist ein reservierter Befehl
  {
   digitalWrite(D1, LOW);           // Schalte alle Motoren aus
   digitalWrite(D2, LOW);  
   digitalWrite(D3, LOW); 
   digitalWrite(D4, LOW);  
  }
  
  void Vor()
  {   
   digitalWrite(D1, HIGH);          // Schalte Motoren RECHTS ein 
   digitalWrite(D2, LOW);                                                      
   analogWrite(D5, ENA_ENB);        // Setze die Geschwindigkeit (zwischen 0...1024)
   digitalWrite(D3, HIGH);          // Schalte Motoren LINKS ein 
   digitalWrite(D4, LOW);                                
   analogWrite(D6, ENA_ENB);        // Setze die Geschwindigkeit (zwischen 0...1024)
  }
  
   void LinksDrehen()
  {   
   digitalWrite(D1, HIGH);          // Schalte Motoren RECHTS ein 
   digitalWrite(D2, LOW);                                                      
   analogWrite(D5, ENA_ENB);        // Setze die Geschwindigkeit (zwischen 0...1024)
   digitalWrite(D3, LOW);           // Schalte Motoren LINKS ein 
   digitalWrite(D4, HIGH);                                
   analogWrite(D6, ENA_ENB);        // Setze die Geschwindigkeit (zwischen 0...1024)
  }
  void RechtsDrehen()
  {   
   digitalWrite(D1, LOW);           // Schalte Motoren RECHTS ein 
   digitalWrite(D2, HIGH);                                                      
   analogWrite(D5, ENA_ENB);        // Setze die Geschwindigkeit (zwischen 0...1024)
   digitalWrite(D3, HIGH);          // Schalte Motoren LINKS ein 
   digitalWrite(D4, LOW);                                
   analogWrite(D6, ENA_ENB);        // Setze die Geschwindigkeit (zwischen 0...1024)
  }
  void Rueck()
  {   
   digitalWrite(D1, LOW);           // Schalte Motoren RECHTS ein 
   digitalWrite(D2, HIGH);                                                      
   analogWrite(D5, ENA_ENB);        // Setze die Geschwindigkeit (zwischen 0...1024)
   digitalWrite(D3, LOW);           // Schalte Motoren LINKS ein 
   digitalWrite(D4, HIGH);                                
   analogWrite(D6, ENA_ENB);        // Setze die Geschwindigkeit (zwischen 0...1024)
  }