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.
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
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
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
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
hob_bit Maj 20, 2015 Udostępnij Maj 20, 2015 Dzięki za odpowiedź Cóż, napewno coś sobie "wyklikam" w sieci, na temat
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!
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!
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
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
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
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.
Treker (Damian Szymański) Czerwiec 4, 2015 Udostępnij Czerwiec 4, 2015 MateuszW, super, może pochwalisz się na forum swoim robotem ?
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.
Treker (Damian Szymański) Czerwiec 8, 2015 Udostępnij Czerwiec 8, 2015 MateuszW, dobra robota! Jakie plany na przyszłość?
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »