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
  Einfacher Tacho für niedrige Geschwindigkeiten – Code optimieren Bastelo 2 261 12.10.2016 20:31
Letzter Beitrag: Bastelo
  Code mit Verifikation über Keypad & LCD machnetz 5 215 10.10.2016 15:01
Letzter Beitrag: torsten_156
  Frage zu One Button in Kombination mit Fast LED Wolfgang_2801 3 241 26.06.2016 22:11
Letzter Beitrag: hotsystems
  Wo kann ich hier noch Code spahren? (SPI-,Ethernet-,SD-,GSM-Library) avoid 4 382 05.06.2016 14:16
Letzter Beitrag: avoid
  Serial Monitor Eingabe über Code Maxi290997 4 522 12.05.2016 18:57
Letzter Beitrag: SkobyMobil
  Problem: RFID code mit Inhalt einer Textdatei auf einer SD Karte vergleichen MartinK 6 514 29.03.2016 16:45
Letzter Beitrag: MartinK
  OSC Arduino Code Fabian_Fabian 5 435 10.03.2016 23:23
Letzter Beitrag: hotsystems
  Code bei fritzing Miro 3 1.378 08.02.2016 16:16
Letzter Beitrag: Uwa
  Leonardo- Anzeige von MIDI-Daten an ws2812b Modinox 7 483 26.01.2016 13:11
Letzter Beitrag: Bitklopfer
  Code für Würfel korrekt? JanGamer11 12 811 12.01.2016 19:41
Letzter Beitrag: Claus_M

Gehe zu:


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