Skocz do zawartości
piter161

Arduino zliczanie zwarć kontaktronu

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++;
}

Udostępnij ten post


Link to post
Share on other sites

Problemem są tak, jak już napisał przedmówca, drgania styków. Jednak możesz sobie z nimi poradzić również sprzętowo (dodając filtr RC). Więcej informacji na ten temat znajdziesz chociażby w tym artykule: Microswitche jako proste czujniki przeszkód

Udostępnij ten post


Link to post
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++; 
}

Udostępnij ten post


Link to post
Share on other sites
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.

Udostępnij ten post


Link to post
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'

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...