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
Kommunikation zwischen 2 Arduinos per APC-220
18.08.2014, 15:17
Beitrag #9
RE: Kommunikation zwischen 2 Arduinos per APC-220
Code:
if (unterprogrammtemperatur = false) {
Das ist kein Vergleich, sondern eine Zuweisung. Vergleich geht mit "=="

Von wegen goto: Schon im Grundstudium Informatik beweist man, dass man alles, was mit goto geht auch ohne goto machen kann.
Wenn Du mir ein kürzeres Stückchen Coding vorsetzt, das angeblich "goto" verwenden muss, dann kann ich das mal beispielhaft umbauen, aber Dein ganzes Programm ist mir zu lang.

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.08.2014, 16:02 (Dieser Beitrag wurde zuletzt bearbeitet: 18.08.2014 16:31 von Marc2014.)
Beitrag #10
RE: Kommunikation zwischen 2 Arduinos per APC-220
Hey Thorsten Wink

Ich Depp Blush hab das garnicht gesehen das es eine Zuweisung und kein vergleich war, das kommt davon wenn man zulange vorm laptop sitzt Tongue

Danke! Jetzt ändert sich die Farbe Cool

Wie würdest du an meiner Stelle von dem Ende des Anzeige_Status() zurück zum Main Screen springen?

//

Ok das glaube ich dir ja auch, aber ich hatte kein Grundstudium Informatik Big Grin

Ich hab das bei Beispielen des 3,2 Touch LCD gesehen und so übernommen also das
goto; (ich finde es auch nicht schön) aber was soll ich sagen? Ich bin Anfänger und kenne vieles noch nicht und habe auch nicht die Erfahrung ich dachte wenn das im BSP des LCD's mit goto realisiert ist dann sollte ich das besser so übernehmen Smile

Lieber wäre es mir auch ohne zusätzliche gefühlte 100000 Zwischensprünge das verwirrt umso mehr Smile

Gruß Marc

Hab es geschafft Wink

Hab übersehen das ich das : l_1_screen(l_1_menu); vergessen hatte unter das Ende des Anzeige_Status() zu schreiben... jetzt klappt alles.

Auch das einlesen über die Serielle Smile

Gruß @ all

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.08.2014, 16:58
Beitrag #11
RE: Kommunikation zwischen 2 Arduinos per APC-220
(18.08.2014 16:02)Marc2014 schrieb:  Wie würdest du an meiner Stelle von dem Ende des Anzeige_Status() zurück zum Main Screen springen?
Das verstehe ich nicht. Wenn die Funktion Anzeige_Status() abgearbeitet ist, dann geht das System zurück zum Punkt direkt nach dem Aufruf. D.h. wir sind am Ende von Status(). Das ist dann auch fertig und es geht dort weiter, wo Status() aufgerufen wurde. Das sollte dann do_Unterprogramme() sein. Das gleiche Spiel wieder, also sind wir jetzt in l_1_screen().
Dort sind wir jetzt in einer Endlosschleife, außer Button 4 wird gedrückt. Das ist nicht gut. Die einzige "Endlosschleife" sollte darin bestehen, dass loop() immer wieder aufgerufen wird (vom System, nicht von Dir).
Das "goto start" in loop() ist total unnötig, da loop() sowieso immer wieder aufgerufen wird.

Zitat:ich dachte wenn das im BSP des LCD's mit goto realisiert ist dann sollte ich das besser so übernehmen Smile
Regel 1: Wenn etwas mit goto realisiert ist, dann willst Du das nicht übernehmen.
Regel 2: ...mit delay() wahrscheinlich auch nicht.

Zitat:Hab übersehen das ich das : l_1_screen(l_1_menu); vergessen hatte unter das Ende des Anzeige_Status() zu schreiben... jetzt klappt alles.
Im Endeffekt wird Anzeige_Status() vom l_1_screen() aufgerufen. Du machst Dir damit also eine endlose Rekursion. Das klappt eine Weile, aber irgendwann ist der Stack voll und es überschreibt Dir Deine Speicherbereiche. Dann kommen ganz komische Fehlerzustände, bevor gar nichts mehr geht.
Nein, das Problem ist, dass l_1_screen() eine Endlosschleife produziert.

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.08.2014, 18:57
Beitrag #12
RE: Kommunikation zwischen 2 Arduinos per APC-220
Wahrscheinlich hätte ich wirklich das BSP mit den goto Anweisungen nicht als Basis nehmen sollen....

Werde ich mir für die Zukunft merken keine goto und delay() vermeiden. Smile


Ich habe jetzt folgendes hinbekommen:

1.)
Basisstation 1 verarbeitet die Befehle vom Touch+Mega kommend für die Unterprogramme in der Basisstation 1.

2.)
Basisstation 1 Antwortet auf die "Status" Anfrage des Touch+Mega mit der real aktiven
Zahlenkombination (zb. 0000 oder 1000).

Folgende Fehler habe ich jedoch noch:

Auf dem Touch wird das Fenster Anzeige_Status() nicht geöffnet da irgendetwas mit dem Empfang der Daten nicht passt ( ich denke ein Zeitliches Problem ) da ich ja "Status" sende (an die Basisstation 1) und kurz drauf die Zahlen an dem touch+mega als Antwort ankommen. (evtl. kommt da "Status1000" an anstatt nur der Zahlen "1000").

Wenn ich das Touch+Mega nur per Terminal teste gehen ja alle Anzeigen perfekt (mittlerweile Temperatur, Regen, Alarm) alle mit 2 Farben (grün/rot) ( aktiv /deaktiv).


Hier der code für Basisstation 1:

Code:
// Homecontrol Basisstation 1        Version 2.2 Beta

// Programm für Basisstation 1 mit APC-220, I2C BUS, DS18B20 Temp Sensor, LDR Sensor, Regensensor, 433mhz Sensoren, Alarmanlage.
// Die Meldungen für Regen und Temperaturüberschreitung wird nur bei Zustandsänderung übertragen.
// Regenerkennung nach Zustandsänderung.
// Erkennung der 4 Fernbedienungen der Alarmanlage. ( Out arm, Disarm, Home arm, Alarm).
// Merkt sich die Befehle die an die Alarmanlage gesendet wurden.
// Merkt sich welches Unterprogramm gewünscht wird und schaltet es dementsprechend aktiv / inaktiv.
// Kommunikation zwischen Handsteuerung Touch 1 & Basisstation 1
// Delay + ohne println am ende für ststuaabfragen *

//################################################################################​​​##############################################################################​#​#​###########################################

char buffer1;                       // Eingabe Zeichenpuffer  ( Buchstaben oder Wörter oder Zahlen ).
String command = "";                // GesamtString von SerialRead

//################################################################################​​​##############################################################################​#​#​###########################################

boolean unterprogrammalarmanlage = false; // Merker Unterprogramm "alarmanlage" aktiv / deaktiv.    

boolean outarm   = false;          // Merker Status "outarm"
boolean disarm   = false;          // Merker Status "disarm"
boolean homearm  = false;          // Merker Status "homearm"
boolean alarm    = false;          // Merker Status "alarm"

//################################################################################​​​##############################################################################​#​#​###########################################

int empfangen;                      // Speicher für die Speicherung im "loop" Ablauf der seriellen Daten.
boolean t_gesendet = false;         // Merker "T" gesendet.
boolean r_gesendet = false;         // Merker "R" gesendet.

//################################################################################​​​##############################################################################​#​#​############################################

boolean unterprogrammlicht = false; // Merker Unterprogramm "licht" aktiv / deaktiv.    
                                                                                                                              
const int lichtMin = 200;           // LDR Sensor minimum Wert.                                                                
const int lichtMax = 800;           // LDR Sensor maximum Wert.

//################################################################################​​​##############################################################################​#​#​############################################

boolean unterprogrammregen = false; // Merker Unterprogramm "regen" aktiv / deaktiv.    

const int regenMin = 400;           // RegenSensor minimum Wert.
const int regenMax = 600;           // RegenSensor maximum Wert.



//################################################################################​​​##############################################################################​#​#​############################################

boolean unterprogrammtemperatur = false;

//################################################################################​​​##############################################################################​#​#​############################################



#include <OneWire.h>                 // Library einbinden.

#include <DallasTemperature.h>       // Library einbinden.

#define ONE_WIRE_BUS 10              // Digitalport Pin "10" für oneWire_Bus.

OneWire ourWire(ONE_WIRE_BUS);       // Inistalisiere oneWire.

DallasTemperature sensors(&ourWire); // Dallas Temperatur Library für Nutzung der oneWire Library vorbereiten.

//################################################################################​​​################################################

#include <RCSwitch.h>                // Library einbinden.

RCSwitch mySwitch = RCSwitch();  

// Fernbedienung (01)             = ID :              //  2086336 Out arm,  2086156 disarm,  2086147 Home arm,  2086192 Alarm.
// Fernbedienung (02)             = ID :              // 15826368 Out arm, 15826188 disarm, 15826179 Home arm, 15826224 Alarm.
// Fernbedienung (03)             = ID :              //  1377728 Out arm,  1377548 disarm,  1377539 Home arm,  1377584 Alarm.
// Fernbedienung (04)             = ID :              // 13043648 Out arm, 13043468 disarm, 13043459 Home arm, 13043504 Alarm.



// Pir 1 (Zone01)             = ID : 16773461         // ID des Bewegungsmelders 1  Wohnzimmer Oma       ( 433Mhz ID Code ).
// Pir 2 (Zone02)             = ID : 16774485         // ID des Bewegungsmelders 2  Oma Flur             ( 433Mhz ID Code ).
// Pir 3 (Zone04)             = ID : xxxxxxxxx        // ID des Bewegungsmelders 3                       ( 433Mhz ID Code ).
// Pir 4 (Zone05)             = ID : xxxxxxxxx        // ID des Bewegungsmelders 4                       ( 433Mhz ID Code ).

// Fensterkontakt 1 (Zone03)  = ID : 16776533         // ID des Fensterkontakt's 1 Fensterkontakt Oma SZ ( 433Mhz ID Code ).


//################################################################################​​​################################################

// #include <Wire.h>                // Library einbinden.               !!! WIRD MOMENTAN NICHT VERWENDET !!!
// #include "RTClib.h"              // Library einbinden.

// RTC_DS1307 RTC;      

// (now.year() , (now.month() , (now.day() , (now.hour() , (now.minute() , (now.second() .   // Mögliche Abfragen.

//################################################################################​​​################################################





//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


  void setup() {    
    
    
    sensors.begin();                            // oneWire Sensoren einschalten ( bsp. Dallas Temperatur).

    pinMode(7, OUTPUT);                         // Led Status (grün) 3mm. (Im Gehäuse).
    
    Serial.begin(9600);                         // Serielle Schnittstelle instalisieren mit Baudrate 9600. (Wird von APC-220 genutzt falls kein PC angeschlossen (USB) ist.
    
    // digitalWrite(7, HIGH);                      // System Bereit Led "ON".
    

    mySwitch.enableReceive(0);                  // Receiver an inerrupt Eingang 0 => (pin #2). ( FÜR RCSWITCH Empfänger) oder 433MhZ Sensoren zb. Pir Melder, 433 Mhz Fernbedinungen usw.

    // Wire.begin();                            // I2C für RTC UHR einschalten. !!! MOMENTAN NICHT VERWENDET !!! ///////
  
    // RTC.begin();                             // RTC starten. // !!! MOMENTAN NICHT VERWENDET !!! ///////
  
    }

  
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


void temperatur() {
  
      // Serial.println("Temperatur.....ANFANG...");               // DEBUG INFO
  
        digitalWrite(7, HIGH);                                   // DEBUG - System Bereit Led "ON".
       delay(2500);
       digitalWrite(7, LOW);                                     // DEBUG - System Bereit Led "ON".

  
  
    //  Serial.println("Temperaturprogrammaktiv");                 // DEBUG INFO
  
            
  
  
  
   sensors.requestTemperatures();                  // Temperatur abfragen.

   // Serial.print(sensors.getTempCByIndex(0) );   // (für DEBUG) Temperatur des Sensors mit dem Index (ID) "0" über die Serielle Schnittstelle ausgeben.
    
   // Serial.println(" Grad Celsius");             // (für DEBUG) Über die Serielle Schnittstelle "xxxxxxxxxxxxxx" ausgeben. Bsp: Grad Celsius.
  
     if (sensors.getTempCByIndex(0) > 32.00) {     // If Anweisung: ist die gemessene Temperatur größer als "Wert hinter > xx.xx dann Anweisung ansonsten Anweisung.
      
        if (!t_gesendet) {
        Serial.println("T");                       // Anweisungsinfo (T) = Temperatur über 30,00 Grad ! weiterleitung an Spark Core mit ID 1 .
        t_gesendet = true;
         }
        }  
        
  
   else {
        
        t_gesendet = false;
    
        }
        
       // Serial.println("TEmperatur:::ENDE..");   // DEBUG INFO
  
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


void licht() {
  
     // Serial.print("anfanglicht");                             // DEBUG INFO
  
   int sensorReading = analogRead(A0);                           // Sensor am analog port 0 lesen
  
  
   int range = map(sensorReading, lichtMin, lichtMax, 0, 3);     // umwandeln in 4 Bereiche

  
   switch (range) {                                              // Bereich erkennen
    
    case 0:                                                      // Aktion 0
      
      Serial.println("0");                                       // DEBUG Ausgabe
      
     delay(1000);
     break;
    
    
    case 1:                                                      // Aktion 1
    
      Serial.println("1");                                       // DEBUG Ausgabe

     delay(1000);
     break;
    
    case 2:                                                      // Aktion 2
    
      Serial.println("2");                                       // DEBUG Ausgabe

     delay(1000);
     break;
    
     case 3:                                                     // Aktion 3
    
      Serial.println("3");                                       // DEBUG Ausgabe

     delay(1000);
     break;
    
    
     delay(1);                                                   // pause zur Stabilität
    
      // Serial.println("Ende-Licht");                           // DEBUG INFO
  
     }
   }
  
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
  void regen() {
    
   int sensorReading = analogRead(A1);                           // Regen-Sensor am Analog Port "1" lesen.
  
   // Serial.println(analogRead(A1));                            // (für DEBUG) Zur Kontrolle des Analogwertes für "regen" . (einfach auskommentieren).
  
  
   int regen = map(sensorReading, regenMin, regenMax, 0, 2);     // umwandeln in 3 Bereiche.

  
  switch (regen) {                                               // Bereich erkennen.
    
   case 0:                                                       // Aktion 1
  
    delay(1000);
    break;
    
     case 1:                                                     // Aktion 2

      delay(1000);
      break;
      
     case 2:                                                     // Aktion 3
    
   if  (!r_gesendet) {
        Serial.println("R");                                     // Anweisungsinfo (R) = Es hat angefangen zu regnen !
        r_gesendet = true;
          }
          
  
      else {
        
        r_gesendet = false;
    
        }
    

     delay(1000);
      break;
    
   }
  }
  

  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


  
  void rc_switch() {                                   // Alarm
    
       if (mySwitch.available()) {                     // Wurde ein Signal empfangen dann...
      
       int value = mySwitch.getReceivedValue();
    
    

           if (mySwitch.getReceivedValue() == 2086336 || mySwitch.getReceivedValue() == 15826368 || mySwitch.getReceivedValue() == 1377728 || mySwitch.getReceivedValue() == 13043648) {      // Out Arm
      
      
      // Serial.print( mySwitch.getReceivedValue() );   // (für DEBUG) Ausgabe des Empfangenen Wertes.
        
          
          if  (!outarm) {                              // ! = nicht
        // Serial.println("outarm on");                // DEBUG INFO              
        outarm = true;                                
          }
          
     else {
         // Serial.println("outarm off");              // DEBUG INFO                    
        outarm = false;                                
    
     }

          
          
      
    } else if (mySwitch.getReceivedValue() == 2086156 || mySwitch.getReceivedValue() == 15826188 || mySwitch.getReceivedValue() == 1377548 || mySwitch.getReceivedValue() == 13043468) {      // Disarm
      
        // Serial.print( mySwitch.getReceivedValue() );
          
          
           if  (!disarm) {                             // ! = nicht
               // Serial.println("disarm on");         // DEBUG INFO                    
               disarm = true;                                
               }
          
           else {
               // Serial.println("disarm off");        // DEBUG INFO                    
                disarm = false;                                
    
               }
    
    
    
    } else if (mySwitch.getReceivedValue() == 2086147 || mySwitch.getReceivedValue() == 15826179 || mySwitch.getReceivedValue() == 1377539 || mySwitch.getReceivedValue() == 13043459) {      // Home Arm
      
      // Serial.print( mySwitch.getReceivedValue() );
          
          
           if  (!homearm) {                            // ! = nicht
               // Serial.println("homearm on");        // DEBUG INFO                  
               homearm = true;                                
               }
          
           else {
              // Serial.println("homearm off");        // DEBUG INFO                  
               homearm = false;                              
    
               }
    
    }
    
      else if (mySwitch.getReceivedValue() == 2086192 || mySwitch.getReceivedValue() == 15826224 || mySwitch.getReceivedValue() == 1377584 || mySwitch.getReceivedValue() == 13043504) {      // Alarm
      
       // Serial.print( mySwitch.getReceivedValue() );
          
          
           if  (!alarm) {                              // ! = nicht
                // Serial.println("alarm on");         // DEBUG INFO                  
               alarm = true;                                  
               }
          
           else {
                // Serial.println("alarm off");        // DEBUG INFO                  
               alarm = false;                                
    
               }
    
     }
    
      else if (mySwitch.getReceivedValue() == 16773461) {     // In Zone 01 hat der Pir-Sensor ausgelöst!
      
               // Serial.print("Zone01");                     // DEBUG INFO
    
               }
    
      else if (mySwitch.getReceivedValue() == 16774485) {     // In Zone 02 hat der Pir-Sensor ausgelöst!
      
              // Serial.print("Zone02");                      // DEBUG INFO
    
               }
    
      else if (mySwitch.getReceivedValue() == 16776533) {     // In Zone 03 hat der Fenster-Sensor ausgelöst!
      
              // Serial.print("Zone03");                      // DEBUG INFO
    
               }
    
      else if (mySwitch.getReceivedValue() == 16777055) {     // In Zone 04 hat der Pir-Sensor ausgelöst!
      
              // Serial.print("Zone04");                      // DEBUG INFO
      
               }
    
      else if (mySwitch.getReceivedValue() == 16777055) {     // In Zone 05 hat der Pir-Sensor ausgelöst!
      
               // Serial.print("Zone05");                     // DEBUG INFO
    
               }
    
  
               delay(50);
    
               mySwitch.resetAvailable();                     // rcswitch "reset" der ankommenden Daten, um bereit für neue Daten zu sein.
    

    }
  }
  
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
  
  
   void loop() {
    
       //  Serial.println("loop_anfang");                     // DEBUG INFO
        
    
               if (unterprogrammtemperatur) {
        
                  temperatur();
        
                  }
                  
                  
               if (unterprogrammlicht) {
        
                  licht();
        
                  }
                  
                  
               if (unterprogrammregen) {
        
                  regen();
        
                  }
                  
                  
               if (unterprogrammalarmanlage) {
        
                  rc_switch();
                  
                  }
    
  
    
  
               command = "";

        while (Serial.available() > 0) {
      
              buffer1 = Serial.read();
    
              delay(10);                                         // Ohne das Delay werden nur einzelne Zeichen gelesen.
    
              // Serial.print(buffer1);                          // DEBUG INFO Nur als Hilfe, wenn benötigt auskommentieren. ( Zeigt die Daten im "buffer1" an. ( werden über die Serielle Schnittstelle ausgegeben).
    
              command.concat(buffer1);
    
    }
  
  
  
  
  
        if (command == "Status") {                               // Statusanfrage von zb. Handsteuerung Touch 1
          
          
          if ((((unterprogrammtemperatur == false) && (unterprogrammregen == false) && ( unterprogrammalarmanlage == false ) && ( unterprogrammlicht == false)))) {
            
            delay(500);
            
                 Serial.print("0000");
          
          
          }
          
          if ((((unterprogrammtemperatur == true) && (unterprogrammregen == false) && ( unterprogrammalarmanlage == false ) && ( unterprogrammlicht == false)))) {
            
                        delay(500);

                 Serial.print("1000");

          
          }
          
          if ((((unterprogrammtemperatur == true) && (unterprogrammregen == true) && ( unterprogrammalarmanlage == false ) && ( unterprogrammlicht == false)))) {
            
                        delay(500);

                 Serial.print("1100");

          
          }
          
          if ((((unterprogrammtemperatur == true) && (unterprogrammregen == true) && ( unterprogrammalarmanlage == true ) && ( unterprogrammlicht == false)))) {
            
                        delay(500);

            
                 Serial.print("1110");

          
          }
          
          if ((((unterprogrammtemperatur == true) && (unterprogrammregen == true) && ( unterprogrammalarmanlage == true ) && ( unterprogrammlicht == true)))) {
            
                        delay(500);

            
                 Serial.print("1111");

          
          }
      
  
      }
  
  
  
  
  
  
  
  
  
  
  
  
  
  
         if (command == "Temperatur") {
                
                if  (!unterprogrammtemperatur) {                 // ! = nicht
                
                 // Serial.println("Temperatur_on");             // DEBUG INFO                    
                unterprogrammtemperatur = true;                  
              
                 } else {
                  
                 // Serial.println("Temperatur_off");            // DEBUG INFO                          
                 unterprogrammtemperatur = false;                
    
                 }
          }  
          
  


          if (command == "Regen") {
                
                if  (!unterprogrammregen) {                       // ! = nicht
                
               // Serial.println("Regen_on");                     // DEBUG INFO      
                unterprogrammregen = true;                
              
                 } else {
                  
               // Serial.println("Regen_off");                    // DEBUG INFO
                 unterprogrammregen = false;                
    
                 }
    
           }  
          
          
    
           if (command == "Alarm") {
                
                if  (!unterprogrammalarmanlage) {                  // ! = nicht
                
                 // Serial.println("Alarmanlage_on");              // DEBUG INFO  
                unterprogrammalarmanlage = true;                
                
                } else {
                  
                 // Serial.println("Alarmanlage_off");             // DEBUG INFO          
                unterprogrammalarmanlage = false;                
    
                }
                
          }  
                
                
                
            if (command == "Licht") {
                
                if  (!unterprogrammlicht) {                       // ! = nicht
                
                 // Serial.println("Licht_on");                   // DEBUG INFO        
                unterprogrammlicht = true;                
              
                 } else {
                  
                 // Serial.println("Licht_off");                  // DEBUG INFO          
                 unterprogrammlicht = false;                
    
                 }
                
           }  
          
          // Serial.println("loop_---ENDE");                      // Debug INFO
    }

    
  

    
// END PROGRAM ////////////////////////////// END PROGRAM ////////////////////////////// END PROGRAM ////////////////////////////// END PROGRAM ////////////////////////////// END PROGRAM //////////////////////////////



Und hier für den Mega+Touch:

Code:
// Homecontrol Handsteuerung Touch 1

// Version 2.3
//

// ACHTUNG: Befehle ohne Zeilenende (Serial.print(""); verwenden und nicht Serial.println(""); ! Auch auf die Richtige Serielle Schnittstelle achten! (zb. Serial = DEBUG oder Serial1 = APC-220).
// Bitte auch richtige Befehle verwenden( Temp oder Temperatur) als BSP.



// #define imagedatatype  unsigned int                                                           // Funktion noch unbekannt?!


// ################################################################################​################################################################################​#############################################################
// ################################################################################​##                     MERKER                          ###########################################################################​##########################

boolean unterprogrammalarm = false;        // Merker Unterprogramm "alarmanlage" aktiv / deaktiv.    
boolean outarm   = false;                  // Merker Status "outarm".
boolean disarm   = false;                  // Merker Status "disarm".
boolean homearm  = false;                  // Merker Status "homearm".
boolean alarm    = false;                  // Merker Status "alarm".
boolean unterprogrammlicht = false;        // Merker Unterprogramm "Licht" aktiv / deaktiv.    
boolean unterprogrammregen = false;        // Merker Unterprogramm "Regen" aktiv / deaktiv.    
boolean unterprogrammtemperatur = false;   // Merker Unterprogramm "Temperatur" aktiv / deaktiv.  // ******************************* DIESER MERKER SOLLTE SICH EIGENTLICH ÄNDERN UND DAS FARBZEICHEN IM ANZEIGE-STATUS ÄNDERN****


// ################################################################################​################################################################################​#############################################################

char zbuffer;                       // Eingabe Zeichenpuffer  ( Buchstaben oder Wörter oder Zahlen ), Serielle1 Funkverbindung APC-220.
String command = "";                // GesamtString von Serial1 read.

// ################################################################################​################################################################################​#############################################################







#include <UTFT.h>
#include <UTouch.h>
#include <UTFT_Buttons.h>

extern uint8_t BigFont[];                                                                        // Schriftgröße.
extern uint8_t SmallFont[];                                                                      // Schriftgröße.


UTFT          myGLCD(ITDB32S,38,39,40,41);                                                       // Pin Belegung LCD.
UTouch        myTouch(6,5,4,3,2);                                                                // Pin Belegung TOUCH.

UTFT_Buttons  myButtons(&myGLCD, &myTouch);

byte l_1_menu=' ';                                                                               // Byte

unsigned int main_but1, main_but2,main_but3,main_but4,main_but5,main_but6,main_but7;             // Mögliche Buttons (Auswahl-Liste).

int m_press,l_press;                                                                             // ???

void setup() {
  
  Serial.begin(9600);                                                                            // Serielle Schnittstelle PC / DEBUG.
  Serial1.begin(9600);                                                                           // Serielle Schnittstelle APC 220 Funkverbindung.
  

  myGLCD.InitLCD();                                                                              // LCD instalisieren.
  myGLCD.clrScr();                                                                               // Bildschirm löschen.
  myGLCD.setFont(BigFont);                                                                       // Größe einstellen.
  
  myGLCD.setColor(VGA_BLACK);                                                              
  myGLCD.setBackColor(VGA_WHITE);
  
  myTouch.InitTouch();                                                                           // Touch instalisieren.
  myTouch.setPrecision(PREC_LOW);                                                                // Touch Empfindlichkeit festlegen.
  
  myButtons.setTextFont(BigFont);                                                                // Schriftgröße einstellen.
  myButtons.setButtonColors(VGA_BLACK,VGA_GRAY,VGA_WHITE,VGA_RED,VGA_GRAY);                      // Auswählbare Farben für Buttons.
  Serial.println("                ");
  Serial.println("Homecontrol 1.0");                                                             // Startmessage. DEBUG PC.
  
  
  
  
  
}


void Status() {                                                                                 // Unterprogramm zur Statusabfrage der Basisstation 1.


     Serial1.print("Status");                                                                   // ACHTUNG: (DEBUG oder APC) Richtige Schnittstelle! Statusabfrage an Basisstation 1 über APC-220 Funkmodul.
    
     delay(100);
  
  
     command = "";
    
    while (Serial1.available() > 0) {
      
      
    zbuffer = Serial1.read();
    
    delay(10);                                                                                   // Ohne delay werden nur einzelne Zeichen gelesen.
    
    command.concat(zbuffer);
    
}
  
    if(command != "") {                                                                          // wenn Zeichen im String dann auswerten.
  
    
    
   if(command != "1000" && command != "1100" && command != "1110" && command != "1111" ) {      // Statusmessage (0000) für : Temp off, Regen off, Alarm off, Licht off.

        Serial.println("alle aus");                                                               // DEBUG MESSAGE
                
                                  
                unterprogrammtemperatur = false;  
                unterprogrammregen      = false;
                unterprogrammalarm      = false;
                unterprogrammlicht      = false;  
        
    }
    
    
    if(command == "1000" && command != "1100" && command != "1110" && command != "1111" ) {      // Statusmessage (1000) für : Temp on, Regen off, Alarm off, Licht off.

        Serial.println("Temp on");                                                               // DEBUG MESSAGE
                
                                  
                unterprogrammtemperatur = true;  
                unterprogrammregen      = false;
                unterprogrammalarm      = false;
                unterprogrammlicht      = false;  
        
    }
    
    if(command != "1000" && command == "1100" && command != "1110" && command != "1111" ) {      // Statusmessage (1100) für : Temp on, Regen on, Alarm off, Licht off.

        Serial.println("Temp & Regen on");                                                       // DEBUG MESSAGE
        
                unterprogrammtemperatur = true;  
                unterprogrammregen      = true;
                unterprogrammalarm      = false;
                unterprogrammlicht      = false;
    }
    
    if(command != "1000" && command != "1100" && command == "1110" && command != "1111" ) {      // Statusmessage (1110) für : Temp on, Regen on, Alarm on, Licht off.

        Serial.println("Temp & Regen & Alarm on");                                               // DEBUG MESSAGE
        
                unterprogrammtemperatur = true;  
                unterprogrammregen      = true;
                unterprogrammalarm      = true;
                unterprogrammlicht      = false;
    }
    
    if(command != "1000" && command != "1100" && command != "1110" && command == "1111" ) {      // Statusmessage (1111) für : Temp on, Regen on, Alarm on, Licht on.

        Serial.println("Temp & Regen & Alarm & Licht on");                                                               // DEBUG MESSAGE
        
                unterprogrammtemperatur = true;  
                unterprogrammregen      = true;
                unterprogrammalarm      = true;
                unterprogrammlicht      = true;
    }
    
    else {
      
    }
    
      Anzeige_Status();                                                                          // Springe ins Unterprogramm -> Anzeige_Status();

  }                                                              
}
  
          
  


void loop() {                                                                                    // loop

  start:                                                                                        

  Serial.println("Hauptmenu");                                                                   // DEBUG Message.
  main_but1 = myButtons.addButton (10,50,300,30,"Status");
  main_but2 = myButtons.addButton (10,80,300,30,"Steuern");
  main_but3 = myButtons.addButton (10,110,300,30,"Einstellungen");

  myButtons.drawButtons();                                                                       // Zeichne Buttons.
  text();
  while(1)
  {
    if (myTouch.dataAvailable() == true)                                                         // Sobald am Touch Daten anliegen (Touch gedrückt).
    {
      m_press = myButtons.checkButtons();                                                        // überprüfe welcher Button gedrückt wurde.
      
      if (m_press==main_but1) l_1_menu='A';                                                      // Wenn Button gedrückt dann springe in Untermenü....
      if (m_press==main_but2) l_1_menu='B';                                                      // Wenn Button gedrückt dann springe in Untermenü....
      if (m_press==main_but3) l_1_menu='C';                                                      // Wenn Button gedrückt dann springe in Untermenü....
      
      l_1_screen(l_1_menu);
      goto start;

    }
  }
}


void l_1_screen(byte l_1_menu)
{
  myButtons.deleteAllButtons();
start2:
  switch (l_1_menu)
  {
  case 'A':
    Serial.println("Untermenu 1");                                             // DEBUG Message.
    main_but1=myButtons.addButton(10,50,300,30,"Sensoren");                    // Untermenü 1  
    main_but2=myButtons.addButton(10,80,300,30,"Wetter");                      //
    main_but3=myButtons.addButton(10,110,300,30,"Unterprogramme");                       //
    break;
    
  case 'B':
    Serial.println("Untermenu 2");                                             // DEBUG Message.
    main_but1=myButtons.addButton(10,50,300,30,"Programme");                   // Untermenü 2
    main_but2=myButtons.addButton(10,80,300,30,"Funksteckdosen");              //
    main_but3=myButtons.addButton(10,110,300,30,"Frei_1");                     //
    break;
    
  case 'C':
    Serial.println("Untermenu 3");                                             // DEBUG Message.
    main_but1=myButtons.addButton(10,50,300,30, "Frei_2");                     // Untermenü 3
    main_but2=myButtons.addButton(10,80,300,30, "Frei_3");                     //
    main_but3=myButtons.addButton(10,110,300,30,"Frei_4");                     //
    break;
    
  }
  main_but4 = myButtons.addButton (10,140,300,30,"Zurueck");                   // Zurück zu Hauptmenü
  myButtons.drawButtons();
  text();
  while(1)
  {
    if (myTouch.dataAvailable() == true)
    {
      myButtons.drawButtons();
      l_press = myButtons.checkButtons();
      if (l_1_menu=='A')
      {
        if (l_press==main_but1)
        {
          do_Sensoren();
          goto start2;
        }
        if (l_press==main_but2)
        {
          do_Wetter();
          goto start2;
        }
        if (l_press==main_but3)
        {
          do_Unterprogramme();
          // goto start2;
        }
      }
      if (l_1_menu=='B')
      {
        if (l_press==main_but1)
        {
          do_Programme();
          goto start2;
        }
        if (l_press==main_but2)
        {
          do_Funksteckdosen();
          goto start2;
        }
        if (l_press==main_but3)
        {
          do_Frei_1();
          goto start2;
        }
      }
      if (l_1_menu=='C')
      {
        if (l_press==main_but1)
        {
          do_Frei_2();
          goto start2;
        }
        if (l_press==main_but2)
        {
          do_Frei_3();
          goto start2;
        }
        if (l_press==main_but3)
        {
          do_Frei_4();
          goto start2;
        }
      }
      if (l_press==main_but4) break;
    }
  }
  myButtons.deleteAllButtons();
  myGLCD.clrScr();
  return;
  
  
}
void do_Sensoren(){                                                         // Aufgerufenes Programm nach Tastendruck.
     int Sensoren_press;
     Serial.println("Sensoren");
}
void do_Wetter(){                                                           // Aufgerufenes Programm nach Tastendruck.
     int Wetter_press;
     Serial.println("Wetter");

}
void do_Unterprogramme(){                                                   // Aufgerufenes Programm nach Tastendruck.
     int Unterprogramme_press;
     Serial.println("Unterprogramme");
    
     Status();
    
}

void Anzeige_Status() {                           // In diesem Unterprogramm werden die aktuellen Zustände der "Unterprogramme" visualisiert.
  
   Serial.println("Anzeige_Status");               // DEBUG Message
  
  
  myGLCD.setFont(SmallFont);                       // Textgröße (SmallFont oder BigFont).

  myGLCD.setBackColor(VGA_BLACK);                  // Hintergrundfarbe.
  
  myGLCD.fillScr(VGA_BLACK);                       // Hintergrundfarbe LCD. Füllt den ganzen Bildschirm aus.
  
  
  
  
  if (unterprogrammtemperatur == false) {          // Wenn Unterprogrammtemperatur == aus? dann...
  
  myGLCD.setColor(VGA_RED);                        // Farbe des Rechtecks (gefüllte Farbe). Symbol.
  myGLCD.fillRoundRect(100, 22, 110, 32);          //
  
  }
  
  if (unterprogrammtemperatur == true) {           // Wenn Unterprogrammtemperatur == an? dann...
    
  myGLCD.setColor(VGA_GREEN);                      // Farbe des Rechtecks (gefüllte Farbe). Symbol.
  myGLCD.fillRoundRect(100, 22, 110, 32);          //
    
  }
  
  
  if ( unterprogrammregen == false) {              // Wenn Unterprogrammregen == aus? dann...
  
  myGLCD.setColor(VGA_RED);                        // Farbe des Rechtecks (gefüllte Farbe). Symbol.
  myGLCD.fillRoundRect(100, 52, 110, 62);          //
  }
  
  if ( unterprogrammregen == true) {               // Wenn Unterprogrammregen == an? dann...
  
  myGLCD.setColor(VGA_GREEN);                      // Farbe des Rechtecks (gefüllte Farbe). Symbol.
  myGLCD.fillRoundRect(100, 52, 110, 62);          //
  }
  
  if ( unterprogrammalarm == false) {              // Wenn Unterprogrammalarm == aus? dann...
  myGLCD.setColor(VGA_RED);                        // Farbe des Rechtecks (gefüllte Farbe). Symbol.
  myGLCD.fillRoundRect(100, 80, 110, 90);          //
  }
  
  if ( unterprogrammalarm == true) {               // Wenn Unterprogrammalarm == an? dann...
  myGLCD.setColor(VGA_GREEN);                      // Farbe des Rechtecks (gefüllte Farbe). Symbol.
  myGLCD.fillRoundRect(100, 80, 110, 90);          //
  }
  
  

  
  
  myGLCD.setColor(VGA_WHITE);                      // Farbe des Textes im Rechteck.
  myGLCD.setBackColor(VGA_BLACK);                  // Texthintergrund Farbe "Highlighting.
  
  myGLCD.print(" Temperatur", LEFT , 20);          // Text,  ORT: (LEFT, CENTER, RIGHT), Position 0 ist oben, 228 ist unten.
  myGLCD.print(" Regen",      LEFT , 50);          // Text,  ORT: (LEFT, CENTER, RIGHT), Position 0 ist oben, 228 ist unten.
  myGLCD.print(" Alarmanlage",LEFT , 78);          // Text,  ORT: (LEFT, CENTER, RIGHT), Position 0 ist oben, 228 ist unten.
  
    
    
    
    
    
    
     delay(10000);                                 // Pause zum Anzeigen des Status jedes einzelnen Unterprogrammes.
    
  
     myButtons.deleteAllButtons();                 // Alle Button's löschen.
     myGLCD.clrScr();                              // LCD löschen.
    
    
     l_1_screen(l_1_menu);                         // Rücksprung letztes Menü

    

}



void text()
{
  myGLCD.print("HOMECONTROL", 20, 200);                                                       // Angezeigter Name ("HOMECONTROL").
  myGLCD.setColor(VGA_BLACK);                                                                 // Textfarbe des Anzeigenamens.

}
void do_Programme(){                                                                          // Aufgerufenes Programm nach Tastendruck.
  int bilder_press;
  myButtons.deleteAllButtons();
  main_but1=myButtons.addButton(10,50,150,30,"Alarm");
  main_but2=myButtons.addButton(160,50,150,30,"Licht");
  main_but3=myButtons.addButton(10,80,150,30,"Regen");
  main_but4=myButtons.addButton(160,80,150,30,"Temp");
  main_but5=myButtons.addButton(10,110,150,30,"Frei_1");
  main_but6=myButtons.addButton(160,110,150,30,"Frei_2");
  main_but7=myButtons.addButton(10,140,300,30,"Zurueck");
  myButtons.drawButtons();
  text();
  while(1)
  {
    if (myTouch.dataAvailable() == true)
    {
      myButtons.drawButtons();
      bilder_press = myButtons.checkButtons();
      if (bilder_press==main_but1) delay(1), Serial1.print("Alarm");                        // Ausgabe über Serielle1 Schnittstelle an Funkmodul APC-220 für Verbindung zu Basisstation 1 (Unterprogrammsteuerung).

      if (bilder_press==main_but2) delay(1), Serial1.print("Licht");                        // Ausgabe über Serielle1 Schnittstelle an Funkmodul APC-220 für Verbindung zu Basisstation 1 (Unterprogrammsteuerung).
      
      if (bilder_press==main_but3) delay(1), Serial1.print("Regen");                     // Ausgabe über Serielle1 Schnittstelle an Funkmodul APC-220 für Verbindung zu Basisstation 1 (Unterprogrammsteuerung).

      if (bilder_press==main_but4) delay(1), Serial1.print("Temperatur");                        // Ausgabe über Serielle1 Schnittstelle an Funkmodul APC-220 für Verbindung zu Basisstation 1 (Unterprogrammsteuerung).

      if (bilder_press==main_but5) delay(1), Serial1.print("Frei_1");                        // Ausgabe über Serielle1 Schnittstelle an Funkmodul APC-220 für Verbindung zu Basisstation 1 (Unterprogrammsteuerung).

      if (bilder_press==main_but6) delay(1), Serial1.print("Frei_2");                       // Ausgabe über Serielle1 Schnittstelle an Funkmodul APC-220 für Verbindung zu Basisstation 1 (Unterprogrammsteuerung).

      if (bilder_press==main_but7) break;
    }
  }
  myButtons.deleteAllButtons();
  myGLCD.clrScr();
  return;  
}
void do_Funksteckdosen(){                                                                     // Aufgerufenes Programm nach Tastendruck.
  int Funksteckdosen_press;
  myButtons.deleteAllButtons();
  main_but1=myButtons.addButton(10,50,150,30,"Button");                            
  main_but2=myButtons.addButton(160,50,150,30,"Button");
  main_but3=myButtons.addButton(10,80,150,30,"Button");
  main_but4=myButtons.addButton(160,80,150,30,"Button");
  main_but5=myButtons.addButton(10,110,150,30,"Button");
  main_but6=myButtons.addButton(160,110,150,30,"Button");
  main_but7=myButtons.addButton(10,140,300,30,"Zurueck");
  myButtons.drawButtons();
  text();
  while(1)
  {
    if (myTouch.dataAvailable() == true)
    {
      myButtons.drawButtons();
      Funksteckdosen_press = myButtons.checkButtons();
      if (Funksteckdosen_press==main_but1) delay(10);
      if (Funksteckdosen_press==main_but2) delay(10);
      if (Funksteckdosen_press==main_but3) delay(10);
      if (Funksteckdosen_press==main_but4) delay(10);
      if (Funksteckdosen_press==main_but5) delay(10);
      if (Funksteckdosen_press==main_but6) delay(10);
      if (Funksteckdosen_press==main_but7) break;
    }
  }
  myButtons.deleteAllButtons();
  myGLCD.clrScr();
  return;  
}
void do_Frei_1(){                                                                             // Aufgerufenes Programm nach Tastendruck.
  int Frei_1_press;
  myButtons.deleteAllButtons();
  main_but1=myButtons.addButton(10,50,150,30,"Button");
  main_but2=myButtons.addButton(160,50,150,30,"Button");
  main_but3=myButtons.addButton(10,80,150,30,"Button");
  main_but4=myButtons.addButton(160,80,150,30,"Button");
  main_but5=myButtons.addButton(10,110,150,30,"Button");
  main_but6=myButtons.addButton(160,110,150,30,"Button");
  main_but7=myButtons.addButton(10,140,300,30,"Zurueck");
  myButtons.drawButtons();
  text();
  while(1)
  {
    if (myTouch.dataAvailable() == true)
    {
      myButtons.drawButtons();
      Frei_1_press = myButtons.checkButtons();
      if (Frei_1_press==main_but1) delay(10);
      if (Frei_1_press==main_but2) delay(10);
      if (Frei_1_press==main_but3) delay(10);
      if (Frei_1_press==main_but4) delay(10);
      if (Frei_1_press==main_but5) delay(10);
      if (Frei_1_press==main_but6) delay(10);
      if (Frei_1_press==main_but7) break;
    }
  }
  myButtons.deleteAllButtons();
  myGLCD.clrScr();
  return;  
}

void do_Frei_2() {                                                      // Aufgerufenes Programm nach Tastendruck.
  
}

void do_Frei_3() {                                                      // Aufgerufenes Programm nach Tastendruck.
  
}

void do_Frei_4() {                                                      // Aufgerufenes Programm nach Tastendruck.
  
}


Gruß Marc Wink

Shy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.08.2014, 19:41
Beitrag #13
RE: Kommunikation zwischen 2 Arduinos per APC-220
Hi,
ich kann mir nicht vorstellen, dass da sowas wie "Status1000" ankommt. Eigentlich sollte das Ding entweder empfangen oder senden, aber nicht beides gleichzeitig. Aber ich weiß auch nicht, was da jetzt falsch läuft. Die Programme sind einfach ein bisschen zu arg "von hinten durch die Brust...".
Ich würde hier als erstes mal das serielle Protokoll ändern. Das sollte man nicht per delay() machen, sondern einfach so lange Daten sammeln (non-blocking mit einer Funktion, die die Daten in eine statische/globale Variable schreibt), bis was sinnvolles zusammengekommen ist. ...und das dann verarbeiten.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Kommunikation über das WiFi-Shield Flap 3 230 07.11.2016 20:20
Letzter Beitrag: hotsystems
  Kommunikation Serial Monitor --> Arduino BennIY 7 352 24.05.2016 07:48
Letzter Beitrag: hotsystems
  USB-Kommunikation ADK hr3 0 278 12.04.2016 16:43
Letzter Beitrag: hr3
  I²C Kommunikation bricht ab chhec 1 344 19.01.2016 11:10
Letzter Beitrag: ardu_arne
  Zahlenformat bei Kommunikation mit zwei Arduinos Matthias_Arduino 5 632 07.01.2016 22:40
Letzter Beitrag: Bitklopfer
  Grundlagen zur UART Kommunikation gesucht... torsten_156 10 875 16.12.2015 22:26
Letzter Beitrag: Bitklopfer
  TWI Kommunikation überprüfen chhec 8 749 29.11.2015 18:09
Letzter Beitrag: rkuehle
  Datenübergabe zwischen Arduino Uno und ESP8266 bastelmichi 0 682 25.11.2015 16:46
Letzter Beitrag: bastelmichi
  Pause zwischen SPI.transfer's Zogrob 0 417 20.10.2015 08:51
Letzter Beitrag: Zogrob
  Float über I2C zwischen 2 Arduinos UNO Marduino_UNO 9 1.616 19.10.2015 09:09
Letzter Beitrag: Retian

Gehe zu:


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