• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Pomoc w kodzie
#1
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);
}
 
Odpowiedź
#2
To za każdym razem sprawdzaj, czy przycisk został puszczony. Jaki masz z tym problem?
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
(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.
 
Odpowiedź
#4
Witam,
Użyj zmiennej pomocniczej typu boolean, która będzie przechowywać poprzedni stan przycisku.
Pozdrawiam,
Tomek.
 
Odpowiedź
#5
(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?
 
Odpowiedź
#6
Witam,
Jeśli chcesz sprawdzać stan dwóch przycisków to pętla while nie będzie dobrym rozwiązaniem.
Pozdrawiam
 
Odpowiedź
#7
(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
 
Odpowiedź
#8
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.
 
Odpowiedź
#9
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?
 
Odpowiedź
#10
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.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości