In der Lib sind jedenfalls Powerdown-Befehle enthalten, die werden in den Beispielen aber wohl nicht genutzt. Ich würde das erstmal versuchen, das Ganze ohne Nutzung von Sleepmodes zuverlässig ans Laufen zu bekommen - die Sleepmodes kann man ja auch noch nachträglich implementieren. Das Hardwaredesign muss ohnehin den größtmöglichen Energieverbrauch abdecken können.
Ankündigung
Einklappen
Keine Ankündigung bisher.
ARDUINO am KNX
Einklappen
X
-
Zitat von dreamy1 Beitrag anzeigenDas Hardwaredesign muss ohnehin den größtmöglichen Energieverbrauch abdecken können.
Es gibt IMHO Schaltaktoren die ab einer bestimmten Schalthäufigkeit begrenzen (müssen) weil sonst die dicken Relais den erlaubten Strombedarf übersteigen, bzw. die verbauten Elkos das nicht hergeben. Da muss doch auch Software auf Hardware abgestimmt sein bzw. umgekehrt.
Ich habe zwischenzeitlich eine alternative Lib gefunden, der Programmierer geizt auch nicht mit Kritik an der ursprünglichen Version von Adafruit.
Zumindest wird hier das Thema Stromsparen richtig berücksichtigt.
In seiner PN532.cpp steht:
Turns the RF field off.
When the field is on, the PN532 consumes approx 110 mA
When the field is off, the PN532 consumes approx 18 mA
The RF field is turned on again by ReadPassiveTargetID().
Kommentar
-
Nachdem die Kommunikation mit dem Bus bei mir läuft stehe ich vor dem nächsten Problem.
Telegramme zum Bus senden funktioniert klaglos, beim Empfangen stehe ich aber noch auf dem Schlauch.
Code:#include <KnxTpUart.h> KnxTpUart knx(&Serial, "1.1.160"); void setup() { Serial.begin(19200, SERIAL_8E1); Serial.println(UCSR0C, BIN); knx.uartReset(); knx.addListenGroupAddress("7/0/2"); knx.addListenGroupAddress("7/0/3"); } void loop() { knx.groupWriteBool("7/0/1", true); delay (1000); knx.groupWriteBool("7/0/1", false); delay (1000); } void serialEvent1() { KnxTpUartSerialEventType eType = knx.serialEvent(); if (eType == TPUART_RESET_INDICATION) { Serial.println("Event TPUART_RESET_INDICATION"); } else if (eType == UNKNOWN) { Serial.println("Event UNKNOWN"); } else if (eType == KNX_TELEGRAM) { Serial.println("Event 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()); if (target == "7/0/2") { int received_7_0_2 = telegram->get4BitIntValue(); Serial.print("Empfangener Wert:"); Serial.println(received_7_0_2); knx.groupWrite2ByteInt("7/0/4",received_7_0_2); } if (target == "7/0/3") { int received_7_0_3 = telegram->get4BitIntValue(); Serial.print("Empfangener Wert:"); Serial.println(received_7_0_3); knx.groupWrite2ByteInt("7/0/5",received_7_0_3); } } }
Im void serialEvent1() möchte ich, angelehnt an den Beispielsketch, Telegramme vom Bus empfangen.
Die Zeile "knx.groupWrite2ByteInt("7/0/4",received_7_0_2);" dient nur als Rückmeldung zum Gruppenmonitor.
Dort kommt allerdings nichts an
Habt Ihr einen Tip für mich?
Kommentar
-
Zitat von NorbertB Beitrag anzeigenNachdem die Kommunikation mit dem Bus bei mir läuft stehe ich vor dem nächsten Problem.
Telegramme zum Bus senden funktioniert klaglos, beim Empfangen stehe ich aber noch auf dem Schlauch.
Code:#include <KnxTpUart.h> KnxTpUart knx(&Serial, "1.1.160"); void setup() { Serial.begin(19200, SERIAL_8E1); ... } void loop() {...} void serialEvent1() {...}
Im void serialEvent1() möchte ich, angelehnt an den Beispielsketch, Telegramme vom Bus empfangen.
Die Zeile "knx.groupWrite2ByteInt("7/0/4",received_7_0_2);" dient nur als Rückmeldung zum Gruppenmonitor.
Dort kommt allerdings nichts an
Habt Ihr einen Tip für mich?
https://github.com/arduino/ArduinoCo...o/main.cpp#L47
https://github.com/arduino/ArduinoCo...al.cpp#L64-L78
Jetzt zu deinem Problem: in setup gibst du Serial an, nutzt aber SerialEvent1 was zu Serial1 gehört...
Du musst also SerialEvent nutzen. oder besser in der Loop:
Code:if(Serial.available()){ //inhalt von SerialEvent Funktion }
Kommentar
-
Danke für den Tip, ich hab's jetzt im loop und funktioniert auch.
Ein Verständnisproblem habe ich aber noch. Ich versuche zu dem Telegramm, welches ich vom Bus zum Arduino schicke eine Rückmeldung zum Bus einzurichten.
Code:if (target == "7/0/2") { int received_7_0_2 = telegram->get2ByteIntValue(); knx.groupWrite2ByteInt("7/0/7",received_7_0_2); }
Code:if (target == "7/0/2") { int received_7_0_2 = telegram->get2ByteIntValue(); if (received_7_0_2 > 1) { digitalWrite(LED, HIGH); knx.groupWriteBool("7/0/5",1); } else { digitalWrite(LED, LOW); knx.groupWriteBool("7/0/5",0); } knx.groupWrite2ByteInt("7/0/7",received_7_0_2); }
Kommentar
-
Danke
Was mir in ein paar Sketches aufgefallen ist:
Da wird z.B. ein int Wert (also ja eigentlich 2Byte) per "knx.groupWrite1ByteInt" gesendet.
Was passiert hier mit dem Int-Wert? (bzw. was passiert, wen der Wert größer als 255 ist?)
Das selbe habe ich mit einem unsigned long und "knx.groupWrite2ByteInt" beobachtet.
Kommentar
-
Kann mir hiermit vielleicht jemand weiterhelfen?
Wenn ich den beigefügten Arduino Sketch von hier verwenden möchte, bekomme ich zwei derartige Fehler beim Kompilieren
Code:RFID_Dooropener.ino:59:42: warning: invalid conversion from 'char*' to 'byte* {aka unsigned char*}' [-fpermissive] if(mfrc522.MIFARE_Read(6, buffer, &size) == MFRC522::STATUS_OK) {
Angehängte Dateien
- Likes 1
Kommentar
-
Zitat von Delta6400 Beitrag anzeigenmfd :
Wenn man jetzt eine Zutirttskontrolle an seinem EFH macht auf Eigenbau. Zahlt eine Versicherung bei einem Einbruch?
Aber: dazu müsste man zunächst passend versichert sein, dann dürfte es keine anderen/schlimmeren "Einfallstore" als das RFID-Schloss geben, und: zahlen wollen die doch ohnehin nie, selbst wenn du alles richtig gemacht hast.
Kommentar
Kommentar