Alarmanlage

Hallo an Alle,

habe versucht meine Alarmanlage zu erweitern, mit einer 2ten Alarmlinie.
Habe dazu meinen bestehenden Quell Code angepasst.
Beim Komplilieren ist kein Fehler aufgetreten trotz alle dem löst die 2te Alarmlinie nicht aus.
Komme momentan nicht weiter.
Vieleicht hat jemand eine Idee was im Quellcode nicht stimmt.

/*******************
*   Alarmanlage    *
********************/
int StatusEingang1 = A0;
int ledPinAlarm = 13;
int Alarmlinie1 = 0;
int StatusEingang2 = A1;
int ledPinAlarm2 = 12;
int Alarmlinie2 = 0;

void setup()         // Initialisierung 
{                             
 pinMode(ledPinAlarm,OUTPUT); // LED-Pin als Alarm
 pinMode(ledPinAlarm2,OUTPUT);
 Serial.begin(9600);
} 

void loop()           // Endlosschleife
{ 
   StatusEingang1=analogRead(Alarmlinie1);   // Alarmlinie wird eingelesen Widerstandswert
   StatusEingang2=analogRead(Alarmlinie2);
   Serial.println (StatusEingang1); 
   Serial.println (StatusEingang2);
 
  if (StatusEingang1 <400 || StatusEingang1>620) // Abfrage ob kleiner oder größer Wert 512
  {
   digitalWrite(ledPinAlarm, HIGH);   // Alarm LED einschalten für 5 sec
          
  } 
   else 
  {
   digitalWrite(ledPinAlarm, LOW);   // Alarm LED Aus
  }
  
  if (StatusEingang2 <400 || StatusEingang2>620) // Abfrage ob kleiner oder größer Wert 512
  {
   digitalWrite(ledPinAlarm2, HIGH);   // Alarm LED einschalten für 5 sec
          
  } 
  else
  {
   digitalWrite(ledPinAlarm2, LOW);   // Alarm LED Aus
  }
  
}

besten Dank vorab

Gruss savana

Hallo savana
Füge einige Seriel.print() ein um Veriablen auszugeben und zu sehen ob die Werte die sind dide Du Dir erwartest.
Su kannst Serial.print("schleife a"); auch verwenden um zu sehen ob bestimmte Programmteile überhaupt angesprungen werden.
Das ist die Theorie;
Die Praxis ist, daß da wenig Variablen sind und wenig auszugeben [schluchts] und das was auszugeben ist Du schon ausgegeben hast.

Was gibt
Serial.println (StatusEingang1);
Serial.println (StatusEingang2);
für Werte aus?

Blöde Frage:
Hast Du auf Pin 12 eine Led hingeschaltet?
Grüße Uwe

Hallo Uwe,

Danke für Deine schnelle Antwort,

habe am Ausgang Pin12 eine LED angeschlossen LED leuchtet munter vor sich hin ,habe den serial Monitor Pararlell dazu beobachtet habe einen Wert von ca. 120-150 ( Serial.println (StatusEingang2) der sich nicht grosartig ändern lässt.
Alarm Linie 1 ist funktionstüchtig.

Komme trotz alle dem nicht weiter.

Vielleicht kannst du mir im Quellcode zeigen was ich falsch gemacht habe.
Meine Programmier kenntnisse sind noch ganz am Anfang.

Gruss savana

Was mich ein wenig irritiert ist die Zuweisung am Anfang:

int StatusEingang1 = A0;
int StatusEingang2 = A1;

Die Variablen A0/A1 sind nicht definiert, kann man das so machen?
Wäre es nicht besser so:

int StatusEingang1;
int StatusEingang2;

@Schwarzfuss
Ich muß Dir widersprechen. A0 und A1 sind definiert. Das sind "Systemvariablen" die in einer Library (weiß jetzt nicht auswendig welche) mit #define deklariert sind und die Pins für die Analogen Eingänge sind.

Die 2 Zuweisungen

int StatusEingang1 = A0;
int StatusEingang2 = A1;

definieren die analogen Pins von denen die Werte gelesen werden.

@savana
Ich finde in dem Kode keinen Fehler.
Darum tippe ich auf einen Beschaltungsfehler.
Wenn der analoge Wert, obwohl Du den Widerstand des "Sensors" änderst, immer um 120-150 liegt heißt das, Daß mit der Schaltung etwas nicht stimmt. Kontrolliere nochmal den Schaltungsaufbau und die Widertandswerte.

Grüße Uwe

Vielen Dank für die Info Uwe,
dann ist das zumindest soweit klar und ich möchte hier nicht länger stören. 8)

Du störst nicht!!
Es ist nur etwas schwierig Fehler im Sketch zu finden wenn keine da sind. :wink: :wink: :wink:
Ciao Uwe

Hallo Uwe,

Habe den Schaltungsaufbau kontrolliert und festgestellt das ein Poti defekt ist.
Wenn ich jetzt ein Funktionierendes Poti nehme und am Analogeingang 1 die Werte verändere ,verändert sich auch der LEDPin 13 Zustand also soweit alles korrekt.
Wenn ich jetzt das gleich Funktionierende Poti nehme und am Analogeingang 2 die Werte verändere ,verändert sich der LEDPin 12 Zustand nicht, aber dafür LEDPin 13 . Das ist ja nicht gewünscht !!

Wenn es es von Deiner Seite aus kein Problem ist, Zeichne mir doch bitte den Schaltungsaufbau für 2 Potis.
zum Arduino Board auf.Da der QuellCode von Deiner Seite aus in Ordnung ist kann es nur noch das sein.

Besten Dank vorab

Gruss Savana

Habe den Schaltungsaufbau kontrolliert und festgestellt das ein Poti defekt ist.

Aha!

Wenn ich jetzt das gleich Funktionierende Poti nehme und am Analogeingang 2 die Werte verändere ,verändert sich der LEDPin 12 Zustand nicht, aber dafür LEDPin 13 . Das ist ja nicht gewünscht !!

Laut dem geposteten Kode schaltet
Eingang A0 die LED an PIN 13 und
Eingang A1 die LED an PIN 12.

Mehr kann ich dazu nicht sagen. Kontrollier bitte nochmal.
Schaltung einfach Poti zwischen + und Masse schalten und Schleifer an Analogen Eingang. LED mit Vorwiderstand von Ausgang auf Masse.

Wie groß ist der Poti?

Die Analogeingänge haben zwar einen relativ hohen Eingangswiderstand aber ein Sample- Kondensator im ATmega wird in kurzer Zeit geladen und wenn die Spannungsquelle zu hochohmig ist ergibt das komische Reaktionen. Notfalls einen Spannungsfolger mit einem Operationsverstärker einfügen.

Grüße Uwe

Hallo Uwe,

habe nochmals alles kontrolliert, und meinen Aufbau gezeichnet.
Zeichnung ist anbei.

Gruss savana

Poti ist jeweils 100Kohm groß

Hast Du einen Vorwiderstand am LED?
Wie groß sind die Poties?
Grüße Uwe

Hallo Uwe,

Ich habe 820 Ohm vorgeschaltet ohne Erfolg.
Spannungsfolger mit einem Operationsverstärker habe ich nicht zur Hand.

Gruss savana

Hallo Uwe,

habe mir vor lauter Verzweiflung einen Arduino Mega 2560 von einem Bekannten ausgeliehen.
Und siehe da es funktioniert.
Uwe kann es sein das der Bootloader im Arduino UNO etwas hat.
Vor ein paar Tagen wollte der Arduino UNO den Bootloader laden ,ist dann aber willkürlich abgebrochen beim laden.
Muss dieser vielleicht richtig nachgeladen werden.Wenn ja wie?

Sorry für die Umstände Uwe und besten Dank für Deine Hilfe.

@ All nochmals vielen Dank für den Support .

Gruss savana

Der Bootloader ist sowieso eine ständige Kummerquelle. Wenn es nicht auf jeden Euro ankommt, dann kauf Dir einen ISP. Den AVR ISP MK II gibt's schon unter 30 Euro (inkl. Versandkosten) http://de.rs-online.com/web/search/searchBrowseAction.html?method=getProduct&R=6962563. Damit lassen sich alle Bootloader Probleme nachhaltig umgehen und außerdem wird das Flashen dadurch schneller.

Hallo Udo,

vielen Dank für die Info bzw.URL

Mich würde noch interessieren wie ich den Bootloader auf einen Atmega168 oder 328 lade, und
woher beziehe ich den diesen Bootloader.
Somit kann ich in Zukunft diese Kummerquelle umgehen.
Das wäre eine prima Sache.

Vielen Dank vorab.

Gruss savana

Das steht im Playground beschrieben. Der Witz dabei ist: Du brauchst einen ISP um den Bootloader zu brennen. Wenn Du einen ISP hast brauchst Du aber keinen Bootloader mehr. Es gibt auch Tricks um den Bootloader ohne ISP zu flashen, aber das nervt. Wie es geht steht im Playground.

Hallo Udo,

besten Dank für die Information.

Gruss savana

savana:
Hallo Uwe,

habe mir vor lauter Verzweiflung einen Arduino Mega 2560 von einem Bekannten ausgeliehen.
Und siehe da es funktioniert.
Uwe kann es sein das der Bootloader im Arduino UNO etwas hat.
Vor ein paar Tagen wollte der Arduino UNO den Bootloader laden ,ist dann aber willkürlich abgebrochen beim laden.
Muss dieser vielleicht richtig nachgeladen werden.Wenn ja wie?

Sorry für die Umstände Uwe und besten Dank für Deine Hilfe.

@ All nochmals vielen Dank für den Support .

Gruss savana

Ich bezweifle, daß der Bootloader Grund für Dein Problem ist, es sei denn Du kannst den Sketch nicht hochladen und findest noch den vorigen Sketch geladen.
Der Bootloader kontrolliert nach einem Reset ob über die USB_schnittatelle ein Sketch hochgeladen werden soll und läd ihn hoch. Danach, oder falls keines hochgeladen wird, springt er zum gespeicherten Sketch und wird nicht mehr aufgerufen.
Der Sketch ist eigentlich zu klein um Probleme mit der Größe des vorhandenen RAMs zu haben.
Grüße Uwe

Hallo Uwe,

aus irgend einem Grund, warum auch immer hat es nach dem tausch Arduino Mega 2560 funktioniert.
Habe übrigens einen anderen Arduino UNO zum testen genommen da funktioniert es auch.Gleicher Sketch!!
Es ist nur seltsam das der scheinbar defekte Arduino UNO einen Upload zu lässt, mir aber danach genau den gleichen Fehler wie schon beschrieben zeigt.
Ich kann es mir selber nicht erklären.
Werde versuchen nächste Woche den Bootloader in den scheinbar defekten Arduinio zu laden .
Dann werde ich sehen ob es so ist. Oder er hat eine Elektronischen defekt.

Danke für deine Hilfe.

Gruss savana

Hallo werte Arduino Gemeinde,

habe den Alarmanlagen Sketch ein wenig erweitert.

  1. Habe eine Alarmzeit hinzugefügt, wenn einer der beiden Linien(Schleifen) Ohmisch
    verändert werden wird ein Alarm ausgelöst je nach dem welche Zeit eingestellt ist.

  2. Der Signalgeber ist diesmal ein Globaler Ausgang , egal welcher der beiden Linien Auslössen,
    wird nur dieser angesprochen.

  3. Möchte ich weitere Funktionen einbauen

a. Eine Schärfung (über einen Taster) die über einen Eingang (Schalt Impuls von 1sec.) (Digitaler Eingang 7)
aktiviert wird , die aber erst dann aktiviert werden kann wenn alle Linien in Ruhe sind.
Wenn das der Fall ist soll für 3 sec. eine Scharfschalt Quittierung schalten (Digitaler Ausgang 11 )
Wenn die Schärfung nicht möglich ist weil einer der Linien nicht in Ruhe sind, soll der gleiche Ausgang 11 eine
negativ Quittierung 3 mal Hintereinander im 0.5 sec Takt schalten.

b. Ist die Alarmanlage geschärft und es kommt zu einem Alarm muss der Globale Signalgeber (LED) leuchten

c. Wenn dann unscharf geschaltet wird über einen 2ten Taster(Schalt Impuls von 1sec.) (Digitaler Eingang 6)
wird der Signalgeber Abgeschaltet.

Habe zu Punkt 3 noch keinen richtigen Ansatz gefunden vielleicht hat jemand eine Idee bzw. Ansatz dazu.

Aktuellen Sketch füge ich hinzu.

/*******************
*   Alarmanlage    *
********************/
int StatusEingang1 = 0;  //Variable zum speichern des eingelesen Wertes 
int ledPinAlarm = 13;    //Variable LED1
int Alarmlinie1 = A0;    //Mittlerer Anschluss Pin des Poti an Analog PIN A0
int val1 = LOW;
unsigned long ledMillis = 0;

int StatusEingang2 = 0;  //Variable zum speichern des eingelesen Wertes
int ledPinAlarm2 = 12;   //Variable LED2
int Alarmlinie2 = A1;    //Mittlerer Anschluss Pin des Poti an Analog PIN A1
int val2 = LOW;
unsigned long led2Millis = 0;

void setup()         // Initialisierung 
{                             
 //pinMode(ledPinAlarm,OUTPUT);  // LED-Pin13 als Alarm Ausgang 1
 pinMode(ledPinAlarm2,OUTPUT);   // LED-Pin12 als Globaler Alarm Ausgang 
 Serial.begin(9600);
} 

void loop()           // Endlosschleife
{ 
  StatusEingang1=analogRead(Alarmlinie1);   // Status eingang1 wird eingelesen, Widerstandswert
  StatusEingang2=analogRead(Alarmlinie2);   // Status eingang2 wird eingelesen, Widerstandswert
  val1=digitalRead(ledPinAlarm); 
  val2=digitalRead(ledPinAlarm2);
  //Serial.println(StatusEingang1);
  Serial.println(StatusEingang2);
  
 /******** 1te Abfrage Linie 1  ***********************************************************************************/ 
  if (StatusEingang1 <400 || StatusEingang1>620 || val2 == HIGH && led2Millis == 0) // Abfrage ob kleiner oder größer Wert 512 (Spannung ca.2,5V)

  {
     digitalWrite(ledPinAlarm2, HIGH);   // Alarm LED einschalten für Zeit x
     led2Millis = millis(); 
     //Serial.println(StatusEingang1);
  } 
  else if (led2Millis + 3000 < millis())
  {
     digitalWrite(ledPinAlarm2, LOW);   // Alarm LED Aus
     led2Millis =0;
     //Serial.println(StatusEingang1);
  }
  
 /******** 2te Abfrage Linie 2 ***********************************************************************************/
  if (StatusEingang2 <400 || StatusEingang2 >620) //&& val2 == HIGH && led2Millis == 0) // Abfrage ob kleiner oder größer Wert 512 (Spannung ca.2,5V)
  {
     digitalWrite(ledPinAlarm2, HIGH);   // Alarm LED einschalten für Zeit x
     led2Millis = millis();
     //Serial.println(StatusEingang2);
  }
  else if (led2Millis + 3000 < millis())
  {
     digitalWrite(ledPinAlarm2, LOW);   // Alarm LED Aus
     led2Millis =0;
     //Serial.println(StatusEingang2);
   
  }
  
}

@ Uwe

SPI Programmer bekomme ich Ende der Woche werde dann den Bootloader auf den scheinbar defekten Arduino UNU laden.

Besten Dank vorab

Gruss savana