Komentator Napisano Maj 19, 2015 Udostępnij Napisano Maj 19, 2015 W poprzednich częściach kursu zajmowaliśmy się odczytywaniem sygnałów cyfrowych. Dzięki temu mogliśmy np.: sprawdzić, czy przycisk został wciśnięty. Świat, który nas otacza nie jest jednak cyfrowy, czasami 2 stany (1/0) to za mało. Dlatego tym razem zajmiemy się przetwornikiem analogowo-cyfrowym, w skrócie ADC. UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.Przeczytaj całość »Poniżej znajdują się komentarze powiązane z tym wpisem. Cytuj Link do komentarza Share on other sites More sharing options...
atmel21 Maj 20, 2015 Udostępnij Maj 20, 2015 Ta rozbudowana instrukcja warunkowa może być zastąpiona nie tyle "switch'em", który de facto niewiele zmieni, a np. pętlą for: for (int i = 0; i < 5; ++i) digitalWrite(i + 8, sensorValue == i + 1); 2 Cytuj Link do komentarza Share on other sites More sharing options...
MateuszW Maj 20, 2015 Udostępnij Maj 20, 2015 Ta rozbudowana instrukcja warunkowa może być zastąpiona nie tyle "switch'em", który de facto niewiele zmieni, a np. pętlą for: for (int i = 0; i < 5; ++i) digitalWrite(i + 8, sensorValue == i + 1); Tak, tylko postinkrementacja licznika i będzie git. A jeszcze ładniej było by do takiego rozwiązania użyć tablic stałych 🙂 Ale kurs jest początkujących więc rozwiązanie autora jest czytelniejsze. Świetny artykuł. PS. Zasłaniamy fotorezystor a nie potencjometr 😉 (tak tylko mówie). Pozdrawiam. 1 Cytuj Link do komentarza Share on other sites More sharing options...
hob_bit Maj 20, 2015 Udostępnij Maj 20, 2015 Dzięki za kolejny odcinek kursu. PS. Nareszcie zakupione rok temu elementy w Botlandzie znajdą dzięki wam praktyczne zastosowanie. Mam też cichą nadzieję, że w jednej z odsłon kursu znajdzie się coś na temat sterowania silnikami przy pomocy pilota z wykorzystaniem biblioteki IRremonte. h- Chciałbym zbudować w przyszłości robota sterowanego właśnie w ten sposób. Pozdrawiam hob_bit 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Treker (Damian Szymański) Maj 20, 2015 Udostępnij Maj 20, 2015 Ta rozbudowana instrukcja warunkowa może być zastąpiona nie tyle "switch'em", który de facto niewiele zmieni, a np. pętlą for: Pierwotnie chciałem rozwiązać to w podobny sposób, jednak wydaje mi się, że może to być mylące dla początkujących. Na razie staram się używać tylko najprostszych elementów języka, bo zdaje sobie sprawę, że dla wielu osób jest to pierwsze spotkanie z mikrokontrolerami i nie chce im niepotrzebnie mieszać w głowie. Nareszcie zakupione rok temu elementy w Botlandzie znajdą dzięki wam praktyczne zastosowanie. Mam też cichą nadzieję, że w jednej z odsłon kursu znajdzie się coś na temat sterowania silnikami przy pomocy pilota z wykorzystaniem biblioteki IRremonte. h- Chciałbym zbudować w przyszłości robota sterowanego właśnie w ten sposób. Niestety obecne zestawy, na których bazuje kurs, nie przewidują takich rzeczy. Może w kontynuacji 🙂 PS. Zasłaniamy fotorezystor a nie potencjometr (tak tylko mówie). Dzięki - poprawione. 2 Cytuj Link do komentarza Share on other sites More sharing options...
hob_bit Maj 20, 2015 Udostępnij Maj 20, 2015 Dzięki za odpowiedź 🙂 Cóż, napewno coś sobie "wyklikam" w sieci, na temat 😉 Cytuj Link do komentarza Share on other sites More sharing options...
htfhere Maj 21, 2015 Udostępnij Maj 21, 2015 Dzięki za artykuł, jest super 🙂 Ale następny będzie najciekawszy - od czasu kiedy zakupiłem zestaw do tego kursu myślę tylko o wykorzystaniu tego "silniczka" czy tam serwomechanizmu 😃 proszę, proszę Treker wrzuć następną część jak najszybciej! Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Maj 21, 2015 Udostępnij Maj 21, 2015 htfhere, zgadza się następny powinien być jeszcze ciekawszy, ponieważ będziemy mogli sterować zarówno serwomechanizmem, zwykłym silnikiem (w teorii) oraz regulować jasność świecenia LEDów 🙂 Jak będzie duuużo zainteresowanych, to może artykuł taki pojawi się wcześniej, kto wie 🙂 Na ten moment mogę zachęcić wszystkich do rozpowszechniania informacji o kursie wśród znajomych! Cytuj Link do komentarza Share on other sites More sharing options...
Popularny post igor Maj 27, 2015 Popularny post Udostępnij Maj 27, 2015 4.4 int wartoscA5 = 0; int prog = 0; boolean wyslano = false; void setup() { pinMode(8, OUTPUT); Serial.begin(9600); } void loop() { wartoscA5 = analogRead(A5); prog = analogRead(A4); if (wartoscA5 < prog) { digitalWrite(8, HIGH); if (wyslano == false) { Serial.println(wartoscA5); wyslano = true; } } else { digitalWrite(8, LOW); wyslano = false; } delay(100); } Da się jakoś bez tworzenia zmiennej "wyslano"? 4.5 // Przypisanie pinów. #define led_zolta 8 #define led_zielona 7 #define led_czerwona 9 #define przycisk 5 #define pin_odczyt A4 int odczyt = 0; // odczyt z potencjometru String podana_liczba = 0; // liczba podana przez gracza int podana_liczba_int = 0; // liczba podana przez gracza przekształcona na zmienną int byte proby = 2; // ilość prób jakie pozostały do końca gry boolean od_nowa = true; // czy gramy od nowa, czy kontynuujemy grę void setup() { pinMode(przycisk, INPUT_PULLUP); pinMode(led_czerwona, OUTPUT); pinMode(led_zielona, OUTPUT); pinMode(led_zolta, OUTPUT); Serial.begin(9600); } void loop() { if (od_nowa == true) { // jeśli rozpoczynamy grę lub gramy od nowa proby = 2; digitalWrite(led_zielona, LOW); digitalWrite(led_zolta, LOW); digitalWrite(led_czerwona, LOW); while(!Serial) delay(10); // czekamy na otwarcie serial monitora Serial.println("Przekrec potencjometr i nacisnij przycisk."); while (digitalRead(przycisk) ==LOW) delay(20); // czekamy na zwolnienie przycisku po wznowieniu gry while (digitalRead(przycisk) == HIGH) delay(20); // czekamy na wciśnięcie przycisku odczyt = analogRead(pin_odczyt); // sczytujemy ustawienie potencjometru Serial.println("Podaj liczbe z zakresu 0 - 1023."); } while (Serial.available() == 0); // czekamy na podanie liczby podana_liczba = Serial.readStringUntil('\n'); podana_liczba_int = podana_liczba.toInt(); // zamieniamy zmienną string na int if (odczyt - podana_liczba_int <= 50 && odczyt - podana_liczba_int >= -50) { // jeśli podana liczba jest +-50 równa odczytowi Serial.println("Udalo Ci sie trafic! Brawo."); digitalWrite(led_zielona, HIGH); digitalWrite(led_zolta, LOW); od_nowa = true; Serial.println("Jesli chcesz zagrac ponownie - nacisnij przycisk."); while (digitalRead(przycisk) == HIGH) delay(20); // czekamy na naciśnięcie przycisku } else { // jeśli podana liczba nie jest +-50 równa odczytowi if (proby > 0) { // jeśli mamy jeszcze próby od_nowa = false; // nie rozpoczynamy od nowa digitalWrite(led_zolta, HIGH); Serial.print("Nie trafiles. Pozostalo prob: "); Serial.println(proby); Serial.println("Podaj kolejna liczbe:"); proby --; // odejmujemy jedną próbę while(Serial.available() == 0); // czekamy na podanie kolejnej liczby } else { // nie mamy już prób digitalWrite(led_czerwona, HIGH); digitalWrite(led_zolta, LOW); Serial.println("Przegrales. Jesli chcesz zagrac ponownie - nacisnij przycisk."); od_nowa = true; // rozpoczynamy następną grę od nowa while (digitalRead(przycisk) == HIGH) delay(20); // czekamy na naciśnięcie przycisku } } delay(5); } Tu też nie wiem czy optymalnie to napisałem... 3 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Maj 28, 2015 Udostępnij Maj 28, 2015 Da się jakoś bez tworzenia zmiennej "wyslano"? Pewnie się da, ale tak jest bardzo dobrze. Jedynie proponowałbym nazywać inaczej zmienne: wartoscA5 = analogRead(A5); Taki zapis nie mówi zbyt dużo, lepiej nazwać zmienną jako "czujnikSwiatla", czyli tak, aby wskazywać wykorzystanie zmiennej. To, że jest tam trzymana wartość odczytana z A5 jest mało pomocne. Dlaczego w drugim kodzie napisałeś takie dwie linijki? while (digitalRead(przycisk) ==LOW) delay(20); // czekamy na zwolnienie przycisku po wznowieniu gry while (digitalRead(przycisk) == HIGH) delay(20); // czekamy na wciśnięcie przycisku Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 3, 2015 Udostępnij Czerwiec 3, 2015 W związku z wyjątkowo krótkim tygodniem i długim weekendem zmianie uległ harmonogram publikacji kolejnych części kursów. Tym razem kolejny odcinek jednego z kursów (Arduino/elektronika) pojawi się w czwartek, a drugiego w piątek. Mam nadzieję, że pozwoli to zainteresowanym na spokojne, weekendowe studiowanie materiału 😉 Cytuj Link do komentarza Share on other sites More sharing options...
MateuszW Czerwiec 3, 2015 Udostępnij Czerwiec 3, 2015 Witam,zniecierpliwiony oczekiwaniem na kolejne części kursu, poszperawszy trochę w internecie udało mi się zbudować swojego pierwszego omijacza przeszkód. Myślę, że teraz czas na jakiegoś prostego LF 🙂 ale i tak oczekuję kolejnego artykułu o arduino, bardzo ciekawy temat. Pozdrawiam. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 4, 2015 Udostępnij Czerwiec 4, 2015 MateuszW, super, może pochwalisz się na forum swoim robotem 🙂? Cytuj Link do komentarza Share on other sites More sharing options...
MateuszW Czerwiec 8, 2015 Udostępnij Czerwiec 8, 2015 Proszę bardzo, to mój pierwszy wpis na forum (zazwyczaj tylko czytam 🙂) Mój pierwszy omijacz Piękny nie jest ale działa. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 8, 2015 Udostępnij Czerwiec 8, 2015 MateuszW, dobra robota! Jakie plany na przyszłość? Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!