- Labornetzteil AliExpress         
Seite 11 von 57 ErsteErste ... 91011121321 ... LetzteLetzte
Ergebnis 101 bis 110 von 566

Thema: outdoor I

  1. #101
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Musst jetzt nur aufpassen, bei den Microschritten verlierst Du Drehmoment. Immer im Hinterkopf behalten.


    MfG

  2. #102
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    diesmal ohne video dafür mit dem letzten
    Code:
    //libraries
    #include <IRremoteInt.h>
    #include <ir_Lego_PF_BitStreamEncoder.h>
    #include <IRremote.h>
    #include <Bounce2.h>
    
    
    uint8_t RECV_PIN = 13;
    uint8_t taste = 0;
    uint8_t zaehler = 1;
    
    //resett pin definieren
    #define PIN2RESET 10
    
    
    // DIR und STEP pins definieren
    #define dirPin_VL 2
    #define stepPin_VL 3
    #define dirPin_HL 4
    #define stepPin_HL 5
    #define dirPin_VR 6
    #define stepPin_VR 7
    #define dirPin_HR 8
    #define stepPin_HR 9
    
    //enable pins definieren
    #define enbl_VL 40
    #define enbl_HL 42
    #define enbl_VR 41
    #define enbl_HR 43
    
    //steps pro umdrehung definieren:
    #define stepsPerRevolution 200
    
    //IR pin definieren
    IRrecv irrecv(RECV_PIN);
    
    decode_results results;
    
    // debouncer instanz definieren
    Bounce debouncer = Bounce();
    
    
    void setup()
    {
    
      //pins als output:
      pinMode(dirPin_VL, OUTPUT);
      pinMode(stepPin_VL, OUTPUT);
      pinMode(dirPin_HL, OUTPUT);
      pinMode(stepPin_HL, OUTPUT);
      pinMode(dirPin_VR, OUTPUT);
      pinMode(stepPin_VR, OUTPUT);
      pinMode(dirPin_HR, OUTPUT);
      pinMode(stepPin_HR, OUTPUT);
    
      Serial.begin(115200);
    
      //resett pin zustand definieren
      pinMode(PIN2RESET, INPUT);
    
      // IR empfänger pin mit bounce verbinden
      debouncer.attach(RECV_PIN);
    
      // debounce interval in ms
      debouncer.interval(5);
    
      // starte IR receiver
      irrecv.enableIRIn();
    
      //enable pins deaktivieren:
      digitalWrite(enbl_VL, HIGH);
      digitalWrite(enbl_HL, HIGH);
      digitalWrite(enbl_VR, HIGH);
      digitalWrite(enbl_HR, HIGH);
    
      //resett pin aktivieren
      digitalWrite(PIN2RESET, HIGH);
    }
    
    void loop()
    {
    /*
      // aktiviere enable pins:
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
    */
    
      // bounce instance updaten:
      debouncer.update();
    
      // neuen bounce wert holen :
      zaehler = debouncer.read();
    
      if (zaehler == 1)
      {
        zaehler = 0;
        //    taste = 0;
        if (irrecv.decode(&results))
        {
          taste = results.value;
          Serial.println(taste);
          //      delay(1000);
          // nächsten IR-wert empfangen
          irrecv.resume(); 
        }
    
      }
      tasten_abfrage();
    
    }
    
    
    /***********************************************************/
    
    void tasten_abfrage(void)
    {
      switch (taste)
      {
    
        case 151 ://taste 1 große FB
          {
            if (taste == 151 )
            {
              Serial.println("szenario_1");
              Serial1.println("szenario_1");
    
              //fahre szenario_1
    
              delay (1000);
    
              break;
            }
          }
    
        case 103://taste 2 große FB
          {
            if (taste == 103)
            {
              Serial.println("szenario_2");
              Serial1.println("szenario_2");
    
              //fahre szenario_2
    
              delay (1000);
    
              break;
            }
          }
    
        case 79://taste 3 große FB
          {
            if (taste == 79)
            {
              Serial.println("szenario_3");
              Serial1.println("szenario_3");
    
              //fahre szenario_3
    
              delay (1000);
    
              break;
            }
          }
    
    
        case 207://taste 4 große FB
          {
            if (taste == 207)
            {
              Serial.println("szenario_4");
              Serial1.println("szenario_4");
    
              //fahre szenario_4
    
              delay (1000);
    
              break;
            }
          }
    
    
        case 253://OK taste, motor stop
          {
            if (taste == 253)
            {
              alle_stepper_stop();
    
              break;
            }
          }
    
    
        case 61:// rotate rechts große FB
          {
            if (taste == 61)
            {
              rechts_drehen();
    
              break;
            }
          }
    
    
        case 221:// rotate links große FB
          {
            if (taste == 221)
            {
              links_drehen();
    
              break;
            }
    
          }
    
    
        case 157:// fahre vor große FB
          {
            if (taste == 157)
            {
              vorwaerts();
    
              break;
            }
          }
    
    
        case 87:// fahre rückwärts große FB
          {
            if (taste == 87)
            {
              rueckwaerts();
    
              break;
            }
          }
      }
    
    
    }
    
    
    /***********************************************************/
    void alle_stepper_stop(void)
    {
      //enable pins deaktivieren
      digitalWrite(enbl_VL, HIGH);
      digitalWrite(enbl_HL, HIGH);
      digitalWrite(enbl_VR, HIGH);
      digitalWrite(enbl_HR, HIGH);
      reboot();
    }
    
    /***********************************************************/
    void vorwaerts(void)
    {
    
      // enable pins aktivieren:
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
    
      //richtung bestimmen
      digitalWrite(dirPin_VL, LOW);
      digitalWrite(dirPin_HL, LOW);
      digitalWrite(dirPin_VR, HIGH);
      digitalWrite(dirPin_HR, HIGH);
    
      for (int i = 0; i < stepsPerRevolution; i++)
      {
        digitalWrite(stepPin_VL, HIGH);
        digitalWrite(stepPin_HL, HIGH);
        digitalWrite(stepPin_VR, HIGH);
        digitalWrite(stepPin_HR, HIGH);
        delayMicroseconds(250);
        digitalWrite(stepPin_VL, LOW);
        digitalWrite(stepPin_HL, LOW);
        digitalWrite(stepPin_VR, LOW);
        digitalWrite(stepPin_HR, LOW);
        delayMicroseconds(250);
      }
    }
    
    
    /**********************************************************/
    
    void rueckwaerts(void)
    {
    
      // enable pins aktivieren:
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
    
      //richtung bestimmen
      digitalWrite(dirPin_VL, HIGH);
      digitalWrite(dirPin_HL, HIGH);
      digitalWrite(dirPin_VR, LOW);
      digitalWrite(dirPin_HR, LOW);
    
      for (int i = 0; i < stepsPerRevolution; i++)
      {
        digitalWrite(stepPin_VL, HIGH);
        digitalWrite(stepPin_HL, HIGH);
        digitalWrite(stepPin_VR, HIGH);
        digitalWrite(stepPin_HR, HIGH);
        delayMicroseconds(500);
        digitalWrite(stepPin_VL, LOW);
        digitalWrite(stepPin_HL, LOW);
        digitalWrite(stepPin_VR, LOW);
        digitalWrite(stepPin_HR, LOW);
        delayMicroseconds(500);
      }
    }
    
    /***********************************************************/
    void rechts_drehen(void)
    {
    
      // enable pins aktivieren
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
    
      //richtung bestimmen
      digitalWrite(dirPin_VL, LOW);
      digitalWrite(dirPin_HL, LOW);
      digitalWrite(dirPin_VR, LOW);
      digitalWrite(dirPin_HR, LOW);
    
      for (int i = 0; i < stepsPerRevolution; i++)
      {
        digitalWrite(stepPin_VL, HIGH);
        digitalWrite(stepPin_HL, HIGH);
        digitalWrite(stepPin_VR, HIGH);
        digitalWrite(stepPin_HR, HIGH);
        delayMicroseconds(500);
        digitalWrite(stepPin_VL, LOW);
        digitalWrite(stepPin_HL, LOW);
        digitalWrite(stepPin_VR, LOW);
        digitalWrite(stepPin_HR, LOW);
        delayMicroseconds(500);
      }
    
    }
    
    
    /**********************************************************/
    void links_drehen(void)
    {
    
      //enable pins aktivieren
      digitalWrite(enbl_VL, LOW);
      digitalWrite(enbl_HL, LOW);
      digitalWrite(enbl_VR, LOW);
      digitalWrite(enbl_HR, LOW);
    
      //richtung bestimmen
      digitalWrite(dirPin_VL, HIGH);
      digitalWrite(dirPin_HL, HIGH);
      digitalWrite(dirPin_VR, HIGH);
      digitalWrite(dirPin_HR, HIGH);
    
      for (int i = 0; i < stepsPerRevolution; i++)
      {
        digitalWrite(stepPin_VL, HIGH);
        digitalWrite(stepPin_HL, HIGH);
        digitalWrite(stepPin_VR, HIGH);
        digitalWrite(stepPin_HR, HIGH);
        delayMicroseconds(500);
        digitalWrite(stepPin_VL, LOW);
        digitalWrite(stepPin_HL, LOW);
        digitalWrite(stepPin_VR, LOW);
        digitalWrite(stepPin_HR, LOW);
        delayMicroseconds(500);
      }
    
    }
    
    /***********************************************************/
    void reboot()
    {
      pinMode(PIN2RESET, OUTPUT);
      digitalWrite(PIN2RESET, LOW);
      delay(100);
    }
    /***********************************************************/
    
    /************************************************************/
    der letzter stand ist: halbschritt und 2,5ms zwischen HIGH und LOW, damit fährt er 1m in ca 2sekunden. Das reicht erstmal, würde ich sagen. Damit schafft er auch eine 20° steigung, mehr konnte ich innen nicht testen und mehr haben wir hier kaum an der Elbe, ausser in der Sächsischen Schweiz, und da ist es dann doch zu steil und sandig...

    Ich werde jetzt ein paar "szenarios" einprogrammieren und bei schönerem wetter ein paar bilder vom outdooreinsatz schicken....

    Die bedienung ist erstmal mit IR, das geht draussen natürlich nur schlecht. Der nächste schritt ist WiFi, sprich der ESP32 kommt zusätzlich rein, die komunikation über I2C mit dem 2560 als motorsteuerung muss noch entwickelt werden und die bedienung über WiFi über smartphone geschrieben werden....
    Dieser
    Code:
    // https://microcontrollerslab.com/esp32-web-server-arduino-led/#Displaying_HTML_web_server_with_ESP32
    
    #include <Arduino.h>
    #include <analogWrite.h>
    
    #include <WiFi.h>
    #include <WebServer.h>
    
    double velo = 0;
    
    const char* ssid = "ESP32-lok"; //PTCL-BB
    const char* password = "12345678";  //5387c614
    WiFiServer server(80);
    
    String header;
    
    String LED_ONE_STATE = "vorwaerts";
    String LED_TWO_STATE = "aus";
    String LED_THREE_STATE = " 0 ";
    String LED_FOUR_STATE = "aus";
    
    //String MOTOR_STATE = "off";
    //String DIRECTION_STATE = "off";
    
    const int GPIO_PIN_NUMBER_5 = 5;
    const int GPIO_PIN_NUMBER_18 = 18;
    const int GPIO_PIN_NUMBER_22 = 22;
    const int GPIO_PIN_NUMBER_19 = 19;
    
    //const int GPIO_PIN_NUMBER_9 = 9; //motor
    //const int GPIO_PIN_NUMBER_10 = 10;//direction
    
    
    IPAddress local_ip(192, 168, 1, 101);
    IPAddress gateway(192, 168, 1, 101);
    IPAddress subnet(255, 255, 255, 0);
    
    void setup() {
      Serial.begin(115200);
      Serial.print("code----ESP_32/pico_lok/HTTP_AP_server_motor_control_8_buttons_velo");
    
      pinMode(GPIO_PIN_NUMBER_5, OUTPUT);
      pinMode(GPIO_PIN_NUMBER_18, OUTPUT);
      pinMode(GPIO_PIN_NUMBER_22, OUTPUT);
      pinMode(GPIO_PIN_NUMBER_19, OUTPUT);
    
      //  pinMode(GPIO_PIN_NUMBER_9, OUTPUT);
      //  pinMode(GPIO_PIN_NUMBER_10, OUTPUT);
    
    
      digitalWrite(GPIO_PIN_NUMBER_5, LOW);
      digitalWrite(GPIO_PIN_NUMBER_18, LOW);
      digitalWrite(GPIO_PIN_NUMBER_22, LOW);
      digitalWrite(GPIO_PIN_NUMBER_19, LOW);
    
      //  digitalWrite(GPIO_PIN_NUMBER_9, LOW);
      //  digitalWrite(GPIO_PIN_NUMBER_10, LOW);
    
    
      Serial.print("Connecting to ");
      Serial.println(ssid);
    
      //  WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
    
      WiFi.softAP(ssid, password);
      WiFi.softAPConfig(local_ip, gateway, subnet);
    
      /*
        while (WiFi.status() != WL_CONNECTED)
        {
        delay(1000);
        Serial.println("Trying to connect to Wifi Network");
        }
      */
      Serial.println("");
      Serial.println("Successfully connected to WiFi network");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
      server.begin();
    }
    
    void loop() {
      WiFiClient client = server.available();
      if (client)
      {
        Serial.println("New Client is requesting web page");
        String current_data_line = "";
        while (client.connected())
        {
          if (client.available())
          {
            char new_byte = client.read();
            Serial.write(new_byte);
            header += new_byte;
            if (new_byte == '\n')
            {
    
              if (current_data_line.length() == 0)
              {
    
                client.println("HTTP/1.1 200 OK");
                client.println("Content-type:text/html");
                client.println("Connection: close");
                client.println();
                
    // lok vorwärts/rückwärts
                if (header.indexOf("LED1=ON") != -1)
                {
                  Serial.println("GPIO5 LED is ON");
                  LED_ONE_STATE = "vorwaerts";
                  digitalWrite(GPIO_PIN_NUMBER_5, HIGH);
                }
                if (header.indexOf("LED1=OFF") != -1)
                {
                  Serial.println("GPIO5 LED is OFF");
                  LED_ONE_STATE = "rueckwaerts";
                  digitalWrite(GPIO_PIN_NUMBER_5, LOW);
                }
    // lok an/aus
                if (header.indexOf("LED2=ON") != -1)
                {
                  Serial.println("GPIO18 LED is ON");
                  LED_TWO_STATE = "an";
                  analogWrite(GPIO_PIN_NUMBER_18, velo); //HIGH);
                }
                if (header.indexOf("LED2=OFF") != -1)
                {
                  Serial.println("GPIO18 LED is OFF");
                  LED_TWO_STATE = "aus";
                  analogWrite(GPIO_PIN_NUMBER_18, LOW);
                }
    //lok schneller/langsammer
                if (header.indexOf("LED3=ON") != -1)
                {
                  Serial.println("GPIO22 LED is ON");
                  velo = velo + 5;
                  LED_THREE_STATE = velo; //"on";
                  //analogWrite(GPIO_PIN_NUMBER_22, velo);//HIGH
                }
                if (header.indexOf("LED3=OFF") != -1)
                {
                  Serial.println("GPIO22 LED is OFF");
                  velo = velo - 5;
                  LED_THREE_STATE = velo; //"off";
                  //analogWrite(GPIO_PIN_NUMBER_22, velo); //LOW
                }
    
                if (header.indexOf("LED4=ON") != -1)
                {
                  Serial.println("GPIO19 LED is ON");
                  LED_FOUR_STATE = "an";
                  digitalWrite(GPIO_PIN_NUMBER_19, HIGH);
                }
                if (header.indexOf("LED4=OFF") != -1)
                {
                  Serial.println("GPIO19 LED is OFF");
                  LED_FOUR_STATE = "aus";
                  digitalWrite(GPIO_PIN_NUMBER_19, LOW);
                }
    
                client.println("<!DOCTYPE html><html>");
                client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
                client.println("<link rel=\"icon\" href=\"data:,\">");
                client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
                client.println(".button { background-color: #4CAF50; border: 2px solid #4CAF50;; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 1px 1px; cursor: pointer; }");
                client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
                // Web Page Heading
                client.println("</style></head>");
                //client.println("<body><center><h1>ESP32 Web server LED controlling example</h1></center>");
                //client.println("<center><h2>Web Server Example Microcontrollerslab.com</h2></center>" );
                //client.println("<center><h2>Press on button to turn on led and off button to turn off LED</h3></center>");
                client.println("<form><center>");
    
                client.println("<p> richtung ist " + LED_ONE_STATE + "</p>");
                client.println("<button class=\"button\" name=\"LED1\" value=\"ON\" type=\"submit\">VORW</button>") ;
                client.println("<button class=\"button\" name=\"LED1\" value=\"OFF\" type=\"submit\">RUECKW</button></center>");
    
                client.println("<p>motor ist " + LED_TWO_STATE + "</p>");
                client.println("<button class=\"button\" name=\"LED2\" value=\"ON\" type=\"submit\">AN</button>");
                client.println("<button class=\"button\" name=\"LED2\" value=\"OFF\" type=\"submit\">AUS</button></center>");
    
                client.println("<p>geschwindigkeit ist " + LED_THREE_STATE + "</p>");
                client.println("<button class=\"button\" name=\"LED3\" value=\"ON\" type=\"submit\">SCHNELLER</button>");
                client.println("<button class=\"button\" name=\"LED3\" value=\"OFF\" type=\"submit\">LANGSAMMER</button></center>");
    
                client.println("<p>kamera ist " + LED_FOUR_STATE + "</p>");
                client.println("<button class=\"button\" name=\"LED4\" value=\"ON\" type=\"submit\">AN</button>");
                client.println("<button class=\"button\" name=\"LED4\" value=\"OFF\" type=\"submit\">AUS</button></center>");
    
    
                client.println("</center></form></body></html>");
                client.println();
                break;
              }
              else
              {
                current_data_line = "";
              }
            }
            else if (new_byte != '\r')
            {
              current_data_line += new_byte;
            }
          }
        }
        // Clear the header variable
        header = "";
        // Close the connection
        client.stop();
        Serial.println("Client disconnected.");
        Serial.println("");
      }
    }
    sollte umgeschrieben werde, war ursprünglich für die autonome TT - lok geschrieben, bzw. abgewandelt worden...
    gruß inka

  3. #103
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    vielleicht greife ich hier zu weit vor, aber warum eigentlich nicht. Der Mega 2560 soll ja als "motorbetreuer" dienen, evtl. bekommt er noch ein paar Sensoren zur seite...
    Für die kommunikation nach aussen (und innen) soll ein LOLIN ESP32 dienen, den hatte ich als "rest" aus dem projekt der autonomen TT-lok noch da. Das menü auf dem smartphone sah dort so aus:

    Klicke auf die Grafik für eine größere Ansicht

Name:	2019_11_19_bedien_bild_tt_lok.jpg
Hits:	10
Größe:	46,5 KB
ID:	34490
    dies soll, da die bedienung des outdoor roboters ja viel umfangreicher sein wird durch so etwas
    Klicke auf die Grafik für eine größere Ansicht

Name:	20191119_102532.jpg
Hits:	44
Größe:	35,1 KB
ID:	34491
    ersetzt werden...

    Die übernahme des AP-servers macht mir denke ich keine probleme, wie ich aber die (html?) programmierung des neuen bedienfeldes hinbekommen soll, da habe ich keinen blassen schimmer... Wer hilft?
    gruß inka

  4. #104
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Wenn Du Hilfe beim HTML-Bedienfeld brauchst, kann ich das gerne für Dich übernehmen. Allerdings habe ich keinen ESP32, nur ein ESP-12E. Müsstest den Code dann auf dem ESP32 selbst zum Laufen bringen, wenn Du nicht ganz unbewandert bist, sollte das funktionieren.


    Gruß

  5. #105
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    also bitte nicht übernehmen, das war nicht der hintergrund meiner frage nach hilfe - ich möchte schliesslich verstehen, was da in dem code passiert...

    Die situation:

    - auf dem ESP läuft ein webserver, der ist an sich kein problem, zumindest habe ich (halbwegs) verstanden was da abläuft...

    - der webserver soll auf "tastendrücke" am smartphone reagieren und die werte, die jetzt die IR-fernbedienung (weiss nicht ob das so sinnvoll ist?) vom ESP über I2C an den arduino liefern...

    - evtl. die IR fernbedienung nur um die werte, die jetzt vom smartphone kommen ergänzen, sodass beide bedienungen funktionieren?

    - der arduino soll per switch() - wie jetzt auch schon - die vom ESP kommenden befehle umsetzen und die motoren steuern...

    Die beiden sketches, so wie sie jetzt sind (die am arduino funktioniert ja bereits mit der IR fernbedienung) und die basis für den webserver (die ich teilweise übernehmen wollte) sind im vorletzten post enthalten. Meinst Du wir können so erstmal starten?
    gruß inka

  6. #106
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Dann habe ich das in der Kürze Deiner Anfrage nicht vollständig verstanden, wie Du das jetzt weiter beschreibst.
    Aber dennoch: das Tastenfeld der abgebildeten Fernbedienung kannst Du in eine HTML-Seite packen, die kannst Du per Webbrowser von jedem Gerät, dass einen hat, aufrufen.
    Als zweites hast Du dann noch die Fernbedienung zum in die Hand nehmen, die ja sowieso schon funktioniert, wie Du sagst.
    Das halte ich für am einfachsten, für jeden.

    Dies habe ich noch nicht verstanden:
    evtl. die IR fernbedienung nur um die werte, die jetzt vom smartphone kommen ergänzen, sodass beide bedienungen funktionieren?

    MfG

    - - - Aktualisiert - - -

    Du kannst Deinen alten Code natürlich umstricken. Dann musst Du sagen, wobei Du genau Hilfe brauchst. Beim Quelltext für HTML? Oder noch was anderes?


    MfG

    - - - Aktualisiert - - -

    Das Bild von der Fernbedienung: kannst Du mal eine ganz genaue Aufnahme direkt von oben machen? Dann kann das Bild bearbeitet werden, dass es sich möglichst gut komprimieren lässt und dann könnte das als Hintergrundbild verwendet werden. Darüber wird ein Raster mit Elementen gelegt, die beim Anklicken die Stelle hervorheben, die auf dem Bild angeklickt wurde. Wäre eine Möglichkeit die Bedienung in HTML bedienbar zu machen.

  7. #107
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Moppi Beitrag anzeigen
    das Tastenfeld der abgebildeten Fernbedienung kannst Du in eine HTML-Seite packen, die kannst Du per Webbrowser von jedem Gerät, dass einen hat, aufrufen.
    das ist genau der punkt, wo ich hilfe bräuchte... vielleicht sollten wir uns erstmal auf den aufbau der webseite konzentrieren. Ich hab ja vor jahrzenten bereits ein bischen was mit HTML, PHP und CSS gemacht, aber das ist einerseits sicher überholt und auch bereits so gut wie vergessen. Ein paar begriffe und ihre bedeutung sind noch da, mehr ist es aber nicht...

    das hier
    Code:
        while (client.connected())
        {
          if (client.available())
          {
            char new_byte = client.read();
            Serial.write(new_byte);
            header += new_byte;
            if (new_byte == '\n')
            {
    
              if (current_data_line.length() == 0)
              {
    
                client.println("HTTP/1.1 200 OK");
                client.println("Content-type:text/html");
                client.println("Connection: close");
                client.println();
                
    // lok vorwärts/rückwärts
                if (header.indexOf("LED1=ON") != -1)
                {
                  Serial.println("GPIO5 LED is ON");
                  LED_ONE_STATE = "vorwaerts";
                  digitalWrite(GPIO_PIN_NUMBER_5, HIGH);
                }
                if (header.indexOf("LED1=OFF") != -1)
                {
                  Serial.println("GPIO5 LED is OFF");
                  LED_ONE_STATE = "rueckwaerts";
                  digitalWrite(GPIO_PIN_NUMBER_5, LOW);
                }
    // lok an/aus
                if (header.indexOf("LED2=ON") != -1)
                {
                  Serial.println("GPIO18 LED is ON");
                  LED_TWO_STATE = "an";
                  analogWrite(GPIO_PIN_NUMBER_18, velo); //HIGH);
                }
                if (header.indexOf("LED2=OFF") != -1)
                {
                  Serial.println("GPIO18 LED is OFF");
                  LED_TWO_STATE = "aus";
                  analogWrite(GPIO_PIN_NUMBER_18, LOW);
                }
    //lok schneller/langsammer
                if (header.indexOf("LED3=ON") != -1)
                {
                  Serial.println("GPIO22 LED is ON");
                  velo = velo + 5;
                  LED_THREE_STATE = velo; //"on";
                  //analogWrite(GPIO_PIN_NUMBER_22, velo);//HIGH
                }
                if (header.indexOf("LED3=OFF") != -1)
                {
                  Serial.println("GPIO22 LED is OFF");
                  velo = velo - 5;
                  LED_THREE_STATE = velo; //"off";
                  //analogWrite(GPIO_PIN_NUMBER_22, velo); //LOW
                }
    
                if (header.indexOf("LED4=ON") != -1)
                {
                  Serial.println("GPIO19 LED is ON");
                  LED_FOUR_STATE = "an";
                  digitalWrite(GPIO_PIN_NUMBER_19, HIGH);
                }
                if (header.indexOf("LED4=OFF") != -1)
                {
                  Serial.println("GPIO19 LED is OFF");
                  LED_FOUR_STATE = "aus";
                  digitalWrite(GPIO_PIN_NUMBER_19, LOW);
                }
    
                client.println("<!DOCTYPE html><html>");
                client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
                client.println("<link rel=\"icon\" href=\"data:,\">");
                client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
                client.println(".button { background-color: #4CAF50; border: 2px solid #4CAF50;; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 1px 1px; cursor: pointer; }");
                client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
                // Web Page Heading
                client.println("</style></head>");
                //client.println("<body><center><h1>ESP32 Web server LED controlling example</h1></center>");
                //client.println("<center><h2>Web Server Example Microcontrollerslab.com</h2></center>" );
                //client.println("<center><h2>Press on button to turn on led and off button to turn off LED</h3></center>");
                client.println("<form><center>");
    
                client.println("<p> richtung ist " + LED_ONE_STATE + "</p>");
                client.println("<button class=\"button\" name=\"LED1\" value=\"ON\" type=\"submit\">VORW</button>") ;
                client.println("<button class=\"button\" name=\"LED1\" value=\"OFF\" type=\"submit\">RUECKW</button></center>");
    
                client.println("<p>motor ist " + LED_TWO_STATE + "</p>");
                client.println("<button class=\"button\" name=\"LED2\" value=\"ON\" type=\"submit\">AN</button>");
                client.println("<button class=\"button\" name=\"LED2\" value=\"OFF\" type=\"submit\">AUS</button></center>");
    
                client.println("<p>geschwindigkeit ist " + LED_THREE_STATE + "</p>");
                client.println("<button class=\"button\" name=\"LED3\" value=\"ON\" type=\"submit\">SCHNELLER</button>");
                client.println("<button class=\"button\" name=\"LED3\" value=\"OFF\" type=\"submit\">LANGSAMMER</button></center>");
    
                client.println("<p>kamera ist " + LED_FOUR_STATE + "</p>");
                client.println("<button class=\"button\" name=\"LED4\" value=\"ON\" type=\"submit\">AN</button>");
                client.println("<button class=\"button\" name=\"LED4\" value=\"OFF\" type=\"submit\">AUS</button></center>");
    
    
                client.println("</center></form></body></html>");
                client.println();
                break;
              }
              else
              {
                current_data_line = "";
              }
            }
            else if (new_byte != '\r')
            {
              current_data_line += new_byte;
            }
          }
        }
    ist das problem,

    Zitat Zitat von Moppi Beitrag anzeigen
    Du kannst Deinen alten Code natürlich umstricken. Dann musst Du sagen, wobei Du genau Hilfe brauchst. Beim Quelltext für HTML? Oder noch was anderes?
    naja, dass, was jetzt bereits im arduino läuft - läuft ja. Zunächst ist das ja ausreichend. Es geht mir letztendlich darum , dass ich - je nach situation - den roboter per IR-fernbedienung oder smartphone steuen kann...

    edit: foto hinzu...
    Klicke auf die Grafik für eine größere Ansicht

Name:	IR_fernbedienung_arduino.jpg
Hits:	6
Größe:	98,1 KB
ID:	34497
    Geändert von inka (19.11.2019 um 16:24 Uhr) Grund: foto hinzu
    gruß inka

  8. #108
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Der Link (Anhang 34495) funktioniert nicht.

    Fehler:
    Ungültige Angabe: Anhang
    Wenn du einem normalen, gültigen Link im Forum gefolgt bist, wende dich bitte an den Webmaster.
    - - - Aktualisiert - - -

    Ok, Bild ist jetzt da.

  9. #109
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    ich hatte im nachinein auch probleme das bild darzustellen, keine ahnung was da war...

    ich finde es toll, dass Du mir hilfst, würde aber sehr gerne an Deinen überlegungen teilhaben wollen - wenn's denn nicht zu viel verlangt ist - also auch mit evtl. irrwegen, meinen dummen fragen usw...
    gruß inka

  10. #110
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Na gut, wenn Du das alles nachvollziehen willst, musst Du selber ran, an den Code, aber mit Unterstützung / Hilfe.
    Das Bild bearbeite ich mal und verpacke das in eine komprimierte Datei, JPEG oder so - was am wenigsten Platz benötigt.

    Die Datei kann in das "Filesystem" auf dem nodeMCU geschrieben werden, damit belegt es keinen Programmspeicher. Allerdings kommt dann wieder zusätzlicher Programmcode, für SPIFF hinzu.
    Oder zweitens, ich codiere die Dateigleich zu Base64 und diesen String kann man dann direkt in den Programmcode integrieren. Das wäre vielleicht zu Anfang die einfachste Methode.




    MfG

Seite 11 von 57 ErsteErste ... 91011121321 ... LetzteLetzte

Ähnliche Themen

  1. Abstandsmessung Outdoor bis 3m
    Von robo218 im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 14.12.2017, 07:56
  2. outdoor spy robot
    Von jancrombach im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 7
    Letzter Beitrag: 14.08.2010, 14:09
  3. Outdoor Roboter
    Von OsramLED im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 3
    Letzter Beitrag: 07.08.2006, 10:34
  4. Outdoor-Robo
    Von RobotrixerP im Forum Mechanik
    Antworten: 3
    Letzter Beitrag: 16.04.2006, 19:38
  5. [ERLEDIGT] Outdoor - Navigation
    Von Quaio im Forum Sensoren / Sensorik
    Antworten: 37
    Letzter Beitrag: 21.04.2005, 13:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test