Pages: [1]   Go Down
Author Topic: Fehlersuche bei DFRobot LCD Shield  (Read 494 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

Quote
#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  smiley-red

Lieben Dank erstmal.
MfG
« Last Edit: November 20, 2012, 02:08:49 pm by t-lie » Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21252
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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..  smiley-roll
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21252
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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....
Logged

Pages: [1]   Go Up
Jump to: