Hallo,
//Taster
const int Taster1 = 2; // Der Taster wurde an Pin 2 angeschlossen
const int Taster2 = 3; // Der Taster wurde an Pin 2 angeschlossen
volatile unsigned long LetzteZeit1 = 0, WarteZeit1 = 500;
volatile unsigned long LetzteZeit2 = 0, WarteZeit2 = 500;
Auch wenn es schwer fällt, kommentiere nichts was beim Code lesen eh klar ist. Zudem durch C&P falsch kommentiert. Gewöhne dir auch nicht an mehrere Variablen Definitionen in eine Zeile zu schreiben. Die Wenigsten wissen was sie dabei tun. In deinem Fall sind Wartezeit1 und Wartezeit2 NICHT volatile. Die letzten 4 werden in deinen Sketch nicht benötigt, also weg damit oder auskommentiert.
//Taster und Interrupt
pinMode(Taster1, INPUT); // Hier wird der Taster als INPUT definiert
digitalWrite(2, HIGH);
pinMode(Taster2, INPUT); // Hier wird der Taster als INPUT definiert
digitalWrite(3, HIGH);
Interupt gibts hier nicht > Kommentar kann ganz weg.
Und warum einmal die Pinnummer und einmal die Variable? Ist alles nicht gut für sauberen Code.
Vorschlag:
pinMode(Taster1, INPUT_PULLUP);
pinMode(Taster2, INPUT_PULLUP);
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
Hierfür brauchste keine defines. Nimm const int oder const byte.
Die strings brauchst du auch nicht. Weg damit.
Dein Hauptproblem wird sein:
if (P.displayAnimate()) {
if (newMessageAvailable)
{
Serial.println(Counter);
strncpy(zwischenMessage, newMessage, Counter - 2); //letzte 2 Zeichen löschen
zwischenMessage[Counter - 2] = '\0'; //letztes Zeichen ist Ende
strcpy(curMessage, zwischenMessage);
newMessageAvailable = false;
}
P.displayReset();
}
Klassische Selbstaussperrung. newMessageAvailable wird false und bleibt false. Einlesen tust du auch nichts. Du brauchst irgendwas mit Serial.available() zum Zeichen einlesen und du musst das Ende der Übertragung mitbekommen. Dafür benötigt es ein Protokoll. Im einfachsten Fall am Ende der Nachricht ein LF mitschicken. Darauf triggerst du und weißt alles da, jetzt kann die Nachricht verarbeitet werden.
Lesetipp: Messwert Abfrage über RS232 - #6 by Serenifly
abgeänderte entschärfte Version ohne Zeiger.
// https://forum.arduino.cc/t/messwert-abfrage-uber-rs232/631638/6
const byte READ_BUFFER_SIZE {20};
char rxBuffer [READ_BUFFER_SIZE + 1]; // Platz für 20 Zeichen + Null-Terminator
void setup()
{
Serial.begin(9600);
}
void loop()
{
// liefert true wenn das LF eingelesen wurde
if (readLine(Serial) )
{
Serial.print("Eingelesen: ");
Serial.println(rxBuffer);
}
}
bool readLine(Stream& stream)
{
static byte index {0};
bool status {false};
while (stream.available())
{
char c = stream.read();
if (c == '\n') // wenn LF eingelesen
{
rxBuffer[index] = '\0'; // String terminieren
index = 0;
status = true; // String fertig eingelesen
}
else if ( (c >= 32) && (index < READ_BUFFER_SIZE) ) // solange noch Platz im Buffer ist
{
rxBuffer[index++] = c; // Zeichen abspeichern und Index inkrementieren
}
}
return status;
}
Beim Sender schickste LF mit. Wenn verstanden und funktioniert bauste deinen Sketch um.