Skocz do zawartości

Kurs Arduino - #4 - Przetwornik ADC


Pomocna odpowiedź

html_mig_img
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.

Link do komentarza
Share on other sites

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);
  • Lubię! 2
Link do komentarza
Share on other sites

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.

  • Lubię! 1
Link do komentarza
Share on other sites

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 🙂

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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.

  • Lubię! 2
Link do komentarza
Share on other sites

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!

Link do komentarza
Share on other sites

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!

Link do komentarza
Share on other sites

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...

  • Lubię! 2
Link do komentarza
Share on other sites

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 
Link do komentarza
Share on other sites

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 😉

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.