Przycisk.

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
Awatar użytkownika
kolijk
Starszy majsterkowicz
Posty: 294
Rejestracja: 22 lut 2016, 19:25

Przycisk.

Post autor: kolijk » 29 cze 2016, 09:34

Witam chcę zrobić w większym projekcie aby po wciśnięciu przycisku mrugała dioda led, a jeżeli wcisnę drugi raz przycisk dioda przestanie mrugać.Chcę aby to działało na zmiennej.

Mój kod:

Kod: Zaznacz cały

int przycisk = 0;

void setup() {
pinMode(13, OUTPUT);
pinMode(7, OUTPUT);
pinMode(4, INPUT_PULLUP);
pinMode(7, LOW);
}

void loop() {
if(digitalRead(4) == LOW){
przycisk = przycisk + 1;
}
if(przycisk == 1){
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
}
Czy da się zrobić to na zmiennej?
Domyślam się że musi po drugim wciśnięciu przycisku zmienna ustawić się na 0 ale nie wiem jak to zrobić.
"Większość programistów programuje nie dlatego, że spodziewają się zapłaty lub uwielbienia tłumów, ale dlatego, że programowanie jest dla nich zabawą." - Linus Torvalds

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


Awatar użytkownika
poliakustyczny
Młodszy majsterkowicz
Posty: 29
Rejestracja: 9 gru 2015, 09:55
Lokalizacja: Łódź

Re: Przycisk.

Post autor: poliakustyczny » 29 cze 2016, 09:59

Spróbuj tak:

Kod: Zaznacz cały

int przycisk = 0;

void setup() {
pinMode(13, OUTPUT);
pinMode(7, OUTPUT);
pinMode(4, INPUT_PULLUP);
pinMode(7, LOW);
}

void loop() {
if(digitalRead(4) == LOW){
przycisk = !przycisk;
}
if(przycisk == 1){
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
}
Awatar użytkownika
Slawek
Starszy majsterkowicz
Posty: 448
Rejestracja: 29 mar 2015, 15:05

Re: Przycisk.

Post autor: Slawek » 29 cze 2016, 11:16

Jak to bedzie na delayach to bedzie efekt taki, ze w trakcie delay mozesz do woli wciskac przycisk i przez ten czas nie bedzie reakcji.
Awatar użytkownika
kolijk
Starszy majsterkowicz
Posty: 294
Rejestracja: 22 lut 2016, 19:25

Re: Przycisk.

Post autor: kolijk » 29 cze 2016, 12:06

To wtedy jak to zrobić bo projekt od poliakustyczny nie działa.
"Większość programistów programuje nie dlatego, że spodziewają się zapłaty lub uwielbienia tłumów, ale dlatego, że programowanie jest dla nich zabawą." - Linus Torvalds
Matiyas
Młodszy majsterkowicz
Posty: 39
Rejestracja: 8 mar 2016, 19:44

Re: Przycisk.

Post autor: Matiyas » 29 cze 2016, 12:18

Na przerwaniach. Ale najpierw dowiedz się co to jest i sam spróbuj coś napisać. Nikt Ci gotowca nie da. Ale poprawić napewno pomoże.
Awatar użytkownika
ethanak
Złota rączka
Posty: 767
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Przycisk.

Post autor: ethanak » 29 cze 2016, 15:11

Spokojnie można to zrobić na delayach tylko trzeba pomyśleć.
a) delay musi być krótki - z doświadczenia optimum to ok. 20 msec
b) wykrywasz nie stan klawisza a zmianę stanu - czyli porównujesz bieżący stan z zapamiętanym z poprzedniego obrotu pętli
c) migotanie ledy można zrobić na sto sposobów - mój ulubiony to

Kod: Zaznacz cały

digitalWrite(pin, (millis() / 1000) & 1);
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
stiven
Złota rączka
Posty: 1641
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Przycisk.

Post autor: stiven » 29 cze 2016, 15:59

I wtedy można zrobić dodatkowo z tą zmienną przycisk, która jest użyta wcześniej w programie i wyjdzie coś takiego

Kod: Zaznacz cały

  digitalWrite(pin, ((millis() / 1000) & 1) & przycisk);
Tylko jeszcze poprawić trochę obsługę przycisku i będzie działać dobrze.
Awatar użytkownika
ethanak
Złota rączka
Posty: 767
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Przycisk.

Post autor: ethanak » 29 cze 2016, 16:26

w sumie wystarczy

Kod: Zaznacz cały

digitalWrite(pin, (millis() / 1000) & przycisk);
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
stiven
Złota rączka
Posty: 1641
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Przycisk.

Post autor: stiven » 29 cze 2016, 17:04

Rzeczywiście. Ogólne bardzo fajny pomysł, w jednej linijce całe mruganie diody. Myślałem się chwilę zastanowić jak to działa.
Awatar użytkownika
kolijk
Starszy majsterkowicz
Posty: 294
Rejestracja: 22 lut 2016, 19:25

Re: Przycisk.

Post autor: kolijk » 29 cze 2016, 17:58

Dzięki działa tak jak chciałem.
"Większość programistów programuje nie dlatego, że spodziewają się zapłaty lub uwielbienia tłumów, ale dlatego, że programowanie jest dla nich zabawą." - Linus Torvalds
ODPOWIEDZ

Strony partnerskie: