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
led taster
20.09.2014, 13:16 (Dieser Beitrag wurde zuletzt bearbeitet: 20.09.2014 13:22 von Jadopack.)
Beitrag #1
led taster
Hallo Leute,
Ich bin neu hier in der Materie und ein absoluter Anfänger mit dem Arduino Projekt!
Aber Übung macht ja bekanntlich den Meister!

Ich will eine Taschenlampe bauen, die per Taster gesteuert wird!
Sie soll bei 2sek druck angehen, dabei aber einmal blinken und anbleiben und das ganze auch wenn sie ausgeschaltet wird!

Jetzt habe ich mich beim entprellen des Tasters irgendwie verrant!
Kann mir jemand tips für Codes geben?
Ich benutze ein Arduino UNO Board und bespiele damit einen attiny45!
Gruß Dennis
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 13:27
Beitrag #2
RE: led taster
(20.09.2014 13:16)Jadopack schrieb:  
Ich will eine Taschenlampe bauen, die per Taster gesteuert wird!
Sie soll bei 2sek druck angehen, dabei aber einmal blinken und anbleiben und das ganze auch wenn sie ausgeschaltet wird!

Jetzt habe ich mich beim entprellen des Tasters irgendwie verrant!
Hi,
wenn Du sowieso einen zwei Sekunden langen Tastendruck voraussetzt, dann musst Du nicht noch zusätzlich entprellen. Entprellen bedeutet ja im Prinzip, dass Du nur Tastendrücke von mehr als ca. 50ms Länge als echte Tastendrücke wertest.
Um Dir Tipps zum Coding zu geben wäre es hilfreich, wenn Du mal Dein bisheriges Coding hier reinstellst.
Vielleicht ein Tipp vorab: Wenn es ein delay(...) enthält, dann ist es wahrscheinlich falsch.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 13:31
Beitrag #3
RE: led taster
Den einzelnen Tastendruck benötige ich für eine zusatzfunktion mit einem wtv020 soundmodul!
Daher war ich auf das entprellen angewiesen!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 13:34
Beitrag #4
RE: led taster
(20.09.2014 13:31)Jadopack schrieb:  Den einzelnen Tastendruck benötige ich für eine zusatzfunktion mit einem wtv020 soundmodul!
Ah, also hast Du sowohl lange als auch kurze Tastendrücke.
...aber trotzdem: Zeig erstmal Dein Coding.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 13:37 (Dieser Beitrag wurde zuletzt bearbeitet: 20.09.2014 13:38 von Jadopack.)
Beitrag #5
RE: led taster
* Led Leuchtet nach Tastendruck einmal kurz auf und Bleibt nach kurzer
* Pause dauerhaft an.
*
*
*
* Dennis Molsberger
* 18.9.2014
*/

int Taster = 2; // Pinnummer des Tasters
int LED = 3; // Pinnummer der Led

int state = LOW; // Derzeitiger Status der Led
int reading; // the current reading from the input pin
int previous = LOW; // the previous reading from the input pin

// the follow variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.

long time = 0; // the last time the output pin was toggled
long debounce = 200; // the debounce time, increase if the output flickers

void setup()
{
pinMode(Taster, INPUT);
pinMode(LED, OUTPUT);
}

void loop()
{
reading = digitalRead(Taster);

// if the input just went from LOW and HIGH and we've waited long enough
// to ignore any noise on the circuit, toggle the output pin and remember
// the time
if (reading == HIGH && previous == LOW && millis() - time > debounce) {
if (state == HIGH)
state = LOW;
else
state = HIGH;

time = millis();
}
delay(500);
digitalWrite(LED, HIGH); //LED Soll einmal aufblinken
delay(500);
digitalWrite(LED, LOW); //Led soll weiter durchgehend leuchten
digitalWrite(LED, state);

previous = reading;
}

Und Bitte nicht lachen,
Sind meine ersten GehversucheBig Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 14:35
Beitrag #6
RE: led taster
Hi,
ok, vergessen wir mal das mit den 2 Sekunden bzw. der Unterscheidung zwischen langem und kurzem Tastendruck.
Zitat:
Code:
// the follow variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.

long time = 0; // the last time the output pin was toggled
long debounce = 200; // the debounce time, increase if the output flickers
Du hast richtig erkannt, dass die millis() nicht in ein int reinpassen. Ein long ist aber auch nicht richtig. Du brauchst ein unsigned long, sonst wird die Zeit irgendwann negativ und dann wird's ganz komisch.
Bei debounce hast Du das Problem aber nicht. Das passt immer in einen int, da Du ja nicht mehrere Tage lange Tastendrücke brauchst. Außerdem reicht in der Regel zum Entprellen 50ms. 200ms fühlen sich schon wie ein etwas längerer Tastendruck an.
Außerdem willst Du in time nicht wirklich speichern, wann die Lampe das letzte mal aus oder an ging, oder? Das ist eigentlich egal. Du willst wissen, wann der Zustand des Eingangs sich das letzte Mal geändert hat. Du willst ja nur dann was machen, wenn der Eingang die letzten x ms gleich geblieben ist.
Also:
Code:
unsigned long time = 0; // the last time the input changed
int debounce = 50; // the debounce time, increase if the output flickers

Zitat:
Code:
if (reading == HIGH && previous == LOW && millis() - time > debounce) {
Das hier prüft, ob seit dem letzten Mal Taste drücken x ms vergangen sind. Das ist aber nicht, was Du willst. Du willst wissen, ob die Taste die letzten ms auf High war.
Das geht in etwa so:
Code:
unsigned long now = millis();
if(reading != previous) {   // input changed
    time = now;    
    previous = reading;
};
if(reading && now - time > debounce) {   // HIGH seit x ms
   digitalWrite(LED, !state); //LED Soll einmal aufblinken
   delay(500);
   digitalWrite(LED, state);
   delay(500);
   state != state;
   digitalWrite(LED, state);
}
(Nicht ausprobiert, nur so aus dem Kopf.)
Möglicherweise fehlen hier noch Details. Z.B. geht die Lampe wieder aus, wenn man den Knopf über eine Sekunde lang nicht loslässt.

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 15:24
Beitrag #7
RE: led taster
/*
*
* Led Leuchtet nach Tastendruck einmal kurz auf und Bleibt nach kurzer
* Pause dauerhaft an.
*
*
*
*
*/

int Taster = 2; // Pinnummer des Tasters
int LED = 3; // Pinnummer der Led

int state = LOW; // Derzeitiger Status der Led
int reading; // the current reading from the input pin
int previous = LOW; // the previous reading from the input pin

// the follow variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.

unsigned long time = 0; // the last time the input changed
int debounce = 50; // the debounce time, increase if the output flickers

void setup()
{
pinMode(Taster, INPUT);
pinMode(LED, OUTPUT);
}

void loop()
{
reading = digitalRead(Taster);

// if the input just went from LOW and HIGH and we've waited long enough
// to ignore any noise on the circuit, toggle the output pin and remember
// the time
unsigned long now = millis();
if(reading != previous) { // input changed
time = now;
previous = reading;
};
if(reading && now - time > debounce) { // HIGH seit x ms
digitalWrite(LED, !state); //LED Soll einmal aufblinken
delay(500);
digitalWrite(LED, state);
delay(500);
state != state;
digitalWrite(LED, state);
}

if (state == HIGH)
state = LOW;
else
state = HIGH;

time = millis();
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.09.2014, 15:42 (Dieser Beitrag wurde zuletzt bearbeitet: 20.09.2014 15:44 von Thorsten Pferdekämper.)
Beitrag #8
RE: led taster
Code:
if (state == HIGH)
state = LOW;
else
state = HIGH;

time = millis();
Das macht natürlich alles wieder kaputt. Schmeiß das raus.

Sorry, stimmt nicht ganz.
Die Zeile
state != state;
in meinem Coding muss heißen
state ~= state;
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  mehrere Taster entprellen Kitt 15 504 24.10.2016 21:17
Letzter Beitrag: georg01
  Taster für mehrere Funktionen matthias3579 5 345 16.08.2016 16:00
Letzter Beitrag: StephanBuerger
  Steuern von 4 Servo mittels eines Taster und eines Potis Jackie09 17 751 16.07.2016 11:43
Letzter Beitrag: Binatone
  Schwellwert mit Taster ändern malsehen 16 1.410 12.04.2016 20:11
Letzter Beitrag: malsehen
  3 Schrittmotoren, 2 LED's 1 Taster cichla 0 389 31.03.2016 15:21
Letzter Beitrag: cichla
  Arduino Alarmanlage mit Taster erweitern Vengance 0 519 22.03.2016 17:54
Letzter Beitrag: Vengance
  Taster abfragen Rudi 3 688 25.02.2016 14:03
Letzter Beitrag: hotsystems
  digitalOutputpin mit Taster an- oder ausschalten Raptor 2 565 26.12.2015 20:59
Letzter Beitrag: torsten_156
  Problem mit Taster eddykett 0 778 23.08.2015 10:16
Letzter Beitrag: eddykett
  Taster-Programm TheTerrawr 2 1.054 06.08.2015 16:24
Letzter Beitrag: TheTerrawr

Gehe zu:


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