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
Smile Motorsteuerung mit Taster Eggi123 11 472 26.02.2017 15:48
Letzter Beitrag: MicroBahner
  Arduino-UNO LED über Taster digital zum leuchten zu bringen IvKriz 9 377 18.02.2017 08:33
Letzter Beitrag: renid55
  Hilfe bei Taster huber5093 11 357 14.02.2017 19:26
Letzter Beitrag: Tommy56
  8 Taster an einem Pin Kitt 9 530 04.02.2017 18:51
Letzter Beitrag: ardu_arne
  Led Impuls beim Taster betätigen clemens5555 11 507 17.01.2017 20:00
Letzter Beitrag: renid55
  Über drei Taster zwei externe Timer steuern Sidamo 23 683 09.01.2017 20:12
Letzter Beitrag: Tommy56
  Led mit taster ausschalten Frankeg 17 799 07.01.2017 21:17
Letzter Beitrag: renid55
  aufeinander Aufbauende Lichtaktion mit einem Taster Colby 9 510 17.12.2016 13:30
Letzter Beitrag: Colby
  mehrere Taster entprellen Kitt 15 1.038 24.10.2016 21:17
Letzter Beitrag: georg01
  Taster für mehrere Funktionen matthias3579 5 577 16.08.2016 16:00
Letzter Beitrag: StephanBuerger

Gehe zu:


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