thequeash 3 Wrzesień 11, 2017 Udostępnij Wrzesień 11, 2017 Zad 10.4 int wylosowanaliczba; void setup() { pinMode(12, OUTPUT); pinMode(9, INPUT); Serial.begin(9600); randomSeed (analogRead(A5)); } void loop() { wylosowanaliczba = random(0, 101); Serial.print("Wylosowana liczba: "); Serial.println(wylosowanaliczba); Serial.print("Czy liczba jest mniejsza od 10 lub wieksza od 90? "); Serial.println(odpowiedz1()); Serial.print("Czy liczba jest wieksza od 50, ale nie jest z przedzialu <70;85>? "); Serial.println(odpowiedz2()); Serial.print("Czy liczba jest rowna 20, 30, 40 lub 50? "); Serial.println(odpowiedz3()); Serial.print("Czy liczba miesci sie w przedziale <10;40> lub <60;100>? "); Serial.println(odpowiedz4()); Serial.println(); Serial.println(); delay(1000); } String odpowiedz1 () { if (wylosowanaliczba < 10 || wylosowanaliczba > 90) { return ("TAK"); } else return ("NIE"); } String odpowiedz2() { if (wylosowanaliczba > 50) { if (wylosowanaliczba >= 70 && wylosowanaliczba <= 85) { return ("NIE"); } return ("TAK"); } else return ("NIE"); } String odpowiedz3() { if (wylosowanaliczba == 20 || wylosowanaliczba == 30 || wylosowanaliczba == 40 || wylosowanaliczba == 50) { return ("TAK"); } else return ("NIE"); } String odpowiedz4() { if ((wylosowanaliczba >= 10 && wylosowanaliczba <= 40) || (wylosowanaliczba >= 60 && wylosowanaliczba <= 100)) { return ("TAK"); } else return ("NIE"); } EDIT. 1 PYTANIE: A propos wykresów! Te wbudowane w arduino IDE są okropne, nie pozwalają na jakiekolwiek skalowanie według własnych preferencji, zatrzymanie, dokładniejsze przeanalizowanie co do wartości, największej i najmniejszej wartości itd. itd. itd. Długo by wymieniać. Czy jest jakiś inny sposób na rysowanie wykresów? 2 PYTANIE: Czy jest możliwość, aby np. moje arduino zbierało sobie załóżmy dane przez jakiś dłuższy czas i przechowywało je gdzieś w jakiejś pamięci nawet po wyłączeniu? 3 PYTANIE: Prosty przykład: Zbieram przez całą noc dane dot. temperatury otoczenia. W jaki sposób mogę sprawić, aby moje arduino wysłało mi najwyższą wartość ze wszystkich jakie były do tej pory? Analogicznie również najmniejszą. Z góry dziękuję za odpowiedzi i za cały kurs. Dzięki wam już nie mam wątpliwości co studiować! Cytuj Link to post Share on other sites
Treker 3 074 Wrzesień 14, 2017 Udostępnij Wrzesień 14, 2017 A propos wykresów! Te wbudowane w arduino IDE są okropne, nie pozwalają na jakiekolwiek skalowanie według własnych preferencji, zatrzymanie, dokładniejsze przeanalizowanie co do wartości, największej i najmniejszej wartości itd. itd. itd. Długo by wymieniać. Czy jest jakiś inny sposób na rysowanie wykresów? Hmm, powiem tak, ja się cieszę, że taka możliwość w ogóle istnieje Te wykresy z założenia mają być prostą wizualizacją danych. Nie należy ich porównywać do żadnych rozbudowanych aplikacji. Jeśli zależy Ci na szczegółach, to najlepiej wysyłać przez UART dane w formie tekstowej, a następnie wciągnąć je do Excela lub Matlaba. Możesz też zainteresować się programem Processing: https://www.arduino.cc/en/Tutorial/Graph Przykład jego wykorzystania był też pokazny na Forbocie: Pierwsze starcie z Genuino 101 – wizualizacja położenia Czy jest możliwość, aby np. moje arduino zbierało sobie załóżmy dane przez jakiś dłuższy czas i przechowywało je gdzieś w jakiejś pamięci nawet po wyłączeniu? Zainteresuje się tematem podłączania kart SD - są do tego gotowe biblioteki Prosty przykład: Zbieram przez całą noc dane dot. temperatury otoczenia. W jaki sposób mogę sprawić, aby moje arduino wysłało mi najwyższą wartość ze wszystkich jakie były do tej pory? Analogicznie również najmniejszą. Informacje na ten temat znajdziesz w kursie Arduino, poziom II: Kurs Arduino II – #7 – termometry analogowe i cyfrowe. Jest tam dokładnie taki przykład. Powodzenia w dalszej nauce! Cytuj Link to post Share on other sites
mistus 3 Luty 19, 2018 Udostępnij Luty 19, 2018 zadanie 10.1 jest błąd w przykładzie jest ("") a powinno być ("\n") chyba że specjalnie #define fotorezystor1 A5 #define fotorezystor2 A4 float napiecie1 = 0; float napiecie2 = 0; void setup() { Serial.begin(9600); } void loop() { napiecie1 = analogRead(fotorezystor1); napiecie2 = analogRead(fotorezystor2); napiecie1 = napiecie1 *(5.0/1023.0); napiecie2 = napiecie2 *(5.0/1023.0); Serial.print(napiecie1); Serial.print("\t"); Serial.print(napiecie2); Serial.print("\t"); Serial.print("\n"); delay(500); } a tak działa (machając rekom) a tak świecąc latarką zadanie 10.2 Bedzie w kółko te same liczby pokazywać zadanie 10.3 Troszkę unowocześnione #define pomarancz 13// nadaje różnym pina nazwy #define Pomarancz 12 #define zielony 11 #define zolty 10 #define Zolty 9 #define czerwony 8 #define Czerwony 7 #define przycisk 6 #define buzer 5 int losowy = 0; int los = 0; int czas = 0; void setup() { Serial.begin(9600);// połączenie z komputerem Serial.println("Wciśnij przycisk by wylosować liczbę"); randomSeed(analogRead(A0));// ziarno (punkt 1 losowania) pinMode(pomarancz, OUTPUT);// ustawiam wejścia wyjścia pinów pinMode(Pomarancz, OUTPUT); pinMode(zielony, OUTPUT); pinMode(zolty, OUTPUT); pinMode(Zolty, OUTPUT); pinMode(czerwony, OUTPUT); pinMode(Czerwony, OUTPUT); pinMode(przycisk, INPUT_PULLUP); pinMode(buzer, OUTPUT); } int losujemy(){ int losowy; losowy = random(1,7);// losuje od 1 - 6 delay (500); return losowy;// podaje wynik } void zadanie(){ Serial.println("Wylosowana liczba"); Serial.println(los); Serial.println("kolej następnego gracza"); Serial.println("Wciśnij przycisk by wylosować liczbę"); } void wyświetlenie(){ while(czas < 500){ delay(czas); digitalWrite(pomarancz, LOW); digitalWrite(Pomarancz, LOW); digitalWrite(zielony, LOW); digitalWrite(zolty, LOW); digitalWrite(Zolty, LOW); digitalWrite(czerwony, LOW); digitalWrite(Czerwony, LOW); los = losujemy(); switch(los){ case 1:// wylosowana liczba 1 digitalWrite(zielony, HIGH); delay(czas); czas = czas +25;// <-- ustawiam kilka czasów by losował różnie break; case 2:// wylosowana liczba 2 digitalWrite(pomarancz, HIGH); digitalWrite(Czerwony, HIGH); delay(czas); czas = czas +30;// <-- break; case 3:// wylosowana liczba 3 digitalWrite(pomarancz, HIGH); digitalWrite(zielony, HIGH); digitalWrite(Czerwony, HIGH); delay(czas); czas = czas +35;// <-- break; case 4:// wylosowana liczba 4 digitalWrite(pomarancz, HIGH); digitalWrite(Pomarancz, HIGH); digitalWrite(czerwony, HIGH); digitalWrite(Czerwony, HIGH); delay(czas); czas = czas +40;// <-- break; case 5:// wylosowana liczba 5 digitalWrite(pomarancz, HIGH); digitalWrite(Pomarancz, HIGH); digitalWrite(zielony, HIGH); digitalWrite(czerwony, HIGH); digitalWrite(Czerwony, HIGH); delay(czas); czas = czas +45;// <-- break; case 6:// wylosowana liczba 6 digitalWrite(pomarancz, HIGH); digitalWrite(Pomarancz, HIGH); digitalWrite(zolty, HIGH); digitalWrite(Zolty, HIGH); digitalWrite(czerwony, HIGH); digitalWrite(Czerwony, HIGH); delay(czas); czas = czas +50;// <-- break; } } } void glosnik(){ while(los > 0){ los = los -1; digitalWrite(buzer, HIGH); delay(500); digitalWrite(buzer, LOW); delay(500); } } void loop() { if (digitalRead(przycisk) == LOW){// wciśniecie przycisku Serial.println ("Następuje losowanie"); czas = 0; wyświetlenie(); zadanie(); glosnik(); } } tak wygląda a tak działa Cytuj Link to post Share on other sites
Treker 3 074 Luty 20, 2018 Udostępnij Luty 20, 2018 jest błąd w przykładzie jest ("") Użyłem tam println, więc było poprawnie, ale dzięki za czujność Cytuj Link to post Share on other sites
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
mistus 3 Luty 21, 2018 Udostępnij Luty 21, 2018 zadanie 10.4 void setup() { Serial.begin(9600); randomSeed(analogRead(A0)); Serial.println("Losowanie liczb od 0 do 100"); } int losowanie(){ int los; los = random(101); delay(1000); return los; } void loop() { losowanie(); int los = losowanie(); if((los < 10)||(los > 90)){ Serial.println("opcja 1"); Serial.println(los); } if((los > 50)&&(los < 70)||(los > 85)){ Serial.println("opcja 2"); Serial.println(los); } if ((los == 50)||(los == 40)||(los == 30)||(los == 20)){ Serial.println("opcja 3"); Serial.println(los); } if ((los > 10)&&(los < 40)||(los > 60)&&(los < 100)){ Serial.println("opcja 4"); Serial.println(los); } } i Koniec zaczynam lekcję 2 Cytuj Link to post Share on other sites
Treker 3 074 Marzec 6, 2018 Udostępnij Marzec 6, 2018 mistus, powodzenia w dalszej nauce! Pamiętaj na przyszłość o dodawaniu komentarzy do programów - będzie czytelniej dla każdego Cytuj Link to post Share on other sites
ceiem 32 Czerwiec 29, 2020 Udostępnij Czerwiec 29, 2020 Zadanie 10.1 1 Cytuj Link to post Share on other sites
ceiem 32 Czerwiec 29, 2020 Udostępnij Czerwiec 29, 2020 Zadanie 10.3 void setup() { Serial.begin(9600); pinMode(7, INPUT_PULLUP); randomSeed(analogRead(A0)); } void loop() { if(digitalRead(7) == LOW) { Serial.println(random(1,7)); delay(300); } } 1 Cytuj Link to post Share on other sites
Gieneq 1 794 Czerwiec 30, 2020 Udostępnij Czerwiec 30, 2020 (edytowany) @ceiem super, rysowanie kilku wykresów działa i logika kosatki do gry też jest Możesz jeszcze popróbować zapisać program tak, żeby po przytrzymaniu przycisku nie losowało cały czas nowych liczb - w zwykłej grze pewnie by to było uciążliwe ale tak to super, fajnie że robisz zadania dodatkowe! Edytowano Czerwiec 30, 2020 przez Gieneq 2 Cytuj Link to post Share on other sites
Misioo 3 Lipiec 11, 2020 Udostępnij Lipiec 11, 2020 "Takie tam" urządzenie do gry w Backgammona na zakończenie kursu - jako owoc kilkunastu świetnie spędzonych wieczorów. Zastępuje wiecznie spadające ze stołu "analogowe" kostki. Bardzo dziękuję za ten kurs (oraz inne kursy). Naprawdę, kawał dobrej roboty no i wartość edukacyjna jest nie do przecenienia. Szacun! 2 Cytuj Link to post Share on other sites
Treker 3 074 Lipiec 12, 2020 Udostępnij Lipiec 12, 2020 @Misioo gratuluję projektu i dziękuję za miłe słowa - cieszę się, że kurs był dla Ciebie pomocny i zachęcam do dalszych eksperymentów Cytuj Link to post Share on other sites
pawomik2 0 Sierpień 25, 2020 Udostępnij Sierpień 25, 2020 mam krótkie pytanie czyli jak połączyć warunki w funkcji sliczy przy komędzie "case x:"? czy to będzie coś w rodzaju "case 1 || 2:"?czy jak. bo arduino mam już podpięte do dosyć skomplikowanego układziku (autko na blutooth) i nie wiem jak to trzeba zrobić. Z góry dziękuje za odpowiedz Cytuj Link to post Share on other sites
Gieneq 1 794 Sierpień 26, 2020 Udostępnij Sierpień 26, 2020 (edytowany) @pawomik2 witam na forum Sprawdź czy coś z tego będzie pomocne. Pierwsze 2 casy to alternatywa, a ten w środku przedział dla warunków 2 lub 3 lub... lub 6. void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); int Answer = 0; switch ((Answer - 1) / 4) { case 0: case 1: pinMode(LED_BUILTIN, OUTPUT); break; case 2 ... 6: pinMode(LED_BUILTIN, OUTPUT); break; default: pinMode(LED_BUILTIN, OUTPUT); } } Edytowano Sierpień 26, 2020 przez Gieneq Cytuj Link to post Share on other sites
Stark 9 Sierpień 26, 2020 Udostępnij Sierpień 26, 2020 Witajcie, Znalazłem drobne błędy: - połączenie dwóch wyrazów ze sobą funkcjarandom(); (Lokalizacja: Tekst pod niebieską ramką, pod obrazkiem z kostkami do gry) Cytat Za zwracanie losowej wartości odpowiedzialna jest funkcjarandom();, która może przyjąć dwa argumenty. Dzięki nim kształtujemy zakres, z jakiego losowane są liczby. - złe komentarze w ostatecznym kodzie do programu z łączenia warunków; powinno być w zaznaczonych miejscach "Włącz/wyłącz diodę czerwoną" (Lokalizacja: kod programu nad nagłówkiem Praktyczny przykład - czujnik odległości) void loop() { if (digitalRead(9) == LOW || digitalRead(10) == LOW) { //Jeśli przycisk pierwszy lub drugi digitalWrite(8, HIGH); //Włącz diodę zieloną } else { digitalWrite(8, LOW); //Wyłącz diodę zieloną } if (digitalRead(9) == LOW && digitalRead(10) == LOW) { //Jeśli przycisk pierwszy i drugi digitalWrite(7, HIGH); //Włącz diodę zieloną <--- BŁĄD } else { digitalWrite(7, LOW); //Wyłącz diodę zieloną <--- BŁĄD } } Cytuj Link to post Share on other sites
Gieneq 1 794 Sierpień 27, 2020 Udostępnij Sierpień 27, 2020 (edytowany) @Stark Ok, dzięki że wyłapałeś błędy. Przyda się przy rewizji kursu Edytowano Sierpień 27, 2020 przez Gieneq Cytuj Link to post Share on other sites
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!