Fehlersuche bei DFRobot LCD Shield

Hallo Leute,

ich bin gerade dabei ein wenig mit einem LCD Shield + RFID rumzuspielen…
Ergebnis soll vielleicht eine Art Alarmsystem werden.
Habe das LCD Tasten Shield an einem Deumilanove.Außerdem habe ich noch ein RFID Modul, welches mit 12V VIN durch den Arduino und dessen externes 12V Netzteil betrieben wird. Das Modul gibt auf einem Pin die VIN aus, solange ein Transponder angelegt ist.

Nun zu meinem Code:

#include <Bounce.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

#define BUTTON 11 // RFID Signal
#define AlarmSig1 2 //Alarmschleife
#define LED 13 // LED scharf / unscharf
#define Sirene 3 // optional Relais für Sirene

int ledValue = LOW;
int alarm = 0;
int alarms = 0;
int alarmState = 0;

Bounce bouncer = Bounce( BUTTON, 2000 );
Bounce bouncer2 = Bounce( AlarmSig1, 100 );

void setup() {
pinMode(BUTTON,INPUT);
pinMode(AlarmSig1,INPUT);
pinMode(LED,OUTPUT);
pinMode(Sirene,OUTPUT);
pinMode(10, OUTPUT); // HG Beleuchtung LCD

digitalWrite(10,HIGH); // HG EIN

Serial.begin(9600);

lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(“Alarmsys started”);
delay(1000);
lcd.setCursor(0,0);
lcd.print(" ");

}

void loop() {

if ( bouncer.update() ) {// Abfrage RFID Signal
if ( bouncer.read() == HIGH) {
if ( ledValue == LOW ) {
ledValue = HIGH; // Alarm scharf
alarm = 0;
Serial.println(“armed!”);
digitalWrite(Sirene,HIGH); // kurzes Sirenensignal
delay(200);
digitalWrite(Sirene,LOW);
lcd.setCursor(0,0);
lcd.print(“System armed!”); // Ausgabe auf LCD
delay(500);
lcd.setCursor(0,0);
lcd.print(" ");
}
else {
ledValue = LOW; // Alarm unscharf
Serial.println(“disarmed!”);
Serial.print("Alarms: ");
Serial.println(alarms);

lcd.setCursor(0,0);
lcd.print(“System disarmed!”); // Ausgabe LCD
lcd.setCursor(0,1);
lcd.print(alarms); // Ausgabe LCD Anzahl Alarme seit scharf
delay(500);

lcd.setCursor(0,0);
lcd.print(" “);
alarms = 0; // Anzahl Alarme seit scharf → RESET
}
digitalWrite(LED,ledValue); // setzen der scharf / unscharf LED
}
}
if(ledValue == HIGH){
if ( bouncer2.update() ) { // Abfrage Alarmschleife
if ( bouncer2.read() == HIGH) {
alarmState = 1;
alarm = alarm +1;
}
else {
alarmState = 0;
alarm = 0;
alarms++;
}
if((alarmState == 1)&& (alarm == 1)&&(ledValue == HIGH)){
Serial.println(”— ALARM !!! —");
digitalWrite(Sirene,HIGH); // Alarmsirene EIN
alarm = 0;
// alarms++;
}
}
}
}

Leider gibt es noch Probleme… Das Shield allein funktioniert, RFID allein auch. Doch zusammen hackt es noch.

Vielleicht sieht ja einer gleich das Problem im Code :blush:

Lieben Dank erstmal.
MfG

Wie macht sich das "Doch zusammen hackt es noch" bemerkbar? Grüße Uwe

Also beim aktuellen Code ist es so, dass die LED an D13 sich zwar an/aus schalten lässt (durch rfid) und die kleinen onboard TX/RX leuchten auch bei "Alarm". Doch das Display spinnt bei dieser config. Von der ersten Zeile ist jedes Zeichen voll an (ein Block)... und es ändert sich auch nichts daran.. :roll_eyes:

Da ist guter Rat teuer.

Der Ausgang des RFID-Lesers muß nicht debouced werden da Elektronik nicht prellt; nur die meisten mechanischen Kontakte prellen mit Außnahme con Spezialkonstruktionen und Reedkontakten.

Nach lcd.begin(16, 2); würde ich ein delay() von mindestens 5mS machen da die Inizialization des LCD-Controllers etwas braucht und Du das Busy-Bit nicht abfragst ob die Inizialisation fertig ist. Besser mehr als 5mS, auch 20mS fallen nicht auf. Ansonsten finde ich nichts, aber das will nichts heißen.

Viele Grüße Uwe

Lieben Dank für den Tipp mit dem delay. Hat leider auch nichts geändert...

Das mit dem "Antiprell" habe ich natürlich nicht dafür benutzt... Eher damit das RFID einlesen etwas träger abläuft. Sonst würde es bei einem kleinen Wackeln mit dem Transponder ggf. mehrere Signale geben....