Arduino Polska Forum

Pełna wersja: Pomoc w kodzie
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Witam uczę się programować Arduino. Mam zadanie napisać program który będzie za każdym użyciem przycisku wykonywał -- lub ++. Program jest już prawie gotowy problem w tym że po użyciu przycisku wartość się zmienia przez czas wciśnięcia przycisku, zależy mi na tym żeby wartość podnosiła się lub spadała dokładnie o 1 za każdym naciśnięciem. Myślałem nad użyciem pętli while. Proszę o podpowiedz w rozwiązaniu problemu. 

Kod:
int a=0;
void setup() {

pinMode (4, INPUT_PULLUP);  
pinMode (7, INPUT_PULLUP);  
  Serial.begin(9600);    


}

void loop() {
 if (digitalRead (4) == LOW) // przycisk numer 4 włączony
 {
   a++;
 }
 if (digitalRead (7) == LOW) // przycisk numer 7 włączony
 {
  a--;
  }
 
Serial.println (a);
}
To za każdym razem sprawdzaj, czy przycisk został puszczony. Jaki masz z tym problem?
(23-02-2018, 22:40)Robson Kerman napisał(a): [ -> ]To za każdym razem sprawdzaj, czy przycisk został puszczony. Jaki masz z tym problem?
Nie wiem czego użyć w tym celu.
Witam,
Użyj zmiennej pomocniczej typu boolean, która będzie przechowywać poprzedni stan przycisku.
Pozdrawiam,
Tomek.
(26-02-2018, 13:05)Smaczek napisał(a): [ -> ]Witam,
Użyj zmiennej pomocniczej typu boolean, która będzie przechowywać poprzedni stan przycisku.
Pozdrawiam,
Tomek.
A mógłbym zrobić to dodając do kodu pętle while?
Witam,
Jeśli chcesz sprawdzać stan dwóch przycisków to pętla while nie będzie dobrym rozwiązaniem.
Pozdrawiam
(26-02-2018, 13:05)Smaczek napisał(a): [ -> ]Witam,
Użyj zmiennej pomocniczej typu boolean, która będzie przechowywać poprzedni stan przycisku.
Pozdrawiam,
Tomek.

Jak mogę zadeklarować tą zmienną? I jak to się ma do reszty kodu? Znajdę jakiś poradnik, artykuł odnośnie używania boolean?
Bardzo dziekuje za pomoc
Witam,
Odnośnie zmiennych masz wszystko na oficjalnej stronie Arduino.
Zmienną deklarujesz na samym początku programu i przypisujesz jej wartość HIGH. W pętli loop() w programie masz if-a w którym sprawdzasz stan przycisku (czy jest LOW). Musisz tam dodatkowo umieścić warunek, który będzie CI zwiększał wartość zmiennej a ale tylko wtedy, gdy wartość zmiennej boolean jest HIGH. Dodatkowo, jeśli odczyt stanu przycisku jest różny od wartości zmiennej boolean to należy jej wartość zmienić na przeciwną (LOW->HIGH lub HIGH->LOW), czyli aktualny stan przycisku. Podobnie dla drugiego przycisku (czyli potrzeba jest dwóch zmiennych typu boolean). Takie rozwiązanie nie będzie uwzględniać tzw. zjawiska drgania styków, ale to z kolei można wyeliminować dokładając "małego" delay().
Pozdrawiam,
Tomek.
Kod:
int a;
boolean b = HIGH;
boolean c = HIGH;

void setup() {

pinMode (4, INPUT_PULLUP);  
pinMode (7, INPUT_PULLUP);  
  Serial.begin(9600);    


}

void loop() {
boolean b = digitalRead (4);
boolean c = digitalRead (7);
if (digitalRead (4) == LOW, b = HIGH)
{
   delay(5);
   a++;
  
}
if (digitalRead (7) == LOW, c = HIGH)
{
  delay (5);
  a--;
  }


Serial.println (a);
}

Nie działa, w czym mam błąd?
Witam,
To, w jaki sposób "poprawiłeś" kod świadczy, że ... jeszcze dużo nauki przed Tobą.
Przede wszystkim masz jakąś dziwną konstrukcję dwóch warunków w if-ach!!
Wyrzuć (ponowną) deklarację zmiennych z loop().
Sugeruję, po uwzględnieniu powyższego:
if(digitalRead(4) != b)
{
if (b == HIGH) a++;
b = !b;
}
Plus ewentualnie jakiś delay();
Pozdrawiam,
Tomek.
Stron: 1 2