Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Habe ich testweise, bringt aber leider keine Besserung.

    EDIT:
    Ich werde die Libraries mal auf den neusten Stand bringen und nochmal testen. Vielleicht fällt jemanden noch was ein, woran es liegen könnte.
    Zuletzt geändert von netzlaff; 11.11.2020, 15:43.

    Kommentar


      Zitat von Kunkrab Beitrag anzeigen
      Ok, wenn niemand antwortet, muss ich das selber tun 😉
      Mein Problem war, dass Uno und Nano beide ihr USB auf den RX/TX pins haben. Der USB chip hat offensichtlich soviel vom Eingangssignal "weggefressen", dass es nicht mehr für die Signalerkennung ausreichte. Ich hatte das dann mit dem Oszi auch gemessen, da blieben nur noch knapp 3 Volt übrig, von den 4.5V, die das TPUART liefert. Jetzt habe ich zwei Inverter eines 7404 TTL chips vor den RX input gehängt, und jetzt geht es. Das ist nicht wirklich eine praktikable Lösung, aber fixt das Problem. Die Lösung sind hoffentlich die Arduino Pro Minis, die demnächst kommen ...
      Hey,
      ich bin aktuell auch dabei mich mit dem Thema zu beschäftigen. Senden auf den Bus klappt, jedoch das Empfangen nicht.
      Ich hab einen Arduino Nano (5V), bei hm geht die RX LED an, jedoch anwtortet er nicht auf die Telegrame.
      Aus deinem Post oben und dem von Mag Gyver heißt es, dass der Arduino Nano von "Natur" aus nicht auf Leseanfragen antworten kann, da der USB-Chip dies verhindert?
      Und ma kann dies lösen indem man entweder einen 7404TTL vor dem RX hängt oder den CH340 auslötet und dann mit Hilfe eines USB-zu-TTL Konverter Moduls den Arduino beschreibt?
      Ein einfaches Ja reicht mir
      Gruß,
      Andreas

      Kommentar


        Hallo alle miteinander, habe wiedermal ein kleines problemchen. habe seit etlichen monaten die Siemens BCU mit ProMini und nem DHT22 am laufen und wollte nun endlich die geschichte in ein gehäuse basteln. Aus Platzmangel habe ich den Busankoppler zerlegt und wollte den Connector ablöten und habe dabei den TX zerstört :-(.
        Hat jemand einen Schaltplan davon oder weiß jemand an welcher stelle ich TX abgleifen kann.

        Danke im Vorfeld

        Kommentar


          Das dürfte die Standardbeschaltung sein, siehe Datenblatt vom TPUART2....-> Pin 21 am TPUART2.
          Zuletzt geändert von dreamy1; 20.12.2020, 20:25.
          Viele Grüße,
          Stefan

          DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

          Kommentar


            ich meinte an der Siemens BCU

            edit: hab^s ..... mein fehler

            edit 2:
            Noch eine Frage wenn ich einmal da bin und im thema stecke. Ich habe gelesen das nicht alle Arduinos auf "Anfragen" antworten können.
            Ich habe einen Pro-Mini im Einsatz und würde gern ein Relais daran betreiben und der Schaltbefehl kommt via KNX.
            Würde das gehen oder oder doch lieber Schaltaktor? Der Strom übers Relais ist auch nicht so groß (12V Türsummer für 5sek.)

            Danke
            Zuletzt geändert von Golfer; 20.12.2020, 22:07.

            Kommentar


              Auf jeden Fall potentialfrei bleiben...ich würde über einen Transistor/Mosfet/Optokoppler ein Relais schalten. Gibts fertige Bausteine in der Bucht.
              Viele Grüße,
              Stefan

              DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

              Kommentar


                Nochmal zum defektem TX Pin auf meiner Siemens Platine also am TPUART IC lässt es sich sehr bescheiden löten und aus Angst es völlig zu zerstören lasse ich es. Aber was sind das für 4 Kontakte (siehe Foto)

                ​​​​​​
                You do not have permission to view this gallery.
                This gallery has 1 photos.

                Kommentar


                  Das dürften die Testpads sein, mit denen Siemens im Q-Check die Funktion der Platine überprüft oder die Firmware reinschießt.
                  Viele Grüße,
                  Stefan

                  DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

                  Kommentar


                    Hatte gehofft das wäre die Schnittstelle .... Das hat mich beim zerlegen an das Nokia 32​​​10 erinnert ⚜

                    Werde wohl eine neue BCU bestellen


                    Danke
                    Zuletzt geändert von Golfer; 21.12.2020, 17:58.

                    Kommentar


                      Zitat von Golfer Beitrag anzeigen
                      Hatte gehofft das wäre die Schnittstelle
                      Das könnte schon sein dass da der TX dabei ist - das kannst Du doch einfach mit einem hochohmigen Multimeter durchklingeln.
                      Viele Grüße,
                      Stefan

                      DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

                      Kommentar


                        Delta6400
                        Zitat von Delta6400 Beitrag anzeigen
                        Und ma kann dies lösen indem man entweder einen 7404TTL vor dem RX hängt oder den CH340 auslötet und dann mit Hilfe eines USB-zu-TTL Konverter Moduls den Arduino beschreibt?
                        Das mit dem Auslöten habe ich nicht probiert, klingt aber auch nach einer Lösung (dann musst Du aber eine Alternative zum sketch-upload haben). Sicher gibt's noch andere Treiber als ein 7404, vielleicht ist das auch für den dann inoch vorhandenen CH340 ein Problem, dass sein Ausgang hochgezogen wird, hat aber bei mir funktioniert (wie auf dem Bild).

                        Kommentar


                          Moin,

                          Ich habe ein Problem mit KnxTpUart von ThorstenGehrig, anfangs hat alle Problemlos funktioniert als ich mein Sketch denn erweitert habe schafft die bib es wohl nicht mehr richtig die middleGroup per substring zu lesen. Somit generiert er immer eine 0 statt einer wie angegebenen 1.

                          Code:
                          #include <Arduino.h>
                          #include <KnxTpUart.h>
                          #include <EEPROM.h>
                          #include <Adafruit_NeoPixel.h>
                          #include <ColorConverterLib.h>
                          #define LED_STRIP_PIN 6
                          #define LED_PIN 13
                          #define NUMPIXELS 500
                          #define DEBUG_MODE false
                          Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, LED_STRIP_PIN, NEO_GRB + NEO_KHZ800);
                          KnxTpUart knx(&Serial1, "1.1.77");
                          boolean WohnzimmerTrafoState;
                          String WohnzimmerColorState;
                          String BadColorState;
                          char testListener[][20] = {
                            {1, 1, 1}
                          };
                          char listener[][20] = {
                              "6/1/1", //Wohnzimmer Schalten      0
                              "6/1/2", //Bad Schalten             1
                              "6/1/14", //Wohnzimmer Dimmen       2
                              "6/1/16", //Bad Dimmen              3
                              "6/1/20", //Wohnzimmer Color Schalten 4
                              "6/1/23", //Bad Color Schalten   5
                              "6/1/50" //Wohnzimmer Trafo Schalten 6
                          };
                          char statis[][20] = {
                              "6/4/1", //Wohnzimmer Status
                              "6/4/2", //Bad Status
                              "6/4/14", //Wohnzimmer Dimmen Status
                              "6/4/16", //Bad Dimmen Status
                              "6/4/20", //Wohnzimmer Color Status
                              "6/4/23", //Bad Color Status
                              "6/4/50" //Wohnzimmwe Trafo Status
                          };
                          void addingListener()
                          {
                            for (size_t i = 0; i < sizeof(listener) / sizeof(listener[0]); i++)
                            {
                              knx.addListenGroupAddress(listener[i]);
                            }
                            for (size_t i = 0; i < sizeof(statis) / sizeof(statis[0]); i++)
                            {
                              knx.addListenGroupAddress(statis[i]);
                            }
                          }
                          void readListener()
                          {
                            knx.groupRead(listener[6]);
                          }
                          boolean writeEEProm(byte index, byte value)
                          {
                            //only needed for short if
                            //disable by debug mode
                            if (!DEBUG_MODE)
                            {
                              EEPROM.write(index, value);
                            }
                            return true;
                          }
                          void checkEEPOM()
                          {
                            /* 
                            EEPROM 1 = Wohnzimmer State
                            EEPROM 2 = Wohnzimmer Brightness 
                            EEPROM 3 = Wohnzimmer R 
                            EEPROM 4 = Wohnzimmer G  
                            EEPROM 5 = Wohnzimmer B
                            EEPROM 10 = Bad State
                            EEPROM 11 = Bad Brightness 
                            EEPROM 12 = Bad R 
                            EEPROM 13 = Bad G  
                            EEPROM 14 = Bad B 
                            EERPOM 20 = Trafostate
                            */
                            delay(1000);
                            // Wohnzimmer EEProm write
                            EEPROM.read(1) == 255 && writeEEProm(1, 0);
                            EEPROM.read(2) == 255 && writeEEProm(2, 30);
                            EEPROM.read(3) == 255 && writeEEProm(3, 153);
                            EEPROM.read(4) == 255 && writeEEProm(4, 4);
                            EEPROM.read(5) == 255 && writeEEProm(5, 100);
                            //Bad EEProm write
                            EEPROM.read(10) == 255 && writeEEProm(10, 0);
                            EEPROM.read(11) == 255 && writeEEProm(11, 30);
                            EEPROM.read(12) == 255 && writeEEProm(12, 153);
                            EEPROM.read(13) == 255 && writeEEProm(13, 4);
                            EEPROM.read(14) == 255 && writeEEProm(14, 100);
                            // Trafo EEPROM write
                            EEPROM.read(20) == 255 && writeEEProm(20, 0);
                          }
                          void initilaizeStates()
                          {
                            //Wohnzimmer Trafo State
                            WohnzimmerTrafoState = EEPROM.read(20) == 0 ? false : true;
                            EEPROM.read(20) == 0 ? knx.groupWriteBool(listener[6], false) : knx.groupWriteBool(listener[6], true);
                            
                            //Wohnzimmer Status
                            EEPROM.read(1) == 0 ? knx.groupWriteBool(listener[0], false) : knx.groupWriteBool(listener[0], true);
                            EEPROM.read(1) == 0 ? knx.groupWriteBool(statis[0], false) : knx.groupWriteBool(statis[0], true);
                            //Wohnzimmer Dimm Status
                            knx.groupWrite2ByteInt(listener[2], EEPROM.read(2));
                            knx.groupWrite2ByteInt(statis[2], EEPROM.read(2));
                            //Wohnzimmer Color State
                            WohnzimmerColorState = String(EEPROM.read(3)) + String(EEPROM.read(4)) + String(EEPROM.read(5));
                            knx.groupWrite14ByteText(listener[4], WohnzimmerColorState);
                            knx.groupWrite14ByteText(statis[4], WohnzimmerColorState);
                            //Bad Status
                            EEPROM.read(10) == 0 ? knx.groupWriteBool(listener[1], false) : knx.groupWriteBool(listener[1], true);
                            EEPROM.read(10) == 0 ? knx.groupWriteBool(statis[1], false) : knx.groupWriteBool(statis[1], true);
                            //Bad Dimm Status
                            knx.groupWrite2ByteInt(listener[3], EEPROM.read(11));
                            knx.groupWrite2ByteInt(statis[3], EEPROM.read(11));
                            //Bad Color State
                            BadColorState = String(EEPROM.read(12)) + String(EEPROM.read(13)) + String(EEPROM.read(14));
                            knx.groupWrite14ByteText(listener[5], WohnzimmerColorState);
                            knx.groupWrite14ByteText(statis[5], WohnzimmerColorState);
                          }
                          void setup()
                          {
                            pinMode(LED_PIN, OUTPUT);
                            Serial1.begin(19200, SERIAL_8E1);
                            checkEEPOM();
                            knx.uartReset();
                            initilaizeStates();
                            addingListener();
                            delay(1000);
                            readListener();  
                            pixels.begin();
                          }
                          void loop()
                          {
                          }
                          void showLeds(int startIndex, int maxIndex, uint8_t red, uint8_t blue, uint8_t green, int EEPromBrightness)
                          {
                          Serial.print(EEPROM.read(EEPromBrightness));
                            for (int i = startIndex; i <= 500; i++)
                            {
                              pixels.setPixelColor(i, pixels.Color(red, blue, green));
                              
                              pixels.setBrightness(EEPROM.read(EEPromBrightness) );
                              pixels.show();
                            }  
                          }
                          void showWohnzimmer()
                          {
                            uint8_t red;
                            uint8_t green;
                            uint8_t blue;
                            ColorConverter::HexToRgb(WohnzimmerColorState, red, green, blue);
                            EEPROM.read(3) != byte(red) && writeEEProm(3, byte(red));
                            EEPROM.read(4) != byte(green) && writeEEProm(4, byte(green));
                            EEPROM.read(5) != byte(blue) && writeEEProm(3, byte(blue));
                            showLeds(0, 237, red, blue, green, 2);
                          }
                          void showBad()
                          {
                            uint8_t red;
                            uint8_t green;
                            uint8_t blue;
                            ColorConverter::HexToRgb(BadColorState, red, green, blue);
                            EEPROM.read(12) != byte(red) && writeEEProm(12, byte(red));
                            EEPROM.read(13) != byte(green) && writeEEProm(13, byte(green));
                            EEPROM.read(14) != byte(blue) && writeEEProm(14, byte(blue));
                            showLeds(238, 370, red, green, blue, 11);
                          }
                          void serialEvent1()
                          {
                            //Aufruf knx.serialEvent()
                            KnxTpUartSerialEventType eType = knx.serialEvent();
                            //Evaluation of the received telegram -> only KNX telegrams are accepted
                            if (eType == KNX_TELEGRAM)
                            {
                              KnxTelegram *telegram = knx.getReceivedTelegram();
                              String target =
                                  String(0 + telegram->getTargetMainGroup()) + "/" +
                                  String(0 + telegram->getTargetMiddleGroup()) + "/" +
                                  String(0 + telegram->getTargetSubGroup());
                              // Evaluation of group address of the received telegram and caching in variable "target"
                              if (telegram->getCommand() == KNX_COMMAND_ANSWER)
                              {
                                // Evaluation of the received KNX telegram with response to read request (flag) -> action
                                if (target == listener[6])
                                {
                                  WohnzimmerTrafoState = telegram->getBool();
                                  if (WohnzimmerTrafoState && (EEPROM.read(1) == 0 || EEPROM.read(10) == 0))
                                  {
                                    //Trafo aus wenn keine leds an
                                    knx.groupWriteBool(listener[6], false);
                                  }
                                  else
                                  {
                                    if (EEPROM.read(1) == 1)
                                    {
                                      showWohnzimmer();
                                    }
                                    if (EEPROM.read(10) == 1)
                                    {
                                      showBad();
                                    }          
                                  }
                                }
                              }
                              //Write to bus
                              if (telegram->getCommand() == KNX_COMMAND_WRITE)
                              {
                                Serial.print(target);
                                //Wohnzimmer LED Status
                                if (target == listener[0])
                                {
                                  Serial.print(EEPROM.read(20));
                                  if (EEPROM.read(1) != telegram->getBool())
                                  {
                                    telegram->getBool() ? writeEEProm(1, 1) : writeEEProm(1, 0);
                                  }
                                  if (telegram->getBool())
                                  {
                                    EEPROM.read(20) == 0 && knx.groupWriteBool(listener[6], true);
                                    delay(1000);
                                    showWohnzimmer();
                                  }
                                  if (!telegram->getBool())
                                  {
                                    knx.groupWriteBool(listener[0], false);
                                    knx.groupWriteBool(statis[0], false);
                                    if (EEPROM.read(20) == 1 && EEPROM.read(10) == 0)
                                    {
                                      knx.groupWriteBool(listener[6], false);
                                    }
                                  }
                                }
                                //BAD LED Status
                                if (target == listener[1])
                                {
                                  if (EEPROM.read(10) != telegram->getBool())
                                  {
                                    telegram->getBool() ? writeEEProm(10, 1) : writeEEProm(10, 0);
                                  }
                                  if (telegram->getBool())
                                  {
                                    EEPROM.read(20) == 0 && knx.groupWriteBool(listener[6], true);
                                    delay(1000);
                                    showBad();
                                  }
                                  if (!telegram->getBool())
                                  {
                                    knx.groupWriteBool(listener[1], false);
                                    knx.groupWriteBool(statis[1], false);
                                    if (EEPROM.read(20) == 1 && EEPROM.read(1) == 0)
                                    {
                                      knx.groupWriteBool(listener[6], false);
                                    }
                                  }
                                }
                                //Wohnzimmer Trafo Status
                                if (target == listener[6])
                                {
                                  byte result = telegram->getBool() ? 1 : 0;
                                  if (EEPROM.read(20) != result)
                                  {
                                    telegram->getBool() ? writeEEProm(20, 1) : writeEEProm(20, 0);
                                  }
                                  if (result)
                                  {
                                    if (EEPROM.read(1) == 1)
                                    {
                                      showWohnzimmer();
                                    }
                                    if (EEPROM.read(10) == 1)
                                    {
                                      showBad();
                                    }
                                  }
                                }
                                //Wohnzimmer Dimmen Status
                                if (target == listener[2])
                                {
                                  writeEEProm(2, telegram->get1ByteIntValue());
                                  if (telegram->get1ByteIntValue() > 0)
                                  {
                                    if (EEPROM.read(1) == 0)
                                    {
                                      knx.groupWriteBool(listener[0], true);
                                      knx.groupWriteBool(statis[0], true);
                                    }
                                    showWohnzimmer();
                                  }
                                  else
                                  {
                                    knx.groupWriteBool(listener[0], false);
                                    knx.groupWriteBool(statis[0], false);
                                  }
                                }
                                //Wohnzimmer Color Status
                                if (target == listener[4])
                                {
                                  if (WohnzimmerColorState != telegram->get14ByteValue().substring(1))
                                  {
                                    WohnzimmerColorState = telegram->get14ByteValue().substring(1);
                                    showWohnzimmer();
                                  }
                                }
                                //Bad Dimmen Status
                                if (target == listener[3])
                                {
                                  writeEEProm(11, telegram->get1ByteIntValue());
                                  Serial.print(EEPROM.read(11));
                                  if (telegram->get1ByteIntValue() > 0)
                                  {
                                    if (EEPROM.read(10) == 0)
                                    {
                                      knx.groupWriteBool(listener[1], true);
                                      knx.groupWriteBool(statis[1], true);            
                                    }
                                    showBad();
                                  }
                                  else
                                  {
                                    knx.groupWriteBool(listener[1], false);
                                    knx.groupWriteBool(statis[1], false);
                                  }
                                }
                                //Bad Color Status
                                if (target == listener[5])
                                {
                                  if (BadColorState != telegram->get14ByteValue().substring(1))
                                  {
                                    BadColorState = telegram->get14ByteValue().substring(1);
                                    showBad();
                                  }
                                }
                              }
                              //answer to read request
                              if (telegram->getCommand() == KNX_COMMAND_READ)
                              {
                                //Wohnzimmer Trafo Status
                                if (target == listener[6])
                                {
                                  knx.groupAnswerBool(listener[6], WohnzimmerTrafoState);
                                }
                                if (target == statis[6])
                                {
                                  knx.groupAnswerBool(statis[6], WohnzimmerTrafoState);
                                }
                                //Wohnzimmer Status
                                if (target == listener[0])
                                {
                                  EEPROM.read(1) == 0 ? knx.groupAnswerBool(listener[0], false) : knx.groupAnswerBool(listener[0], true);
                                }
                                if (target == statis[0])
                                {
                                  EEPROM.read(1) == 0 ? knx.groupAnswerBool(statis[0], false) : knx.groupAnswerBool(statis[0], true);
                                }
                                //Wohnzimmer Dimmen Status
                                if (target == listener[2])
                                {
                                  knx.groupAnswer2ByteFloat(listener[2], EEPROM.read(2));
                                }
                                if (target == statis[2])
                                {
                                  knx.groupAnswer2ByteFloat(statis[2], EEPROM.read(2));
                                }
                                //Wohnzimmer Color Status
                                if (target == listener[4])
                                {
                                  knx.groupAnswer14ByteText(listener[4], "#" + WohnzimmerColorState);
                                }
                                if (target == statis[4])
                                {
                                  knx.groupAnswer14ByteText(statis[4], "#" + WohnzimmerColorState);
                                }
                                //Bad Status
                                if (target == listener[1])
                                {
                                  EEPROM.read(10) == 0 ? knx.groupAnswerBool(listener[1], false) : knx.groupAnswerBool(listener[1], true);
                                }
                                if (target == statis[1])
                                {
                                  EEPROM.read(10) == 0 ? knx.groupAnswerBool(statis[1], false) : knx.groupAnswerBool(listener[1], true);
                                }
                                //Bad Dimmen Status
                                if (target == listener[3])
                                {
                                  knx.groupAnswer2ByteFloat(listener[3], EEPROM.read(11));
                                }
                                if (target == statis[3])
                                {
                                  knx.groupAnswer2ByteFloat(statis[3], EEPROM.read(11));
                                }
                                //Bad Color Status
                                if (target == listener[5])
                                {
                                  knx.groupAnswer14ByteText(listener[5], "#" + BadColorState);
                                }
                                if (target == statis[5])
                                {
                                  knx.groupAnswer14ByteText(statis[5], "#" + BadColorState);
                                }
                              }
                            }
                          }
                          das währe der Sketch. Ist noch nicht fertig da ich noch mit case switch das ganze abarbeiten wollte.
                          Das Problem besteht schon in der initilaizeStates Methode wo er die werte eigentlich setzten sollte das er sie mit der falschen middelgroup an den Bus sendet.
                          Hat jemand eine idee wo da mein fehler liegen könnte?

                          PS. Board ist ein Ardoino leonardo

                          Gruß
                          Philipp

                          Kommentar


                            Servus,

                            ich verwende einen Arduino Nano Every bei diesem erhalte ich mit PlatformIO einen Fehler bei KnxTelegram.cpp Zeile 357
                            Code:
                            long m = round(v) & 0x7FF;
                            Diese Problem wurde ebenfalls auf https://www.arduinoforum.de/arduino-Thread-NodeMCU-KNX besprochen, die dortige Lösung funktioniert bei mir ebenfalls:

                            Code:
                            long m = round(v);
                            m = m & 0x7FF;
                            Gruß Christian.
                            Zuletzt geändert von chdragonaut; 24.01.2021, 17:08.

                            Kommentar


                              Guten Abend zusammen,

                              ich hab jetzt bei meinem Projekt einen Arduino pro Mini in Gebrauch.
                              Das senden der Daten von ihm funktioniert auch, das Empfangen von einer Antwort (KNX_COMMAND_READ) klappt auch bis einschließlich Hauptgruppe 15.
                              Ich würde jedoch gerne über die HG 31 kommunizieren, hier macht der Arduino jedoch nichts bei den Anfragen.
                              Hatte jemand schon diesen Fall?
                              Meine erste Vermutung war der IP Router, hier hab ich die weiterleitung für alles schon aktiviert. Hat jedoch nichts gebracht.

                              Dake für die Hilfe schon einmal
                              Gruß,
                              Andreas

                              Kommentar


                                Hallo,

                                bin neu hier, Arduino- und KNX-Anfänger, aber langjähriger und begeisterter Bastler.
                                Ich bastel gerade an einem kleinen Projekt rum. Dabei geht es um einen KNX gesteuerten, MP3 fähigen Türgong.
                                Letztendlich hängt ein Arduino Pro Mini an einem TP-Uart und lauscht den KNX-Bus ab. Bei der passenden Gruppenadresse gibt er einen Steuerbefehl über Softwareserial an ein MP3-Player-Modul (Mini-DF-Player). Daran hängt eine kleine Class-D Endstufe und ein Einbaulautsprecher.

                                Folgendes Problem bekomme ich nicht gelöst:
                                Benutze ich einen 3,3V 8Mhz Arduino Pro Mini startet er mehrmals kurz nacheinander den Player beim Empfang der Gruppenadresse. Der abzuspielende Jingle beginnt mehrmals von vorne bis er dann komplett abgespielt wird.
                                Spiele ich den selben Sketch auf einen 5V 16Mhz Arduino Pro Mini funktioniert alles wie es soll. Telegramm kommt rein, Steuerbefahl geht raus, Jingle wird einmal abgespielt.

                                Hier ist der Sketch (im Prinzip das Beispiel etwas umgeschrieben):


                                #include "KnxTpUart.h"
                                #include "SoftwareSerial.h"
                                #include "DFRobotDFPlayerMini.h"


                                KnxTpUart knx(&Serial, "1.1.2");
                                SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
                                DFRobotDFPlayerMini myDFPlayer;

                                const int LED = 13;
                                const int Volume = 15;

                                void setup() {

                                mySoftwareSerial.begin(9600);
                                myDFPlayer.begin(mySoftwareSerial);
                                myDFPlayer.volume(Volume); //Set volume value. From 0 to 30

                                pinMode(LED, OUTPUT);
                                digitalWrite(LED, LOW);

                                Serial.begin(19200, SERIAL_8E1);
                                UCSR0C = UCSR0C | B00100000;

                                knx.uartReset();

                                knx.addListenGroupAddress("2/2/2");

                                }

                                void loop() {
                                // nothing in the loop. This example is only to receive telegrams
                                }

                                void execute() {
                                digitalWrite(LED, HIGH);
                                myDFPlayer.play(1);
                                delay(1000);
                                digitalWrite(LED, LOW);
                                }

                                void serialEvent() {
                                KnxTpUartSerialEventType eType = knx.serialEvent();
                                if (eType == KNX_TELEGRAM) {

                                KnxTelegram* telegram = knx.getReceivedTelegram();
                                // Telegrammauswertung auf KNX (bei Empfang immer notwendig)
                                String target =
                                String(0 + telegram->getTargetMainGroup()) + "/" +
                                String(0 + telegram->getTargetMiddleGroup()) + "/" +
                                String(0 + telegram->getTargetSubGroup());

                                // Here you have the telegram and can do whatever you want
                                if (telegram->getCommand() == KNX_COMMAND_WRITE) {
                                // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion
                                if (target == "2/2/2") {
                                int received_2_2_2 = telegram->getBool();

                                if (received_2_2_2) {
                                execute();
                                }
                                }

                                }
                                }
                                }
                                Wäre super wenn jemand mal überprüfen könnte, ob das ein generelles Problem ist, oder ob ich was falsch mache.
                                Über Hilfe würde ich mich sehr freuen. Schon mal vielen Dank.

                                Gruss,
                                Casim

                                Kommentar

                                Lädt...
                                X