INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
hilfe bei callback ausgabe per knopfdruck
15.04.2018, 12:36
Beitrag #1
hilfe bei callback ausgabe per knopfdruck
Hallo an alle,
da ich ja jetzt endlich meine Temperatur und Feuchtigkeit über mqtt auf mein ili9341 Display schön anzeigen kann würde ich ein schritt weiter gehen.
Ich würde gerne verschiedene werte von 2 esp`s bei bestimmten Knopfdruck ausgeben lassen.

Ich habe folgendes probiert jedoch erfolglos.
Die Werte werden wild durcheinander gezeigt. Auch keine reaktion auf Knopfdruck.
Ich habe auch versucht die if abfrage in loop einzubauen aber da aktualisiert er nur noch durchgend und auch keine Knopffunktion
Danke im voraus für jeden Tipp.

Code:
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

/********* TFT 2.8 inch ILI9341 from Adafruit  ****************************/
// These pins work for the 2.8" TFT shield on NODEMCU
#define TFT_CS 4   // GPIO 04 d2  interne LED kein Port nötig, da TFT CS an GND
#define TFT_RST   // D12 GPIO10 //kein Port nötig, da Reset an Reset angeschlossen
#define TFT_DC 5   // GPIO 5 D1
#define TFT_MOSI 13 // GPIO 13 D7
#define TFT_SCK 14  // GPIO 14 D5
#define TFT_MISO 12 // GPIO 12 D6
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

//Falls die Anzeige gedreht wird
#define ROTATION_NO 0
#define ROTATION_90 1
#define ROTATION_180 2
#define ROTATION_270 3

const char* ssid = "meine ssid";
const char* password =  "passwort";
const char* mqttServer = "mein server";
const int mqttPort = 1883;
//const char* mqttUser = "";
//const char* mqttPassword = "";

WiFiClient espClient;
PubSubClient client(espClient);

char tempBuffer[100];
int Tasterpin_1 = 4;
int Tasterpin_2 = 0;
char* topic;
byte* payload;
unsigned int length;
int buttonState = 0;
void setup() {

  pinMode (Tasterpin_1, INPUT);
  Serial.begin(115200);
  tft.begin();
  tft.setRotation( ROTATION_270);
  tft_zeichneRahmen();
  
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");

  client.setServer(mqttServer, mqttPort);
  client.setCallback(callback);

  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");

    if (client.connect("ESP8266Client" )) {

      Serial.println("connected");  

    } else {

      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(2000);

    }
  }


  client.subscribe("/hooks/devices/0/SensorData/Humidity");
  client.subscribe("/hooks/devices/0/SensorData/Temperature");
  client.subscribe("/hooks/devices/0/SensorData/Temperatur");
}

void callback(char* topic, byte* payload, unsigned int length)
{
    buttonState = digitalRead (Tasterpin_2);
    if (buttonState == LOW){
      Serial.print ("Bitte Taste drücken");
    }
    else if (buttonState == HIGH){
    (strcmp(topic,"/hooks/devices/0/SensorData/Temperature") == 0);
    payload[length] = '\0';
    String s = String((char*)payload);
    Serial.print (s);
    Serial.println("Temperatur");    
    tft_zeichneRahmen();
    tft.setTextColor(ILI9341_RED);
    tft.setCursor( 135,75);
    tft.setTextSize(2);
    tft.print (s);
    tft.println (" C");
    
    (strcmp(topic,"/hooks/devices/0/SensorData/Humidity") == 0);
    payload[length] = '\0';
    String f = String((char*)payload);
    Serial.print (f);
    Serial.println("Hum:");
    tft.setCursor( 135,135);
    tft.setTextSize(4);
    tft.print (f);
    tft.println (" %");
    }

   buttonState = digitalRead (Tasterpin_1);
    if (buttonState == LOW)
   {
      Serial.print ("Bitte Taste 2 drücken");
      Serial.print (buttonState);
    }
    else if (buttonState == HIGH)
    {
      Serial.print (buttonState);
  
  (strcmp(topic,"/hooks/devices/0/SensorData/Temperatur") == 0);
    String a = String((char*)payload);
    Serial.print (a);
    Serial.println("Temperatur");  
    tft_zeichneRahmen();
    tft.setTextColor(ILI9341_RED);
    tft.setCursor( 135,75);
    tft.setTextSize(2);
    tft.print (a);
    tft.println (" C");
    
  }
  Serial.println();
  Serial.println("-----------------------");
}

void tft_zeichneRahmen( )
{
tft.fillScreen(ILI9341_BLACK);
tft.drawRoundRect(1, 0, tft.width()-1,40, 10, ILI9341_BLUE);
tft.drawRoundRect(1, 50, tft.width()-1,135, 10, ILI9341_GREEN);
tft.setCursor (10,75);
tft.setTextSize (4);
tft.print("Temp:");
tft.setTextSize (2);
tft.setCursor (10,135);
tft.print ("Feucht:");
tft.drawRoundRect(0, 200, tft.width()-1, 40, 10, ILI9341_RED);
}

void loop() {
  client.loop();

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.04.2018, 12:43
Beitrag #2
RE: hilfe bei callback ausgabe per knopfdruck
Was Du mit den Tastern erreichen willst, habe ich nicht wirklich verstanden.

Lass doch erst mal die anderen Sachen weg und baue nur einen kleinen Sketch, in dem Du 2 Taster anschließt und deren Betätigung auf dem seriellen Monitor ausgibst.
Daran klemmt es bei Dir derzeit und da ist es einfacher, nur diesen Teil zu bauen und auszutesten.

Außerdem kommt mir folgende Zeile sehr merkwürdig vor:
Code:
(strcmp(topic,"/hooks/devices/0/SensorData/Temperatur") == 0);

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.04.2018, 13:33
Beitrag #3
RE: hilfe bei callback ausgabe per knopfdruck
(15.04.2018 12:43)Tommy56 schrieb:  Was Du mit den Tastern erreichen willst, habe ich nicht wirklich verstanden.

Lass doch erst mal die anderen Sachen weg und baue nur einen kleinen Sketch, in dem Du 2 Taster anschließt und deren Betätigung auf dem seriellen Monitor ausgibst.
Daran klemmt es bei Dir derzeit und da ist es einfacher, nur diesen Teil zu bauen und auszutesten.

Außerdem kommt mir folgende Zeile sehr merkwürdig vor:
(strcmp(topic,"/hooks/devices/0/SensorData/Temperatur") == 0);

Gruß Tommy

1. Also wenn ich Taster 1 drücke will ich auf dem Display Temp u. Hum. aus küche anzeigen. Bei Taster 2 beim drücken Temp. u. Hum. aus flur anzeigen.

2. Den Tastersketch habe ich gemacht um die LOW und HIGH funktion zu sehen.

3. Falls du die zeile wegen temperatur meinst habe ich so umbenannt weil der Sensor Temperatur heißt um nicht durcheinander zu kommen.
Ein Sensor heißt Temperature und einer Temperatur
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.04.2018, 13:53
Beitrag #4
RE: hilfe bei callback ausgabe per knopfdruck
(15.04.2018 13:33)merz schrieb:  1. Also wenn ich Taster 1 drücke will ich auf dem Display Temp u. Hum. aus küche anzeigen. Bei Taster 2 beim drücken Temp. u. Hum. aus flur anzeigen.

2. Den Tastersketch habe ich gemacht um die LOW und HIGH funktion zu sehen.

3. Falls du die zeile wegen temperatur meinst habe ich so umbenannt weil der Sensor Temperatur heißt um nicht durcheinander zu kommen.
Ein Sensor heißt Temperature und einer Temperatur
Ich habe aber keinen Tastersketch gesehen. Taster fragt man im loop ab, nicht in irgendwelchen Callbacks, ebenso macht man lcd-Ausgaben direkt im Loop.
Der Callback ist für die Übertragung der Daten da, den sollte man nicht mit allem (un)möglichen Gerümpel vollstopfen.

Mit den Bezeichnungen kommst Du nicht durcheinander? Wenn Du meinst. Ich würde tempKueche und tempFlur als sinnvoller empfinden.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.04.2018, 14:08
Beitrag #5
RE: hilfe bei callback ausgabe per knopfdruck
Das hier war mein Taster Test.

Code:
int button_1 = 0;
int button_2 = 4;
int buttonstate = 0;

void setup() {
  Serial.begin (115200);
  pinMode (button_1, OUTPUT);

}

void loop() {
  buttonstate = digitalRead (button_1);
  if (buttonstate==HIGH){
    Serial.println (buttonstate);
    Serial.println ("Knopf ist gedrückt");
    delay (1000);
  }
  else if(buttonstate==LOW){
    Serial.println (buttonstate);
    Serial.println ("Knopf ist nicht Gedrückt");
    delay (1000);
  }

}

OK werde mal versuchen alles in loop zu verfrachten.
Ich verste halt noch immer nicht wann ich was wo abrufen muss.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.04.2018, 14:16
Beitrag #6
RE: hilfe bei callback ausgabe per knopfdruck
(15.04.2018 14:08)merz schrieb:  Das hier war mein Taster Test.

Code:
int button_1 = 0;
int button_2 = 4;
int buttonstate = 0;

void setup() {
  Serial.begin (115200);
  pinMode (button_1, OUTPUT);

}

void loop() {
  buttonstate = digitalRead (button_1);
  if (buttonstate==HIGH){
    Serial.println (buttonstate);
    Serial.println ("Knopf ist gedrückt");
    delay (1000);
  }
  else if(buttonstate==LOW){
    Serial.println (buttonstate);
    Serial.println ("Knopf ist nicht Gedrückt");
    delay (1000);
  }

}

OK werde mal versuchen alles in loop zu verfrachten.
Ich verste halt noch immer nicht wann ich was wo abrufen muss.
Wenn Du 2 Buttons auswerten willst, was Du hier nicht gemacht hast, müssen die Delay raus, denn in dieser Zeit macht der Arduino nichts weiter, kann also auch keine Taster abfragen.
Erweitere den Sketch mal auf 2 Buttons und schau Dir BlinkWithoutDelay an und verstehe es vollständig.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Brauche Hilfe bei Arrays mega-hz 23 770 10.07.2019 15:59
Letzter Beitrag: MartinZ
  Hilfe benötigt bei der folgenden Aufgabe hanneswave 10 401 01.07.2019 18:08
Letzter Beitrag: Wochenendprogrammierer
  For-Loop verschluckt Ausgabe am seriellen Monitor TimeMen 5 372 14.04.2019 17:59
Letzter Beitrag: Tommy56
  Oled 0.91 wechselnde Anzeige . Benötige hilfe MotD 6 695 24.03.2019 22:48
Letzter Beitrag: Bitklopfer
  Simon Says bzw. Senso - Spiel bitte Hilfe Riddle 3 565 15.03.2019 13:46
Letzter Beitrag: Tommy56
  Hilfe benötigt beim Verknüpfen von Klassen Batucada 7 650 02.03.2019 23:47
Letzter Beitrag: georg01
  Hilfe bei Formulierung der Frage Matt 3 650 23.02.2019 12:45
Letzter Beitrag: Tommy56
  Hilfe bei Fehlermeldung Badboy89 9 967 13.02.2019 15:23
Letzter Beitrag: Tommy56
Sad Neuling verzweifelt braucht Hilfe delay durch timer ersetzen Lois 1 721 06.02.2019 16:15
Letzter Beitrag: Tommy56
  Kann auf A.Uno nichts hochladen - Anfänger sucht Hilfe ardeche 25 1.853 21.01.2019 22:06
Letzter Beitrag: ardeche

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste