Sterowanie jednym przyciskiem 2 diod

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
Emdine
Młodszy majsterkowicz
Posty: 11
Rejestracja: 11 sie 2015, 19:29

Sterowanie jednym przyciskiem 2 diod

Post autor: Emdine » 12 sie 2015, 19:51

Witam mam problem chciałbym stworzyć taki układzik w którym naciśnięciu przełącznika jeden raz zapala sie dioda 1, po kliknieciu 2x zapala sie dioda 2. Próbowałem napisać taki programik używając biblioteki clickbutton oraz przykładów z tej biblioteki lecz niestety nie poradziłem sobie z tym. Arduino posiadam od tygodnia więc proszę o wyrozumiałość

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


rumunn95
Majsterkowicz
Posty: 174
Rejestracja: 12 mar 2015, 18:32

Re: Sterowanie jednym przyciskiem 2 diod

Post autor: rumunn95 » 12 sie 2015, 20:03

Pokaz swoj kod .
Emdine
Młodszy majsterkowicz
Posty: 11
Rejestracja: 11 sie 2015, 19:29

Re: Sterowanie jednym przyciskiem 2 diod

Post autor: Emdine » 12 sie 2015, 20:22

/* ClickButton library demo

Blinks a LED according to different clicks on one button.

Short clicks:

Single click - Toggle LED on/off
Double click - Blink (Toggles LED 2 times/second)
Triple click - Fast blink (Toggles LED 5 times/second)

Long clicks (hold button for one second or longer on last click):

Single-click - Slow blink (Toggles LED every second)
Double-click - Sloow blink (Toggles LED every other second)
Triple-click - Slooow blink (Toggles LED every three seconds)


#include "ClickButton.h"

// the LED
const int ledPin = 10;
int ledState = 0;

// the Button
const int buttonPin1 = 4;
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);

// Arbitrary LED function
int LEDfunction = 0;


void setup()
{
pinMode(ledPin,OUTPUT);
pinMode(11, OUTPUT);

// Setup button timers (all in milliseconds / ms)
// (These are default if not set, but changeable for convenience)
button1.debounceTime = 20; // Debounce timer in ms
button1.multiclickTime = 250; // Time limit for multi clicks
button1.longClickTime = 1000; // time until "held-down clicks" register
}


void loop()
{
// Update button state
button1.Update();

// Save click codes in LEDfunction, as click codes are reset at next Update()
if (button1.clicks != 0) LEDfunction = button1.clicks;


// Simply toggle LED on single clicks
// (Cant use LEDfunction like the others here,
// as it would toggle on and off all the time)


// blink faster if double clicked
if(LEDfunction == 2) ledState = (millis()/500)%2;



// slower blink (must hold down button. 2 second loong blinks)
if(LEDfunction == -2) ledState = (millis()/2000)%2;




// update the LED
digitalWrite(ledPin,ledState);


button1.Update();

// Save click codes in LEDfunction, as click codes are reset at next Update()
if (button1.clicks != 0) LEDfunction = button1.clicks;


// Simply toggle LED on single clicks
// (Cant use LEDfunction like the others here,
// as it would toggle on and off all the time)
if(button1.clicks == 1) ledState = HIGH;



// slow blink (must hold down button. 1 second long blinks)
if(LEDfunction == -1) ledState = HIGH;



// update the LED
digitalWrite(11,ledState);
}

Wykorzystałem ten kod moje modyfikacje polegały na tym iż powiele wszystko co w void loop usuwajac klikniecie 2,3 w pierwszym i 1,2 w drugim dodałem też diode na pin 11. Tak zeby po kliknieciu zapala sie dioda 1 klikniecie dwukrotne powodowało by zapalenie sie diody nr 2. Lecz w takim układzie czy kliknąłem 2x czy 1x to i tak zawsze zapalają sie obie diody
stiven
Złota rączka
Posty: 1629
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Sterowanie jednym przyciskiem 2 diod

Post autor: stiven » 12 sie 2015, 21:28

Przeczytaj: http://majsterkowo.pl/forum/jak-wstawic ... t1834.html

To, że masz 2 diody, nie znaczy, że musisz mieć 2 razy w programie:

Kod: Zaznacz cały

button1.Update();

// Save click codes in LEDfunction, as click codes are reset at next Update()
if (button1.clicks != 0) LEDfunction = button1.clicks;
bo przycisk jest 1.

Ale dlatego, że masz 2 diody, to nie możesz mieć jednej wspólnej zmiennej ledState. Dlatego właśnie, że jest ona wspólna (ma tą samą nazwę), to zapalają się dwie diody jednocześnie.
ODPOWIEDZ

Strony partnerskie: