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, 10:57
Beitrag #9
RE: Jeffs 4-Way Button Code auf Arduino Leonardo?
Danke dir. Code läuft durch den Compiler durch. Habe nun versucht statt LEDs anzusprechen eine Key auszugegeben. Aber irgendwie begreife ich das nicht.

Egal was und wie ich drücke, er wirft erst ein 'g' und eine Sekunde später ein 'h'
aus.

Vielleicht kann mir einer erklären, warum das so ist.

Zitat:#include <Keyboard.h>

/* 4-Way Button: Click, Double-Click, Press+Hold, and Press+Long-Hold Test Sketch
By Jeff Saltzman
Oct. 13, 2009

To keep a physical interface as simple as possible, this sketch demonstrates generating four output events from a single push-button.
1) Click: rapid press and release
2) Double-Click: two clicks in quick succession
3) Press and Hold: holding the button down
4) Long Press and Hold: holding the button down for a long time
*/

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


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

void setup()
{
// 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() {
Keyboard.press(101); // e
delay(100);
Keyboard.releaseAll();
}

void doubleClickEvent() {
Keyboard.press(102); // f
delay(100);
Keyboard.releaseAll();
}

void holdEvent() {
Keyboard.press(103); // g
delay(100);
Keyboard.releaseAll();
}

void longHoldEvent() {
Keyboard.press(104); // h
delay(100);
Keyboard.releaseAll();
}

/*
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
15.11.2015, 11:36
Beitrag #10
RE: Jeffs 4-Way Button Code auf Arduino Leonardo?
ich seh grad nirgends einen serial.print oder ähnliches, wie gedenkst du denn eine ausgabe "lesbar" zu generieren?

gruss

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 12:56 (Dieser Beitrag wurde zuletzt bearbeitet: 15.11.2015 13:39 von noxx.)
Beitrag #11
RE: Jeffs 4-Way Button Code auf Arduino Leonardo?
So

void clickEvent() {
Keyboard.press(101); // e
delay(100);
Keyboard.releaseAll();
}

Ausgabe klappt ja, nur irgendwie nicht richtig.

Edit:
Ich habe mir mal ein Buch und das Starter Kit bestellt,
kann ja nicht schaden. Aber evtl mag trotzdem
Einer helfen.

Am Ende soll es eine Steuerung für kodi sein und eine Tastatur simulieren.
Das ganze mit 2 Drehencoder.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 13:35
Beitrag #12
RE: Jeffs 4-Way Button Code auf Arduino Leonardo?
ok, sorry
da bin ich dann raus Smile

viel erfolg noch!

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 13:45
Beitrag #13
RE: Jeffs 4-Way Button Code auf Arduino Leonardo?
Warum? Weil keine Lust?

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 14:17
Beitrag #14
RE: Jeffs 4-Way Button Code auf Arduino Leonardo?
nein, mir sagt die library einfach gar nichts, wenn ich raten sollte hat das was mit dem format zu tun, zb sowas wie char(nachricht) oder string(nachricht) o.ä., kann aber auch sein das deine anweisung falsch ist (101) oder so

anderer seits sehe ich das wenn du immer h und g raus bekommst, der event falsch gelesen wird, uu pullup mal nachlesen oder verkabelung testen!

99% aller fehler liegen im kabel Wink (abstrakt gedacht)


gruss hilgi

Nicht denken,...
...nachdenken... Rolleyes
http://capsicum-felicitas.de.tl
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 15:16
Beitrag #15
RE: Jeffs 4-Way Button Code auf Arduino Leonardo?
(15.11.2015 14:17)Hilgi schrieb:  99% aller fehler liegen im kabel Wink (abstrakt gedacht)

NEIN, in der Fachwelt heißt es:
Das Problem sitzt vor dem Monitor. Wink

Aber es ist schon richtig, wenn der TO sich in die Basics einarbeitet, anders versteht er auch nicht, was es mit den Änderungen auf sich hat.

Und wenn wir schreiben, man muss sich da einarbeiten, hat es sicher seinen Grund.
Wir sitzen hier ja nicht aus langer Weile, sondern versuchen zu helfen.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.11.2015, 16:22
Beitrag #16
RE: Jeffs 4-Way Button Code auf Arduino Leonardo?
(15.11.2015 15:26)Lötzinnerhitzer schrieb:  und wir machen es aus "Spaß an der Freude" - unentgeltlich, freiwillig, ohne Zwang ...
(und leider auch immer häufiger ohne Dank)

Big Grin

Das ist leider richtig.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
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