Dependencies: LCD_i2c_GSOE ESP8266MQTT
Diff: main.cpp
- 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(); } }