Habe meine erste Platine (Version 1.3) zusammengelötet.
Bei der USB-Verbindung funktioniert alles wie gewünscht: Die Seiten wechseln (testweise) alle 2 Sekunden auf dem Display.
Zusätzlich lasse ich die RX-LED alle zwei Sekunden blinken, um zu sehen, ob der Sketch läuft.
Problem:
Stecke ich die Platine auf den Busankoppler, läuft der Sketch scheinbar nicht mehr: Die Seiten auf dem Display wechseln nicht mehr - erste Seite wird angezeigt. Die RX-LED blinkt auch nicht mehr. Lediglich die LED in der nähe des USB-Ports leuchtet rot.
PHP-Code:
#include <KnxTpUart.h> // Einbindung der TpUart Library
#include <SoftwareSerial.h> // Einbindung der Software Serial Library, der Pro Micro hat 2 serielle Hardwareschnittstellen, eine wird für den Busankoppler benötigt, die Andere für die Programmierung über USB, das Display wird somit softwareseitig eingebunden
SoftwareSerial mySerial(9,8); //RX,TX // Festlegung von Namen und Pins für die serielle Verbindung des Displays
KnxTpUart knx(&Serial1, "1.1.66"); // Festlegung der seriellen Schnittstelle mit dem Arduino mit dem Busankoppler kommuniziert, außerdem Festlegung der Physikalischen Adresse des Arduinos
void setup() {
Serial.begin(19200);
// while the serial stream is not open, do nothing:
while (!Serial)
{
// do nothing
} ;
Serial.println("Entering setup...");
mySerial.begin(9600); // Start der seriellen Verbindung (Display) mit 9600 Baud
mySerial.print("dims=10"); // Festlegen der Displayhelligkeit auf 40%
mySerial.print("\xFF\xFF\xFF"); // Ausführung der vorherigen "mySerial" Befehle (wird am Ende eines Befehls immer benötigt)
Serial1.begin(19200, SERIAL_8E1); // Start der seriellen Verbindung (Busankoppler) mit 19200 Baud
knx.uartReset(); // Uart Reset
knx.addListenGroupAddress("0/4/1"); // Gruppenadressen auf die der Arduino "lauschen" soll
knx.addListenGroupAddress("0/4/20");
}
void loop() {
Serial.println("Entering loop...");
RXLED1;
mySerial.print("page 1");
mySerial.print("\xFF\xFF\xFF");
delay(2000);
RXLED0;
mySerial.print("page 2");
mySerial.print("\xFF\xFF\xFF");
delay(2000);
}
void serialEvent1() {
KnxTpUartSerialEventType eType = knx.serialEvent();
if (eType == KNX_TELEGRAM) {
KnxTelegram* telegram = knx.getReceivedTelegram(); // Telegrammauswertung auf KNX (bei Empfang immer notwendig)
String target = // Zusammensetzen der Gruppenadresse
String(0 + telegram->getTargetMainGroup()) + "/" +
String(0 + telegram->getTargetMiddleGroup()) + "/" +
String(0 + telegram->getTargetSubGroup());
if (telegram->getCommand() == KNX_COMMAND_WRITE) { // Auswertung des empfangenen KNX-Telegrammes
if (target == "0/4/1") { // Wenn die Gruppenadresse 1/1/0 empfangen wird...
int received_1_1_0 = telegram->getBool(); // ...Speichere den Wert (Ein oder Aus?)...
if (received_1_1_0) { // ...Wenn der Befehl "Ein" lautet...
mySerial.print("sleep=0"); // ...Wecke das Display auf (0=Display Ein, 1=Display Aus...
mySerial.print("\xFF\xFF\xFF"); // (Ausführung des vorherigen "mySerial" Befehl)
mySerial.print("page 1"); // ...Rufe Seite 1 auf
mySerial.print("\xFF\xFF\xFF"); // (Ausführung des vorherigen "mySerial" Befehl)
}
else { // ...Ansonsten (Befehl kann in diesem Fall nur "Aus" sein, da es bei einem bit nur 2 Zustände gibt)...
mySerial.print("sleep=1"); // ...Schalte das Display aus
mySerial.print("\xFF\xFF\xFF"); // (Ausführung des vorherigen "mySerial" Befehl)
}
}
else if (target == "0/4/20") { // Wenn die Gruppenadresse 1/1/1 empfangen wird...
int received_1_1_1 = telegram->getBool(); // ...Speichere den Wert (Ein oder Aus?)...
if (received_1_1_1) { // ...Wenn der Befehl "Ein" lautet...
mySerial.print("sleep=0"); // ...Wecke das Display auf...
mySerial.print("\xFF\xFF\xFF"); // (Ausführung des vorherigen "mySerial" Befehl)
mySerial.print("page 2"); // ...Rufe Seite 2 auf
mySerial.print("\xFF\xFF\xFF"); // (Ausführung des vorherigen "mySerial" Befehl)
}
else { // ...Ansonsten...
mySerial.print("sleep=1"); // ...Schalte das Display aus
mySerial.print("\xFF\xFF\xFF"); // (Ausführung des vorherigen "mySerial" Befehl)
}
}
}}}


.

.
Einen Kommentar schreiben: