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:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Jeffs 4-Way Button Code auf Arduino Leonardo?
15.11.2015, 17:57
Beitrag #17
RE: Jeffs 4-Way Button Code auf Arduino Leonardo?
Ich habe sicherlich kein Problem danke zu sagen Angel

Aber bei vielen Dingen kommen die Fragen leider erst, wenn
man ein Projekt vor der Nase hat.

Bei mir steht aktuell ein Projekt an, wo ich mit einem Drehencoder eine
Tastatur simulieren muss. Google hat mich auf den Arduino Leonardo
gebracht, da er als HID-Device laufen kann.

Also, das Ding erstmal bestellt. Dachte es wäre einfacher, da ich
einige Samples im Netz gefunden habe.

Leider laufen die nicht so, wie ich mir das vorgestellt habe. Ist dann natürlich
schade, das ich meine Projekt "Jukebox" vorerst auf Eis legen muss, um Grundlagen
zu lernen.

Habe mir folgendes geordert, möchte denke ich könnte den Arduino auch noch
für andere Projekte nutzten:
Produkt-Information
KIT: SunFounder Starter Learning Kit for Arduino Beginner, from Knowing to Utilizing
BUCH: Die elektronische Welt mit Arduino entdecken

Wenn einer aber dennoch helfen kann, schonmal ein danke im Voraus.

Gruß

PS: Die Verkabelung ist i.O. Blush
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.11.2015, 20:30 (Dieser Beitrag wurde zuletzt bearbeitet: 16.11.2015 20:31 von noxx.)
Beitrag #18
RE: Jeffs 4-Way Button Code auf Arduino Leonardo?
Hallo,

habe nun die Ausgabe geändert um mir das im Serial Monitor anzugucken, aber der gibt nur aus
Klick und halte kurz
Klick und halte lang
und zwar immer beide Zeilen. Erst Zeile 1, eine Sekunde danach Zeile 2.
egal was und wie ich drücke....


Code:
#define buttonPin 4 // analog input pin to use as a digital input


//=================================================

void setup()
{
Serial.begin(9600);  
// Set button input pin
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH );
}

void loop()
{
// Get button event and act accordingly
int b = checkButton();
if (b == 1) clickEvent();
if (b == 2) doubleClickEvent();
if (b == 3) holdEvent();
if (b == 4) longHoldEvent();
}

//=================================================
// Events to trigger by click and press+hold

void clickEvent() {
Serial.print("Klick einfach\n");
}

void doubleClickEvent() {
Serial.print("Doppelklick\n");
}

void holdEvent() {
Serial.print("Klick und halte kurz\n");
}

void longHoldEvent() {
Serial.print("Klick und halte lang\n");
}

/*
MULTI-CLICK: One Button, Multiple Events

Oct 12, 2009
Run checkButton() to retrieve a button event:
Click
Double-Click
Hold
Long Hold
*/

// Button timing variables
int debounce = 20; // ms debounce period to prevent flickering when pressing or releasing the button
int DCgap = 250; // max ms between clicks for a double click event
int holdTime = 2000; // ms hold period: how long to wait for press+hold event
int longHoldTime = 5000; // ms long hold period: how long to wait for press+hold event

// Other button variables
boolean buttonVal = HIGH; // value read from button
boolean buttonLast = HIGH; // buffered value of the button's previous state
boolean DCwaiting = false; // whether we're waiting for a double click (down)
boolean DConUp = false; // whether to register a double click on next release, or whether to wait and click
boolean singleOK = true; // whether it's OK to do a single click
long downTime = -1; // time the button was pressed down
long upTime = -1; // time the button was released
boolean ignoreUp = false; // whether to ignore the button release because the click+hold was triggered
boolean waitForUp = false; // when held, whether to wait for the up event
boolean holdEventPast = false; // whether or not the hold event happened already
boolean longHoldEventPast = false;// whether or not the long hold event happened already

int checkButton()
{
int event = 0;
// Read the state of the button
buttonVal = digitalRead(buttonPin);
// Button pressed down
if (buttonVal == LOW && buttonLast == HIGH && (millis() - upTime) > debounce) {
downTime = millis();
ignoreUp = false;
waitForUp = false;
singleOK = true;
holdEventPast = false;
longHoldEventPast = false;
if ((millis()-upTime) < DCgap && DConUp == false && DCwaiting == true) DConUp = true;
else DConUp = false;
DCwaiting = false;
}
// Button released
else if (buttonVal == HIGH && buttonLast == LOW && (millis() - downTime) > debounce) {
if (not ignoreUp) {
upTime = millis();
if (DConUp == false) DCwaiting = true;
else {
event = 2;
DConUp = false;
DCwaiting = false;
singleOK = false;
}
}
}
// Test for normal click event: DCgap expired
if ( buttonVal == HIGH && (millis()-upTime) >= DCgap && DCwaiting == true && DConUp == false && singleOK == true) {
event = 1;
DCwaiting = false;
}
// Test for hold
if (buttonVal == LOW && (millis() - downTime) >= holdTime) {
// Trigger "normal" hold
if (not holdEventPast) {
event = 3;
waitForUp = true;
ignoreUp = true;
DConUp = false;
DCwaiting = false;
//downTime = millis();
holdEventPast = true;
}
// Trigger "long" hold
if ((millis() - downTime) >= longHoldTime) {
if (not longHoldEventPast) {
event = 4;
longHoldEventPast = true;
}
}
}
buttonLast = buttonVal;
return event;
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Tongue Visual Studio Code als Editor für die Entwicklung von Arduino Code Klaus(i) 1 164 03.09.2017 19:15
Letzter Beitrag: Mathias
  Volume Up falscher Tastatur Hex-Code Maxi290997 7 457 03.07.2017 21:49
Letzter Beitrag: Maxi290997
  delay(...) im Code ok? donut 4 392 08.06.2017 20:16
Letzter Beitrag: donut
  Textdokument in Arduino Code umwandeln Tellen 9 541 03.06.2017 16:30
Letzter Beitrag: Tellen
  Firmata (Daten senden an den Arduino und empfangen vom Arduino) comfan 6 907 29.04.2017 14:29
Letzter Beitrag: hotsystems
  TFT Pixel to Code oOSpikeOo 5 365 06.04.2017 18:49
Letzter Beitrag: Tommy56
  Servo-Ansteuerung über einen Push-Button Aubergine83 1 375 16.02.2017 19:49
Letzter Beitrag: georg01
  Tri-State Code ?? Franz54 3 341 12.02.2017 19:23
Letzter Beitrag: Franz54
  Code aus 1.6.9 geht mit 1.8.1 nicht mehr zu kompilieren DL1AKP 7 670 02.02.2017 12:16
Letzter Beitrag: Tommy56
  Leonardo futsch? kpc 7 431 14.12.2016 23:53
Letzter Beitrag: Tommy56

Gehe zu:


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