[C++] WiFi/Sensor Code kürzen ?!

Dieses Thema im Forum "Projekte / Codes" wurde erstellt von giorgio, 5. Juli 2019 .

  1. 5. Juli 2019
    Guten Abend ...

    Lang ist’s her ...

    wäre cool wenn einer von euch mir folgenden Code kürzen könnte Danke



    Anfang
    ——————————————-


    #include <ESP8266WiFi.h>
    #include <WiFiUdp.h>
    #include "DHT.h"
    #define DHTPIN 12
    #define DHTTYPE DHT11

    DHT dht(DHTPIN, DHTTYPE);

    const char* ssid = "FRITZ!Box 6590 Cable MM";
    const char* password = "72403974276661513745";
    unsigned int localPort = 2000;

    IPAddress sendIP(192,168,178,255);
    WiFiUDP udp;
    char packetBuffer[50];
    String inString;
    char ReplyBuffer[50];
    int RelaisPin = 14;
    int TasterPin = 2;

    int tasterStatus = LOW;
    int tasterGedrueckt = 0;
    int lichtmodus = 1;

    long tasterZeit = 0;
    long entprellZeit = 200;

    int r_Pin = 0;
    int b_Pin = 5;
    int g_Pin = 4;

    void setup() {
    Serial.begin(9600);
    dht.begin();
    pinMode(RelaisPin, OUTPUT);
    digitalWrite(RelaisPin, LOW);
    pinMode(TasterPin,INPUT_PULLUP);
    pinMode(g_Pin, OUTPUT);
    pinMode(b_Pin, OUTPUT);
    pinMode(r_Pin, OUTPUT);
    // pinMode(DHTPIN, INPUT_PULLUP);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }

    IPAddress myIP = WiFi.localIP();

    Serial.println("");
    Serial.print("WiFi connected: ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(myIP);
    Serial.println("Starting UDP");
    udp.begin(localPort);
    Serial.print("Local port: ");
    Serial.println(udp.localPort());


    Send(ssid);
    Send(String(myIP[0]) + "." + String(myIP[1]) + "." + String(myIP[2]) + "." + String(myIP[3]));
    Send("Starting UDP");
    Send(String(localPort));
    }

    void PacketBuffer_Loschen(){

    for (int i=0; i<50; i++ ){
    packetBuffer = 0;
    }
    }

    void receive_packet(){
    int packetSize = udp.parsePacket();
    if(packetSize)
    {
    IPAddress remoteIp = udp.remoteIP();
    int len = udp.read(packetBuffer, 255);
    if(len > 0) packetBuffer[len] = 0;
    Serial.println(packetBuffer);
    }
    }

    void Send(String SendeText){
    SendeText.toCharArray(ReplyBuffer, 50);
    udp.beginPacket(sendIP, 2000);
    udp.write(ReplyBuffer);
    udp.endPacket();
    inString = "";
    }

    void Relais(bool RelaisStartus){
    if(RelaisStartus == true){
    digitalWrite(RelaisPin, HIGH);
    }
    else{
    digitalWrite(RelaisPin, LOW);
    }
    }


    void Licht_Schalter(){
    tasterStatus = digitalRead(TasterPin);

    if (tasterStatus == HIGH)
    {
    tasterZeit = millis();
    tasterGedrueckt = 1;
    }

    if ((millis() - tasterZeit > entprellZeit ) && tasterGedrueckt == 1)
    {
    lichtmodus++;
    tasterGedrueckt = 0;

    if (lichtmodus == 1)
    {
    Send("Licht AUS");
    }
    else
    {
    Send("Licht AN");
    }
    }
    }


    void LED_Schalter(char Name, int Wert){

    switch(Name)
    {
    case 'G':
    analogWrite(g_Pin,Wert);
    break;

    case 'R':
    analogWrite(r_Pin,Wert);
    break;

    case 'B':
    analogWrite(b_Pin,Wert);
    break;
    }
    }

    void WartetAufDaten(){
    PacketBuffer_Loschen();
    receive_packet();

    if(String(packetBuffer).length() < 5 ){
    String Str_Name = String(packetBuffer).substring(0,1);
    String Str_Wert = String(packetBuffer).substring(1,4);

    char *Name = const_cast<char*>(Str_Name.c_str());
    int Wert = Str_Wert.toInt();

    LED_Schalter(Name[0],Wert);
    }

    if(String(packetBuffer) == "Relais"){
    if(lichtmodus == 1){
    lichtmodus = 0;
    Send("Licht AN");
    }
    else
    {
    lichtmodus = 1;
    Send("Licht AUS");
    }
    }

    if(String(packetBuffer) == "Temp"){
    TemrperaturSensor();
    }

    if(String(packetBuffer) == "Wlan Info"){
    IPAddress myIP = WiFi.localIP();
    Send(ssid);
    Send(String(myIP[0]) + "." + String(myIP[1]) + "." + String(myIP[2]) + "." + String(myIP[3]));
    Send("Starting UDP");
    Send(String(localPort));
    PacketBuffer_Loschen();
    }
    }

    void SchlarfzimmerLicht(){
    if(lichtmodus == 1)
    {
    Relais(false);
    }
    else
    {
    Relais(true);
    }

    if(lichtmodus >= 2)
    {
    lichtmodus = 0;
    }
    }

    void TemrperaturSensor(){
    //delay(2000);
    int h = dht.readHumidity();
    int t = dht.readTemperature();

    if (isnan(h) || isnan(t)) {
    Serial.println("");
    return;
    }


    if (String(h).length() > 2 || String(t).length() > 2){
    Serial.println("");
    return;
    }

    String T = "Temperatur: " + String(t) + "C";
    String F = "Luftfeuchtigkeit: " + String(h) + "%";

    Serial.println(T);
    Serial.println(F);

    Send(T);
    Send(F);
    }



    void loop() {
    Licht_Schalter();
    WartetAufDaten();
    SchlarfzimmerLicht();
    }
    —————————————

    Ende

    Gruß Giorgio
     
  2. 6. Juli 2019
    den Code kannst du kürzen in dem du die ganzen Zeilenumbrüche raus nimmst. Ansonsten lässt sich nicht viel Komprimieren, du könntest höchstens die Variablen kürzen aber das ist für die Praxis überflüssig.
     
    giorgio gefällt das.
  3. 6. Juli 2019
    Hmm dachte der wäre etwas zu lang , aber wenn der so gut ist wie er ist , dann lassen wir den so , essei denn jemand bekommt den kürzer hin ,ich meine mal gelernt zu haben , dass man sowas auch kürzer hinbekommen könnte weil ausgedruckt wären das immerhin fast 4 Seiten . Ich bin aber natürlich auch über jeden anderen Verbesserungsvorschlag dankbar
     
  4. 6. Juli 2019
    muddu kleiner ausdrucken öhöhöhöhöhöhööööö
     
    giorgio07 gefällt das.
  5. 7. Juli 2019
    In Zeiten von Smartphone kann man den Code doch überall herumzeigen. Wir mussten den Quellcode noch per Hand schreiben in Prüfungen ^^

    Wenn du die ganzen Zeilenumbrüche raus nimmst, passt der Code locker auf eine Seite.
     
    giorgio07 gefällt das.
  6. 7. Juli 2019
    Zuletzt von einem Moderator bearbeitet: 8. Juli 2019
    Genau darauf wollte ich ja hinaus hehe
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.