ok. sprawdź testowo czy biblioteka encodera jest poprawnie zainstalowana. najprościej - czy potrafisz skorzystać z przykładów dołączonych do biblioteki.
W jaki sposób ją zainstalowałeś (gdzie, czy zgadza się nazwa katalogu, itp)
MAc
Dziękuję za zainteresowanie.Już, mam program skompilowany bez błędów.
Nie umiem kopiować katalogu.Tam gdzie jest do pobrania katalog encodera wszystkie pliki otwierałem i dopiero cały tekst kopiowałem do arduino.exe.Potem zapisywałem jako plik.Stworzyłem katalog Encoder_Polling i wszystkie pliki do katalogu.Katalog Encoder_Polling do katalogu libralies w katalogu arduino_1.0.5.
Coś pisałeś o instalowaniu.Pobrałem arduino do windows ver.1.0.5. rozpakowałem i to wszystko.klikam na arduino.exe i od razu jestem w otartym okienku.Mam drugą wersję tego programu którą dostałem przy zakupie arduino uno na CD i tą wersję się instaluje.Która jest dobra tego nie umiem określić.Obecnie wykorzystuję wersję bez instalacji pobraną z arduino.Na niej testowałem miganie diody.Teraz biorę się za montaż drutowy .Trzeba to wszystko do kupy połączyć,ale już jestem zadowolony.Mam skompilowany program.Robię to wszystko na laptopie LENOVO w systemie XP.Już jestem bogatszy w wiedzę.Mac, dziękuję za zainteresowanie.Pozdrawiam
Na przyszłość - na githubie - tam gdzie ściągałeś encoder, po prawej stronie na dole jest przycisk "download ZIP". ściągasz nim całą bibliotekę. W środku jest katalog o nazwie takiej jak nazwa biblioteki - i cały katalog wrzucasz albo do folderu "libraries" w katalogu z rozpakowanym "arduino IDE" albo do katalogy "libraries" w folderze z Twoimi projektami.
Ja wrzucam do własnego katalogu, bo mi się wtedy nie mieszają oryginalne biblioteki z dodatkowymi i nie gubię się w czasie aktualizacji.
Uwaga - czasami zdarza się, że nazwa katalogu z Githuba nie zgadza się z nazwą bibloteki i trzeba ją zmienić - ale w tym przypadku jest poprawnie.
MAc
mrn
Witam Maćku.Dzięki. Wykonałem wg twojej instrukcji i katalog oryginalny jest już pobrany, rozpakowany i siedzi na swoim miejscu.Mam takie efekty na wyświetlaczu na dolnej linijce 10.000.000MHz, na górnej STEP= 10,100,1000,10000,10,100,1000 cały czas wędruje.Coś trzeba chyba zrobić z pinem 6.
int encoderPin_A = 4;
int encoderPin_B = 5;
int PushButt = 6; // pin encodera PushButton
To jest zmiana kroku,ale na co zamknąć ten przełącznik. Na zdjęciach nie widać.Są tam jakieś rezystory i kondensatory
Może Ktoś ma jakieś sugestie.Za wszystko dziękuję.
wieczorem popatrzę
Istotny jest ten kawałek:
void obsluga_buttona()
{
if (digitalRead(PushButt))
{
// nie wcisniety - nierob nic
}
else
{
//wcisniety
.............................................
}
Z niego wynika, że jeżeli button jest 1 (high) to ma nie robić nic, jeżeli low, to z każdym kolejnym naciśnięciem zmienia krok. U ciebie wisi w powietdzu, zatem skacze po kolejnych krokach.
W kodzie nie widzę, żeby był wewnętrznie podciągany, zatem wystarczy podłączyć go (tzn pin6) przez 10k do plusa i przestanie skakać.
Generalnie tak:
1. 10k do +
2. druki koniec opornika do pin6
3. włącznik między pin6 a masą
no pierwszy rysunek w ulubionej magicznej książce:
http://pgdev.pighixxx.com/ABC/SET/s1.pdf
tu są wszystkie:http://www.pighixxx.com/abc-arduino-basic-connections/ wystarczy klinąć w numerek "seta" to się pdf ściągnie.
Polecam wszystkim.
73
MAc
Idzie jak po sznurku.Twoja instrukcja działa. Po włączeniu jest 10Hz i trzyma.Dopiero po krótkim zwarciu do gnd następuje zmiana na 100Hz.I tak dalej.Myślę,że pin4 i pin5 też trzeba podciągnąć przez 10k do +5V i podłączyć impulsator. Później kupię prawdziwy encoder copal.Mam w tej chwili podłączone:arduino uno, I2C, wyświetlacz 1602, przycisk (zmiana kroku), skompilowany i wgrany program.Zostało podpiąć impulsator (mam taki za 3zł) i moduł AD9850.Pozdrawiam.
na pierwszy rzut oka w kod - to encoder jest normalnie - wspólnym do masy a A i B do odpowiednich nóg. może nawet jest to bez znaczenia bo ciągle porównuje stan poprzedni (przed obrotem) z obecnym.
dodatkowo do poprzedniego posta:
Zamiast podłączania dodatkowego rezystora można włączyć wewnętrzny rezystor w Arduino. Spełni tą samą funkcję co zewnętrzny - potrzebna jest dodatkowa linijka kodu:
digitalWrite(PushButt, HIGH);
wpisana zaraz po:
pinMode(PushButt, INPUT);
ona ustawia na tym pinie stan wysoki. Podłączamy tylko przycisk do masy.
Dolny rysunek pod napisem "using internal pullups" w załączonym pedeefie.
MAc
mrn
Wykonane.Jest HIGH i działa.Jest jeszcze jeden problem.Podczas weryfikacji
int dir = encoder_data(); //sprawdz Encoder
if(dir > 0) //jeśli w prawo to ...
{
Freq = Freq + Krok; //zwieksz f o krok
}
else if (dir { TU POKAZUJE BŁĄD
Freq = Freq - Krok; //zmniejsz f o krok
}
else
{
}
delay(50);
tak dopisałem
else if (dir < 0)
{
i to zweryfikowało.
Dokładnie tak - ewidentnie zjedzony przy kopiowaniu na stronę kawałeczek kodu.
widać to wyraźnie wskutek przesunięcia klamry do górnej linijki.
;-)
MAciek
Witam Maćku.Mam jeszcze taki problem.Górna linijka świeci,a dolna cały czas mruga.
Czy znajdzie się na to jakaś rada.