16-11-2018, 23:21
No widzę, że kolega otrzymał wsparcie od naszych przodowników pomagania.
Teraz, jak już ochłonąłeś z nadmiaru pomagactwa, zrób jako piszę.
Ściągnij sobie bibliotekę Rotary, i w swoim projekcie dopisz parę linijek kodu.
Musisz zmienić pin, pod który podpiąłeś pasek z diodami. INT2, oraz INT3 obsługują przerwania sprzętowe i będzie to nam potrzebne. Podepnij więc swój enkoder pod piny 2 i 3.
Na samym początku, na górze wpisz
Dołączysz wtedy bibliotekę obsługi enkodera.
Teraz stworzymy obiekt klasy Rotary.
Instrukcję
przenieś do funkcji loop();
Napiszemy też funkcję obsługi przerwania od enkodera.
To znaczy, gdy obrócisz pokrętłem, na INT2 podany zostanie impuls, który zatrzyma wykonywany program i zacznie wykonywać program obsługi przerwania.
I powinno być dobrze.
Teraz, jak już ochłonąłeś z nadmiaru pomagactwa, zrób jako piszę.
Ściągnij sobie bibliotekę Rotary, i w swoim projekcie dopisz parę linijek kodu.
Musisz zmienić pin, pod który podpiąłeś pasek z diodami. INT2, oraz INT3 obsługują przerwania sprzętowe i będzie to nam potrzebne. Podepnij więc swój enkoder pod piny 2 i 3.
Na samym początku, na górze wpisz
Kod:
#include <rotary.h>
Dołączysz wtedy bibliotekę obsługi enkodera.
Teraz stworzymy obiekt klasy Rotary.
Kod:
Rotary enkoder = Rotary(2,3); // enkoder to nazwa własna i możesz ten obiekt nazwać jak chcesz.
Instrukcję
Kod:
strip.setBrightness(JASNOSC);
Napiszemy też funkcję obsługi przerwania od enkodera.
To znaczy, gdy obrócisz pokrętłem, na INT2 podany zostanie impuls, który zatrzyma wykonywany program i zacznie wykonywać program obsługi przerwania.
Kod:
ISR(PCINT2_vect) {
unsigned char result = enkoder.process();
if (result) {
if (result == DIR_CW) JASNOSC++;
else JASNOSC--;
if (JASNOSC >=255) JASNOCS=255;
if (JASNOSC <=0) JASNOSC=0;
}
}
I powinno być dobrze.
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.