INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Auf- und Abwärtszählen mit externem Tastendruck
15.04.2014, 20:08
Beitrag #1
Auf- und Abwärtszählen mit externem Tastendruck
Hallo Zusammen!
Bin Programmieranfänger und habe folgendes Problem:
Ich möchte mit zwei externen Relais (potentialfreier Kontakt als Öffner) eine Zahl rauf und runter zählen lassen und diese auf ein Display ausgeben. Das kleine Programm ist für eine Modell und soll eine Stellplatzanzeige für Parkdecks darstellen. Funktioniert eigentlich nicht schlecht, jedoch habe ich das Problem, dass die Zahl immer ins "laufen" anfängt, sobald ein Relais schaltet.
Ich nehme an, dass ich mehr oder weniger einen Flankenerkennung benötige. Hab auch diesbezüglich schon einiges probiert, jedoch leider immer ohne Erfolg.

Freue mich schon auf eure Ratschläge Tongue
Hier der Programmcode der mir mein leben vermießt Confused

#include <LiquidCrystal.h> //Einbindung Library für LCD-Display
#include <Wire.h> //Einbindung Library für Gerätekommunikation

LiquidCrystal lcd(8,9,4,5,6,7); //PIN-Belegung LCDDisplay
//globale Variablendeklaration
int Belegung = 40; //Variable für den aktuellen Zählerstand
int up = 2; //Eingang PIN 2 (Anzeige erhöhen)
int down = 3; //Eingang PIN 3 (Anzeige senken)
int merkerUp = 0; //Merker für Öffnung Einfahrtsschranke
int merkerDown = 0; //Merker für Öffnung Ausfahrtsschranke

void setup() //Hauptprogramm
{
lcd.begin(16,2); //Displaykonfiguration für 16 Zeichen, 2 Zeilen
Wire.begin(); //Initialisierung der Library <Wire.h>
pinMode(up, INPUT); //deklariert PIN 2 (Einfahrt) als Eingang
pinMode(down, INPUT); //deklariert PIN 3 (Ausfahrt) als Eingang

Starttext(); //springt zur Funktion Starttext
}

void loop() //Endlosschleife
{
merkerUp = digitalRead(up); //ließt den PIN 2 (up) ein
merkerDown = digitalRead(down); //ließt den PIN 3 (down) ein

if(merkerUp == LOW)
{
Belegung = Belegung++;
delay(1000);
lcd.clear();
}

if(merkerDown == LOW)
{
Belegung = Belegung-1;
delay(1000);
lcd.clear();
}
Stellplatzanzeige(); //springt zur Funktion Stellplatzanzeige
}

void Stellplatzanzeige() //Funktion Stellplatzanzeige
{

if(Belegung == 0) //Abfrage, ob 0 Stellpätze frei sind
{
lcd.setCursor(0,0);
lcd.print("Parkgarage");
lcd.setCursor(0,1);
lcd.print("besetzt");
}

if (Belegung == 1) //Abfrage, ob genau 1 Stellplatz frei ist
{
lcd.setCursor(0,0);
lcd.print(Belegung);
lcd.print(" freier");
lcd.setCursor(0,1);
lcd.print("Parklplatz");
}

if (Belegung >= 2) //Abfrage, ob >= 2 Stellplätze frei sind
{
lcd.setCursor(0,0);
lcd.print(Belegung);
lcd.print(" freie");
lcd.setCursor(0,1);
lcd.print("Parklplaetze");
}

if (Belegung > 40) //verhindert das Zählen in den negativen Bereich
Belegung = 40;

if (Belegung < 0) //verhindert das Zählen über max. Parkplatzanzahl
Belegung = 0;
}

void Starttext() //Funktion Starttextausgabe
{

}

DANKE für Eure Unterstützung
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.04.2014, 20:29
Beitrag #2
RE: Auf- und Abwärtszählen mit externem Tastendruck
(15.04.2014 20:08)ArduinoMan schrieb:  Hallo Zusammen!
Bin Programmieranfänger und habe folgendes Problem:
Ich möchte mit zwei externen Relais (potentialfreier Kontakt als Öffner) eine Zahl rauf und runter zählen lassen und diese auf ein Display ausgeben. Das kleine Programm ist für eine Modell und soll eine Stellplatzanzeige für Parkdecks darstellen. Funktioniert eigentlich nicht schlecht, jedoch habe ich das Problem, dass die Zahl immer ins "laufen" anfängt, sobald ein Relais schaltet.
Ich nehme an, dass ich mehr oder weniger einen Flankenerkennung benötige. Hab auch diesbezüglich schon einiges probiert, jedoch leider immer ohne Erfolg.

Freue mich schon auf eure Ratschläge Tongue
Hier der Programmcode der mir mein leben vermießt Confused

#include <LiquidCrystal.h> //Einbindung Library für LCD-Display
#include <Wire.h> //Einbindung Library für Gerätekommunikation

LiquidCrystal lcd(8,9,4,5,6,7); //PIN-Belegung LCDDisplay
//globale Variablendeklaration
int Belegung = 40; //Variable für den aktuellen Zählerstand
int up = 2; //Eingang PIN 2 (Anzeige erhöhen)
int down = 3; //Eingang PIN 3 (Anzeige senken)
int merkerUp = 0; //Merker für Öffnung Einfahrtsschranke
int merkerDown = 0; //Merker für Öffnung Ausfahrtsschranke

void setup() //Hauptprogramm
{
lcd.begin(16,2); //Displaykonfiguration für 16 Zeichen, 2 Zeilen
Wire.begin(); //Initialisierung der Library <Wire.h>
pinMode(up, INPUT); //deklariert PIN 2 (Einfahrt) als Eingang
pinMode(down, INPUT); //deklariert PIN 3 (Ausfahrt) als Eingang

Starttext(); //springt zur Funktion Starttext
}

void loop() //Endlosschleife
{
merkerUp = digitalRead(up); //ließt den PIN 2 (up) ein
merkerDown = digitalRead(down); //ließt den PIN 3 (down) ein

if(merkerUp == LOW)
{
Belegung = Belegung++;
delay(1000);
lcd.clear();
}

if(merkerDown == LOW)
{
Belegung = Belegung-1;
delay(1000);
lcd.clear();
}
Stellplatzanzeige(); //springt zur Funktion Stellplatzanzeige
}

void Stellplatzanzeige() //Funktion Stellplatzanzeige
{

if(Belegung == 0) //Abfrage, ob 0 Stellpätze frei sind
{
lcd.setCursor(0,0);
lcd.print("Parkgarage");
lcd.setCursor(0,1);
lcd.print("besetzt");
}

if (Belegung == 1) //Abfrage, ob genau 1 Stellplatz frei ist
{
lcd.setCursor(0,0);
lcd.print(Belegung);
lcd.print(" freier");
lcd.setCursor(0,1);
lcd.print("Parklplatz");
}

if (Belegung >= 2) //Abfrage, ob >= 2 Stellplätze frei sind
{
lcd.setCursor(0,0);
lcd.print(Belegung);
lcd.print(" freie");
lcd.setCursor(0,1);
lcd.print("Parklplaetze");
}

if (Belegung > 40) //verhindert das Zählen in den negativen Bereich
Belegung = 40;

if (Belegung < 0) //verhindert das Zählen über max. Parkplatzanzahl
Belegung = 0;
}

void Starttext() //Funktion Starttextausgabe
{

}

DANKE für Eure Unterstützung

...Hallo,
..ähm sehe ich das richtig, du steuerst mit einem Relaiskontakt ein Display an das einen UP und DOWN Count Eingang hat ?.... das sind wohl elektronische Eingänge und die sind eben schneller im zählen wie du annimmst. Wenn ein Relais oder Schaltkontakt zu oder auf geht dann können das bei einem elektronischen Zähler locker mal 50 und mehr Impulse sein... ein Optokoppler könnte da helfen um das Problem zu fixen.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.04.2014, 20:53
Beitrag #3
RE: Auf- und Abwärtszählen mit externem Tastendruck
(15.04.2014 20:29)Bitklopfer schrieb:  
(15.04.2014 20:08)ArduinoMan schrieb:  Hallo Zusammen!
Bin Programmieranfänger und habe folgendes Problem:
Ich möchte mit zwei externen Relais (potentialfreier Kontakt als Öffner) eine Zahl rauf und runter zählen lassen und diese auf ein Display ausgeben. Das kleine Programm ist für eine Modell und soll eine Stellplatzanzeige für Parkdecks darstellen. Funktioniert eigentlich nicht schlecht, jedoch habe ich das Problem, dass die Zahl immer ins "laufen" anfängt, sobald ein Relais schaltet.
Ich nehme an, dass ich mehr oder weniger einen Flankenerkennung benötige. Hab auch diesbezüglich schon einiges probiert, jedoch leider immer ohne Erfolg.

Freue mich schon auf eure Ratschläge Tongue
Hier der Programmcode der mir mein leben vermießt Confused

#include <LiquidCrystal.h> //Einbindung Library für LCD-Display
#include <Wire.h> //Einbindung Library für Gerätekommunikation

LiquidCrystal lcd(8,9,4,5,6,7); //PIN-Belegung LCDDisplay
//globale Variablendeklaration
int Belegung = 40; //Variable für den aktuellen Zählerstand
int up = 2; //Eingang PIN 2 (Anzeige erhöhen)
int down = 3; //Eingang PIN 3 (Anzeige senken)
int merkerUp = 0; //Merker für Öffnung Einfahrtsschranke
int merkerDown = 0; //Merker für Öffnung Ausfahrtsschranke

void setup() //Hauptprogramm
{
lcd.begin(16,2); //Displaykonfiguration für 16 Zeichen, 2 Zeilen
Wire.begin(); //Initialisierung der Library <Wire.h>
pinMode(up, INPUT); //deklariert PIN 2 (Einfahrt) als Eingang
pinMode(down, INPUT); //deklariert PIN 3 (Ausfahrt) als Eingang

Starttext(); //springt zur Funktion Starttext
}

void loop() //Endlosschleife
{
merkerUp = digitalRead(up); //ließt den PIN 2 (up) ein
merkerDown = digitalRead(down); //ließt den PIN 3 (down) ein

if(merkerUp == LOW)
{
Belegung = Belegung++;
delay(1000);
lcd.clear();
}

if(merkerDown == LOW)
{
Belegung = Belegung-1;
delay(1000);
lcd.clear();
}
Stellplatzanzeige(); //springt zur Funktion Stellplatzanzeige
}

void Stellplatzanzeige() //Funktion Stellplatzanzeige
{

if(Belegung == 0) //Abfrage, ob 0 Stellpätze frei sind
{
lcd.setCursor(0,0);
lcd.print("Parkgarage");
lcd.setCursor(0,1);
lcd.print("besetzt");
}

if (Belegung == 1) //Abfrage, ob genau 1 Stellplatz frei ist
{
lcd.setCursor(0,0);
lcd.print(Belegung);
lcd.print(" freier");
lcd.setCursor(0,1);
lcd.print("Parklplatz");
}

if (Belegung >= 2) //Abfrage, ob >= 2 Stellplätze frei sind
{
lcd.setCursor(0,0);
lcd.print(Belegung);
lcd.print(" freie");
lcd.setCursor(0,1);
lcd.print("Parklplaetze");
}

if (Belegung > 40) //verhindert das Zählen in den negativen Bereich
Belegung = 40;

if (Belegung < 0) //verhindert das Zählen über max. Parkplatzanzahl
Belegung = 0;
}

void Starttext() //Funktion Starttextausgabe
{

}

DANKE für Eure Unterstützung

...Hallo,
..ähm sehe ich das richtig, du steuerst mit einem Relaiskontakt ein Display an das einen UP und DOWN Count Eingang hat ?.... das sind wohl elektronische Eingänge und die sind eben schneller im zählen wie du annimmst. Wenn ein Relais oder Schaltkontakt zu oder auf geht dann können das bei einem elektronischen Zähler locker mal 50 und mehr Impulse sein... ein Optokoppler könnte da helfen um das Problem zu fixen.
lg
bk

Hallo bk!
Ich glaube da gibt es ein Missverständnis. Am Eingang 2 bzw. 3 liegen 5V (HIGH) an. Sobald das Relais 1 oder 2 öffnet (==LOW) soll die Variable Belegung +1 bzw. -1 erkennen. Offensichtlich bin ich mit meiner Vermutung richtig, dass der Takt des Arduinos zu schnell für mein Relais ist. Darum auch meine Idee dies mit einer "Flankenerkennung" zu realisieren => auf/zu des Relais => +1 bzw. -1 der Variablen Belegung. Ich nehme an, dass ich hier eine neue Variable deklarieren muss, welche mir den alten Zustand (HIGH, LOW) zwischenspeichert und dann mit dem aktuellen Wert vergleicht. Genau da bin ich leider mit meinem Anfangskenntnissen am Ende......glaube ichTongue
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.04.2014, 21:46
Beitrag #4
RE: Auf- und Abwärtszählen mit externem Tastendruck
Zitat:Hallo bk!
Ich glaube da gibt es ein Missverständnis. Am Eingang 2 bzw. 3 liegen 5V (HIGH) an. Sobald das Relais 1 oder 2 öffnet (==LOW) soll die Variable Belegung +1 bzw. -1 erkennen. Offensichtlich bin ich mit meiner Vermutung richtig, dass der Takt des Arduinos zu schnell für mein Relais ist. Darum auch meine Idee dies mit einer "Flankenerkennung" zu realisieren => auf/zu des Relais => +1 bzw. -1 der Variablen Belegung. Ich nehme an, dass ich hier eine neue Variable deklarieren muss, welche mir den alten Zustand (HIGH, LOW) zwischenspeichert und dann mit dem aktuellen Wert vergleicht. Genau da bin ich leider mit meinem Anfangskenntnissen am Ende......glaube ichTongue

ah...sorry okay....gerade andersrum ist das. Dann mußt du den Arduino Eingang entprellen. Da könntest du auf eine debounce Library zurückgreifen.... Google doch mal nach "Arduino debounce.h", denke mal dann wirste fündig. Debounce heißt entprellen....ein altes leidiges Thema bei Digitalen Eingängen. Oder wieder der Verweis auf den Optokoppler nur andersrum....aber wenn du da mit einem Parkhaus zu tun hast dann sind wohl die Taktausgänge wo das Plus und Minus signalisieren auch mechanische Kontakte wo prellen und somit hilft der Optokoppler auch nichts.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Tastendruck binderj1 2 185 23.09.2016 15:43
Letzter Beitrag: hotsystems
  Bei Tastendruck ein Ausgang mehr dazu.... hannes77 2 986 07.03.2016 20:48
Letzter Beitrag: hannes77
  bei Tastendruck Variable immer +1 matze.lingen 8 3.408 04.05.2015 13:45
Letzter Beitrag: SkobyMobil
  Tastendruck + LCD Display Ekoino 4 1.304 12.12.2014 22:32
Letzter Beitrag: Ekoino

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste