Arduino impulsator

Dyskusje o programowaniu mikroprocesorów.

Autor tematu
251mz
Moderator
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 3
Posty: 4440
Rejestracja: 27 sie 2004, 21:59
Lokalizacja: Polska

Arduino impulsator

#1

Post napisał: 251mz » 27 gru 2020, 21:08

Witam

Podłączyłem sobie impulsator 20sto impulsowy do arduino uno ze strony:
https://elty.pl/pl/p/Modul-z-enkoderem% ... Y-040/1155
I faktycznie ma 20 "kroków"

Niestety arduino liczy mi podwójnie ... :(
Tzn jedno cyknięcie to dolicza kolejne 2 zamiast 1.

Ma ktoś pomysł co robię źle?

Kod arduino ze strony http://howtomechatronics.com/tutorials/ ... e-arduino/

Kod: Zaznacz cały

/*     Arduino Rotary Encoder Tutorial
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
 
 #define outputA 6
 #define outputB 7

 int counter = 0; 
 int aState;
 int aLastState;  

 void setup() { 
   pinMode (outputA,INPUT);
   pinMode (outputB,INPUT);
   
   Serial.begin (9600);
   // Reads the initial state of the outputA
   aLastState = digitalRead(outputA);   
 } 

 void loop() { 
   aState = digitalRead(outputA); // Reads the "current" state of the outputA
   // If the previous and the current state of the outputA are different, that means a Pulse has occured
   if (aState != aLastState){     
     // If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
     if (digitalRead(outputB) != aState) { 
       counter ++;
     } else {
       counter --;
     }
     Serial.print("Position: ");
     Serial.println(counter);
   } 
   aLastState = aState; // Updates the previous state of the outputA with the current state
 }



Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 7873
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: Arduino impulsator

#2

Post napisał: tuxcnc » 27 gru 2020, 21:45

251mz pisze:
27 gru 2020, 21:08
Ma ktoś pomysł co robię źle?
Niczego nie robisz źle, ten program liczy na każdym zboczu sygnału A, czyli dwa razy na impuls.
Jak znajdziesz lepszy program, to będzie liczył x4.
Nawiasem mówiąc, praktyczna wartość programu którego używasz jest znikoma.


Autor tematu
251mz
Moderator
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 3
Posty: 4440
Rejestracja: 27 sie 2004, 21:59
Lokalizacja: Polska

Re: Arduino impulsator

#3

Post napisał: 251mz » 27 gru 2020, 22:08

Cholera masz racje. Chyba oczy mi już zaciemnia....
Ostatni raz na C na atmega robiłem coś 10 lat temu...
Sugerowałem się tym że gościowi na filmie zlicza co 1 ....

Dlaczego znikoma?
Właśnie potrzebuje żeby co 1 kliknięcie mi dawał sygnał.
Nie chcę podłączać typowwgo enkodera optycznego a zwyły impulsator jak z linka do nawigowania w menu.

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 7873
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: Arduino impulsator

#4

Post napisał: tuxcnc » 27 gru 2020, 22:25

251mz pisze:
27 gru 2020, 22:08
Dlaczego znikoma?
Właśnie potrzebuje żeby co 1 kliknięcie mi dawał sygnał.
Nie chcę podłączać typowwgo enkodera optycznego a zwyły impulsator jak z linka do nawigowania w menu.
Znikoma, bo to program musi pilnować impulsatora.
Przy bardziej skomplikowanym programie łatwo pogubić impulsy, szczególnie w Arduino, gdzie są takie cuda jak delay().
Natomiast sam impulsator jest w porządku, dopóki będziesz go używał do tego, do czego został wymyślony.

Awatar użytkownika

TOP67
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 1
Posty: 2224
Rejestracja: 17 wrz 2018, 10:47
Lokalizacja: Wrocław
Kontakt:

Re: Arduino impulsator

#5

Post napisał: TOP67 » 27 gru 2020, 23:06

Użyj przerwań i wlutuj kondensatory filtrujące (10-100 nF).


Autor tematu
251mz
Moderator
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 3
Posty: 4440
Rejestracja: 27 sie 2004, 21:59
Lokalizacja: Polska

Re: Arduino impulsator

#6

Post napisał: 251mz » 28 gru 2020, 06:25

Cudów jak delay nie używam :)

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Arduino, Raspberry pi i inne systemy mikroprocesorowe”