Dependencies:   LCD_i2c_GSOE ESP8266MQTT

Revision:
9:c37085ea102a
Parent:
8:080aa372ff1f
--- a/main.cpp	Mon Aug 16 17:21:39 2021 +0000
+++ b/main.cpp	Thu Aug 19 10:48:14 2021 +0000
@@ -2,79 +2,73 @@
 #include "PubSubClient.h"   //MQTT- Bibliothek
 #include "LCD.h"            //LCD-Display-Bibliothek
 
-/*
-"mqtt-broker-hostname": {
-            "help": "MQTT Broker resolvable hostname.",
-            "value": "\"test.mosquitto.org\""
-        },
-*/
-PortOut diag(PortC,0xFF);   //Testausgabe für Binärzähler
-AnalogIn poti(PA_0);        //Testsensor Analogeingang Drehknopf    
-lcd mylcd;                  //LCD-Display
+#define A 0b00001
+#define B 0b00010
+#define C 0b00100
+#define D 0b01000
+#define Voll 0b00000
+
+PortOut zustand(PortC,0x1F);
+
 
 PubSubClient client;        //Deklaration des MQTT-Clients
+InterruptIn Lichtschranke(PA_1);
+char buffer[64];
+int anzahl;
+bool einfahrt=false;
 
-/*
-//Beschreibung von Message und MessageData
-struct Message
+void lichtschranke()
 {
-    enum QoS qos;
-    bool retained;
-    bool dup;
-    unsigned short id;
-    void *payload;
-    size_t payloadlen;
-};
-
-//MessageData beinhaltet Message und Topicname
-struct MessageData
-{
-    MessageData(MQTTString &aTopicName, struct Message &aMessage)  : message(aMessage), topicName(aTopicName)
-    { }
-
-    struct Message &message;
-    MQTTString &topicName;
-};
-*/
+    if (einfahrt==false)
+    {
+        switch (zustand)
+        {
+            case A: anzahl++; if (anzahl==22) zustand=B; break; 
+            case B: anzahl++; if (anzahl==44) zustand=C; break;
+            case C: anzahl++; if (anzahl==66) zustand=D; break;
+            case D: anzahl++; if (anzahl==88) zustand=Voll; break;           
+        }
+        einfahrt=true;
+    }
+}
 
 //Subscribe-Callbacks
-void subscribeCallback(MessageData& mymessage)
+void callback(MessageData& mymessage)
 {
-    mylcd.cursorpos(0);
-    //Der Inhalt einer Botschaft (payload) kann als String mit gibPayload 
-    //abgerufen werden
-    mylcd.printf("%s   ",client.gibPayload(mymessage).c_str());
+        zustand=A;
+        anzahl=0;
+        sprintf(buffer, "Fahrzeuge=%d", anzahl); //Potiwert in buffer speichern
+        client.publish("MBED/oehringen/faehrschiff", buffer); //unter Topic veröffentlichen 
 }
 
-void subscribeCallback2(MessageData& mymessage)
+void mqtt()
 {
-    mylcd.cursorpos(0x40);
-    mylcd.printf("%s   ",client.gibPayload(mymessage).c_str());
+    client.loop();  //Auf neue Botschaften prüfen
+    if (einfahrt)
+    {
+        sprintf(buffer, "Fahrzeuge=%d", anzahl); //Potiwert in buffer speichern
+        client.publish("MBED/oehringen/faehrschiff", buffer); //unter Topic veröffentlichen  
+        HAL_Delay(200); 
+        einfahrt=false;
+    }
 }
 
+void init()
+{
+    client.connect((char*)"joerg"); 
+    client.subscribe("MBED/oehringen/faehrschiffLeer", QOS0, callback); 
+    Lichtschranke.fall(&lichtschranke);
+    Lichtschranke.mode(PullDown);
+    zustand=A;
+    anzahl=0;    
+}
 
-//test.mosquitto.org 5.196.95.208
 int main()
 {
-    diag=1;
-    int d;
-    char buffer[64];
-    mylcd.clear();
-    client.connect((char*)"joerg"); //Verbinde Client mit ID 
-    //Client für topic einschreiben
-    client.subscribe("MBED/joerg/ersteTests", QOS0, subscribeCallback); 
-    client.subscribe("MBED/joerg/zweiteTests", QOS0, subscribeCallback2); 
+    init();
     while(true)
     {
-        client.loop();  //Auf neue Botschaften prüfen
-        diag=diag+1;    //Zähler auf PortC
-        d=diag;         //Zählerstand speichern
-        //Poti veröffentlichen
-        sprintf(buffer, "poti=%d", (int)(poti*4095)); //Potiwert in buffer speichern
-        client.publish("MBED/joerg/ersteTests", buffer); //unter Topic veröffentlichen
-        //diag veröffentlichen
-        sprintf(buffer, "diag=%d", d); //diag in buffer speichern
-        client.publish("MBED/joerg/zweiteTests", buffer); //unter Topic veröffentlichen
+        mqtt();
     }
 }