Skocz do zawartości

Arduino zliczanie zwarć kontaktronu


piter161

Pomocna odpowiedź

Mam problem z kontaktronem w połączeniu z arduino. Chce aby arduino zliczało zwarcia kontaktronu i tak się dzieje tylko zamiast dodawać po 1 to niekiedy dodaje 2 lub 3. Domyślam się, że chodzi tutaj o drgania styków. Niestety nie wiem jak sobie z tym poradzić. Za każda podpowiedź z góry dziękuję. Dopiero powoli uczę się programować a część kodu jest z kursu forbota.

#define KONTAKTRON 2
volatile int ileRazy = 0;

void setup() {
 Serial.begin(9600); 
 pinMode(KONTAKTRON, INPUT_PULLUP);
 attachInterrupt(digitalPinToInterrupt(KONTAKTRON), sygnal, FALLING);
}

void loop() {
 Serial.println(ileRazy); //Wysłanie wartości zmiennej 
delay(500);
}
void sygnal() { //Przerwanie
 ileRazy++;
}
Link do komentarza
Share on other sites

Dzięki za pomoc z drganiami styków sobie poradziłem, ale mam teraz inny problem. Mianowicie chciałem zrobić takie urządzonko które będzie zliczać przejazdy do 5 i przy tym będzie odpowiednio gasić i zapalać odpowiednie diody. Program wczoraj napisałem tylko były problemy z tymi drganiami styków i nie kiedy przeskakiwało o 2 ale działało. Niestety nie zapisałem sketcha i dziś napisałem identyczny program ale nie działa. Gdy podłącze tylko kontaktron i oglądam liczby na monitorze to działa, a gdy ma zaświecać kolejne diody to nic się nie dzieje świeci się non stop pierwsza dioda. Program częściowo pochodzi z kursu forbota . Nie wiem jak napisać program aby liczył do 5 po czym wrócił do 1.

#define LED_1 4
#define LED_2 5
#define LED_3 6
#define LED_4 7
#define LED_5 8

#define KONTAKTRON 2


volatile int przejazd = 0;

void setup() {
 pinMode(LED_1, OUTPUT);
 pinMode(LED_2, OUTPUT);
 pinMode(LED_3, OUTPUT);
 pinMode(LED_4, OUTPUT);
 pinMode(LED_5, OUTPUT);

 pinMode(KONTAKTRON, INPUT_PULLUP);

 digitalWrite(LED_1, HIGH);
 digitalWrite(LED_2, LOW);
 digitalWrite(LED_3, LOW);
 digitalWrite(LED_4, LOW);
 digitalWrite(LED_5, LOW);

attachInterrupt(digitalPinToInterrupt(KONTAKTRON), alarm, RISING); 
}
void loop() {
 if (przejazd = 1) {
   digitalWrite(LED_1, HIGH);
   digitalWrite(LED_2, LOW);
   digitalWrite(LED_3, LOW);  
   digitalWrite(LED_4, LOW);
   digitalWrite(LED_5, LOW);  
 } else if (przejazd = 2) { 
   digitalWrite(LED_1, LOW);
   digitalWrite(LED_2, HIGH);
   digitalWrite(LED_3, LOW);   
   digitalWrite(LED_4, LOW);
   digitalWrite(LED_5, LOW);
   } else if (przejazd = 3) { 
   digitalWrite(LED_1, LOW);
   digitalWrite(LED_2, LOW);
   digitalWrite(LED_3, HIGH);   
   digitalWrite(LED_4, LOW);
   digitalWrite(LED_5, LOW);
   } else if (przejazd = 4) { 
   digitalWrite(LED_1, LOW);
   digitalWrite(LED_2, LOW);
   digitalWrite(LED_3, LOW);   
   digitalWrite(LED_4, HIGH);
   digitalWrite(LED_5, LOW);
   } else if (przejazd = 5) { 
   digitalWrite(LED_1, LOW);
   digitalWrite(LED_2, LOW);
   digitalWrite(LED_3, LOW);   
   digitalWrite(LED_4, LOW);
   digitalWrite(LED_5, HIGH);
   }
}

void alarm() { 
 przejazd++; 
}
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

rogram wczoraj napisałem tylko były problemy z tymi drganiami styków i nie kiedy przeskakiwało o 2 ale działało. Niestety nie zapisałem sketcha i dziś napisałem identyczny program ale nie działa.

To w końcu identyczny czy nie?

Pomijając czepialstwo to zastanów się co się będzie działo gdy zmienna przejazd będzie miała wartość >5.

Link do komentarza
Share on other sites

Dzięki za pomoc z drganiami styków sobie poradziłem, ale mam teraz
 if (przejazd = 1) {

W C/C++ znak równości to przypisanie a porównanie to dwa znaki. Tak, więc użyj ==.

W ostatnim możesz użyć >= 5 wtedy złapie Ci wszystkie większe wartości (jakby znowu drganie dało znać o sobie). No po ustawtieniu diod dla przejazdu 5 dodaj

przejazad = 1;

to 'wróci Ci do 1'

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.