[elektro] rotary encoder, mit csinálok rosszul?
uprogc .
uprogc at gmail.com
Mon Jan 2 16:45:22 CET 2017
Nem tudom az jobb-e, ez mukodik, ennel jobbat ami a mukodest illeti nem
hiszem hogy lehetne csinalni. Ezek a mech enkoderek a szemet kategoriaba
tartoznak. Ki is fogom majd valtani oket valamivel, csak legyen idom ra.
Hibat szamlalni ? Minek ? Nem szeretnek enkodert tesztelni, azt megtehetnek
a gyarban ennyi penzert........Ezeknel jobbat lehet csinalni floppy
fejmozgato motorbol, vagy hasonlobol + komparator, es sosem kopik ki....
Szabi
2017-01-02 15:56 GMT+02:00 Bali Zoltan <eltexto at freemail.hu>:
> Hm, állapotgépes nem jobb?
> Ott mindjárt meg is lehet számolni
> a hibás állapotokat.
> A switch-case kezelés az érvényes állapotok között,
> default: -ág meg reprezentálja a
> lenti táblázat érvénytelen nulláit.
> Viszont ott, lehet egy hiba számlálót inkrementálni,
> mondjuk diagnosztikai célra...
>
> Üdv. Zoli
>
>
> 2017.01.02. 14:00 keltezéssel, uprogc . írta:
>
>> En igy csinaltam ;)
>>
>>
>> static int8_t states[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};
>> uint8_t RotaryCurrentState = 0x00;
>> uint8_t RotaryTransition = 0;
>> int8_t RotaryPosition = 0;
>>
>> enum e_encoder { WAITING, LEFT, RIGHT };
>> typedef enum e_encoder rotate;
>>
>>
>> //NOTE Ezt hivjuk le/felfuto elnel is ITbol
>> // read_encoder_sig(() ez csak azt mondja meg hogy 0 vagy 1 szint van az
>> adott PINen
>>
>>
>> void callback_menu_enc()
>> {
>> RotaryCurrentState = ( (read_encoder_sig(ROT_ENC_PORT,
>> ROT_ENC_TRIGGER
>> ) << 1) |
>>
>> read_encoder_sig(ROT_ENC_PORT, ROT_ENC_DIRECTION ));
>> RotaryTransition = (RotaryTransition <<2 ) | RotaryCurrentState;
>> RotaryPosition = RotaryPosition + states[RotaryTransition & 0x0F];
>>
>> //CW Transition
>> if (RotaryPosition == 4)
>> {
>> e = LEFT;
>> RotaryPosition = 0;
>> }
>> //CCW Transition
>> else if (RotaryPosition == -4)
>> {
>> e = RIGHT;
>> RotaryPosition = 0;
>> }
>> else
>> {
>> e = WAITING; // ez is kell
>> }
>>
>> switch(e) {
>> case LEFT:
>> //
>> break;
>>
>> case RIGHT:
>> //
>> break;
>>
>> case WAITING:
>> default:
>> break;
>> }
>> }
>>
>> Remelem nem maradt le semmi ;)
>>
>> Szabi
>> -----------------------------------------
>> elektro[-flame|-etc]
>>
>>
>>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list