ethanak Kwiecień 6, 2023 Udostępnij Kwiecień 6, 2023 @Treker puste linie zostają, jeśli piszesz kod w trybie normalnym a potem zaznaczasz jako "wstaw kod". Nie zauważyłeś?
Treker (Damian Szymański) Kwiecień 7, 2023 Udostępnij Kwiecień 7, 2023 @ethanak co dokładnie masz na myśli pod jasłem pisania "w trybie normalnym"? Nie sądzę, aby ktoś pisał cały kod programu w edytorze posta na Forbocie i później korzystał z opcji wstawiania kodu. A jeśli ktoś wklei gotowy kod do posta, a później skorzysta z tej opcji to nie powinno być takiego efektu.
Synergia Kwiecień 7, 2023 Udostępnij Kwiecień 7, 2023 Z czystej ciekawości - dałoby się jakoś odczytać wartość rezystancji bezpośrednio z fotorezystora, bez dzielnika napięcia?
Treker (Damian Szymański) Kwiecień 7, 2023 Udostępnij Kwiecień 7, 2023 Raczej nie ma żadnej popularnej i sensownej meto. Teoretycznie można próbować z podłączeniem bezpośrednio Arduino > fotorezystor > masa, ale takie wyniki raczej nie będą zbyt użyteczne. Mikrokontrolery są dobre w mierzeniu napięcia i w wielu przypadkach dąży się do tego, aby na wyjściu czujnika było napięcie proporcjonalne do odczytu. Tutaj wystarczy akurat jeden rezystor, a czasami jest to znacznie trudniejsze. Wiele zależy też od tego co konkretnie chciałbyś uzyskać
Synergia Kwiecień 7, 2023 Udostępnij Kwiecień 7, 2023 22 minuty temu, Treker napisał: Raczej nie ma żadnej popularnej i sensownej meto. Teoretycznie można próbować z podłączeniem bezpośrednio Arduino > fotorezystor > masa, ale takie wyniki raczej nie będą zbyt użyteczne. Mikrokontrolery są dobre w mierzeniu napięcia i w wielu przypadkach dąży się do tego, aby na wyjściu czujnika było napięcie proporcjonalne do odczytu. Tutaj wystarczy akurat jeden rezystor, a czasami jest to znacznie trudniejsze. Wiele zależy też od tego co konkretnie chciałbyś uzyskać Spróbowałem na płytce stykowej (oczywiście kabelkami) bezpośrednio podłączyć fotorezystor do Arduino, raz jedną "nóżkę" do GND, raz (tę samą "nóżkę") do 5V, a drugą "nóżkę" do I/O analogowego, ale faktycznie wyniki są nieużyteczne - w pierwszym scenariuszu jedynie 0 było zwracane, w drugim 1023. Chyba, że nie taki sposób miałeś na myśli
MAGrz Czerwiec 18, 2023 Udostępnij Czerwiec 18, 2023 #define zielona 8 #define zolta 12 #define czerwona 10 #define przycisk 0 int odczytana_wartosc; //liczba z potencjometru String podana_liczba; //liczba podana przez uzytkownika int podana_liczba_int; //zamienienie na int bool sukces; void setup() { Serial.begin(9600); pinMode(zielona, OUTPUT); pinMode(zolta, OUTPUT); pinMode(czerwona, OUTPUT); pinMode(przycisk, INPUT_PULLUP); } void loop() { Serial.println("Ustaw potencjometr. Gdy bedziesz gotowy, nacisnij przycisk."); delay(1000); while(digitalRead(przycisk) == HIGH){} //program czeka na wcisniecie przycisku sukces = false; //jeszcze nie bylo proby, wiec nie bylo sukcesu Serial.println("Zgadnij liczbe od 0 do 1023."); odczytana_wartosc = analogRead(A5); //pobieranie liczby od potencjometru for(int i = 3; i>0; i--){ //petla, ktora powtarza sie 3 razy, bo sa 3 proby if(sukces == false){ //jesli uzytkownik dotychczas nie zgadnal liczby Serial.println("Podaj liczbe: "); while (Serial.available() == 0){} //program czeka na pobranie danych od uzytkownika podana_liczba = Serial.readStringUntil('\n'); //pobranie danych od uzytkownika podana_liczba_int = podana_liczba.toInt(); if(podana_liczba_int >= (odczytana_wartosc - 50) && podana_liczba_int <= (odczytana_wartosc + 50)){ //jesli zgadl digitalWrite(zielona, HIGH); digitalWrite(zolta, LOW); sukces = true; Serial.println("Gratulacje! Zgadles liczbe! Jesli chcesz zagrac jeszcze raz, wcisnij ponownie przycisk."); while(digitalRead(przycisk)==HIGH){} //program czeka na wcisniecie przycisku digitalWrite(zielona, LOW); } else{ //jesli nie zgadl Serial.println("Pudlo!"); digitalWrite(zolta, HIGH); digitalWrite(czerwona, HIGH); delay(2000); digitalWrite(czerwona, LOW); } } } if(sukces == false){ //jesli uzytkownik nie zgadl w 3 probach digitalWrite(zolta, HIGH); digitalWrite(czerwona, HIGH); Serial.println("Nie zgadles liczby... Jesli chcesz sprobowac jeszcze raz, wcisnij ponownie przycisk."); while(digitalRead(przycisk)==HIGH){} //program czeka na wcisniecie przycisku digitalWrite(zolta, LOW); digitalWrite(czerwona, LOW); } } Cześć Bardzo dziękuję za ten kurs, jest genialny. Dotychczas szło mi bardzo sprawnie i przyjemnie, aż dotarłam do zadania domowego 4.5. Tak wygląda mój kod do tego zadania (wiem, że jest strasznie długi i pewnie wyjątkowo nieoptymalny - już dotarłam do innych rozwiązań z forum i je rozumiem, ale chciałam też zrobić swoim własnym sposobem). W każdym razie, wszystko działa jak należy oprócz jednej rzeczy - mój program w pierwszym powtórzeniu pętli for nie pobiera liczby od użytkownika, zamiast tego przyjmując ją jako 0. Zupełnie nie rozumiem dlaczego Byłabym bardzo wdzięczna za pomoc.
Treker (Damian Szymański) Czerwiec 20, 2023 Udostępnij Czerwiec 20, 2023 @MAGrz witam na forum Cieszę się, że kurs jest pomocny. Odpowiedziałbym wcześniej, ale musiałem złapać Arduino, aby uruchomić kod i... u mnie działa on poprawnie. Nie ma takiego efektu. W ramach eksperymentu dodaj wyświetlanie wartości podanej przez użytkownika, czyli po: podana_liczba_int = podana_liczba.toInt(); Dodaj: Serial.println(podana_liczba_int); Czy faktycznie za pierwszym razem wyświetla Ci, że użytkownik wpisał 0? U mnie nie ma tego efektu: Może nie zrozumiałem jednak na czym polega problem. Jeśli tak było to opisz proszę jak dokładnie odtworzyć Twój błąd. 1
MAGrz Czerwiec 21, 2023 Udostępnij Czerwiec 21, 2023 Program przy pierwszym obiegu pętli od razu przyjmuje wartość 0 - niczego tam nie wpisywałam (na zdjęcie wynik tego, co zasugerowałeś). Dziwne... Może to kwestia jakiś ustawień w kompilatorze...? Dzięki za odpowiedź, skoro u ciebie działa, to zakładam że z samym kodem wszystko w porządku
MatriX98PL Lipiec 5, 2023 Udostępnij Lipiec 5, 2023 Cześć stworzylem coś takiego do zad.4.5 int wartosc = 0; int prog = 0; int zycia = 0; void setup() { pinMode(2, OUTPUT); //zielone pinMode(3, OUTPUT); //zolte pinMode(4, OUTPUT); //czerwone pinMode(5, INPUT_PULLUP); //przycisk test pinMode(6, INPUT_PULLUP); //przycisk reset Serial.begin(9600); Serial.println("Ustaw potencjometr tak aby wskazał liczbe od 450-550"); delay(500); Serial.println("Masz 3 zycia, Powodzenia"); } void loop() { wartosc = analogRead(A5); zycia = 3; if(prog < zycia){ while (digitalRead(5) == LOW ) delay(20); while (digitalRead(5) == HIGH ) delay(20); Serial.println(wartosc); if(wartosc > 450 && wartosc < 550){ digitalWrite(2, HIGH); //zielone on delay(500); Serial.println("Gratulacje Wygrales"); delay(500); Serial.println("Wcisnij Restart aby zagrać jeszcze raz"); while (digitalRead(6) == LOW ) delay(20); while (digitalRead(6) == HIGH ) delay(20); digitalWrite(2, LOW); prog = 0; Serial.println("Restart"); delay(2000); } else if(wartosc < 450 || wartosc > 550){ digitalWrite(3, HIGH); //zolte on delay(500); Serial.println("Nie udalo ci sie"); delay(500); Serial.println("Spróbuj jeszcze raz"); digitalWrite(3, LOW); prog++; Serial.println("Pozostalo Ci"); Serial.println(zycia - prog); delay(500); Serial.println("Życia"); delay(500); } } else { digitalWrite(4, HIGH); //czerwone on Serial.println("Przegraleś, zagraj ponownie wciskając RESTART"); while (digitalRead(6) == LOW ) delay(20); while (digitalRead(6) == HIGH ) delay(20); digitalWrite(4, LOW); delay(500); Serial.println("Restart"); prog = 0; delay(2000); } } niedawno sie zaczalem uczyc, mozna tu cos zmienic na lepiej ? 1
Treker (Damian Szymański) Lipiec 5, 2023 Udostępnij Lipiec 5, 2023 @MatriX98PL witam na forum Każdy program da się jakoś ulepszyć, ale nie ma też co popadać w skrajności. Można pokusić się o trochę więcej komentarzy lub używanie #define to określenia pinów, ale to tylko kosmetyka. Powodzenia w dalszych eksperymentach! 1
Krigor Październik 15, 2023 Udostępnij Październik 15, 2023 Dlaczego dioda skrajna po prawej stronie świeci mocno, a pozostałe tylko widać kropeczki? Reagują prawidłowo z kodem, ale tylko ta maksymalnie po prawo świeci wyraziście... // Wykorzystaj dwa fotorezystory w roli osobnych dzielników napięcia. Umieść je po skrajnych stronach płytki stykowej. Najlepiej będzie, gdy odchylisz je nawet minimalnie na zewnątrz. // Wyświetl wartości obu czujników w terminalu. Co się dzieje, gdy machasz ręką przed płytką (robiąc cień) lub świecisz w nią latarką? // Czy analizując różnicę między pomiarami z dwóch czujników jesteś w stanie napisać program, który określi, po której stronie płytki znajduje się silniejsze źródło światła? // Spróbuj wskazać kierunek na 5 diodach (bardziej w lewo, środek, bardziej w prawo itd.)! int wartosc_fotorezystor_lewy = 0; int wartosc_fotorezystor_prawy = 0; int dioda_jeden = 4; int dioda_dwa = 6; int dioda_trzy = 8; int dioda_cztery = 10; int dioda_piec = 12; void setup() { Serial.begin(9600); pinMode(dioda_jeden, OUTPUT); pinMode(dioda_dwa, OUTPUT); pinMode(dioda_trzy, OUTPUT); pinMode(dioda_cztery, OUTPUT); pinMode(dioda_piec, OUTPUT); } void loop() { wartosc_fotorezystor_lewy = analogRead(A5); wartosc_fotorezystor_prawy = analogRead(A4); if (abs(wartosc_fotorezystor_lewy - wartosc_fotorezystor_prawy) <= 50) { digitalWrite(dioda_trzy, HIGH); } if (abs(wartosc_fotorezystor_lewy - wartosc_fotorezystor_prawy) <= 200 && abs(wartosc_fotorezystor_lewy - wartosc_fotorezystor_prawy) > 50 && wartosc_fotorezystor_lewy < wartosc_fotorezystor_prawy) { digitalWrite(dioda_dwa, HIGH); } if (abs(wartosc_fotorezystor_lewy - wartosc_fotorezystor_prawy) <= 700 && abs(wartosc_fotorezystor_lewy - wartosc_fotorezystor_prawy) > 200 && wartosc_fotorezystor_lewy < wartosc_fotorezystor_prawy) { digitalWrite(dioda_jeden, HIGH); } if (abs(wartosc_fotorezystor_lewy - wartosc_fotorezystor_prawy) <= 200 && abs(wartosc_fotorezystor_lewy - wartosc_fotorezystor_prawy) > 50 && wartosc_fotorezystor_lewy > wartosc_fotorezystor_prawy) { digitalWrite(dioda_cztery, HIGH); } if (abs(wartosc_fotorezystor_lewy - wartosc_fotorezystor_prawy) <= 700 && abs(wartosc_fotorezystor_lewy - wartosc_fotorezystor_prawy) > 200 && wartosc_fotorezystor_lewy > wartosc_fotorezystor_prawy) { digitalWrite(dioda_piec, HIGH); } else { digitalWrite(dioda_jeden, LOW); digitalWrite(dioda_dwa, LOW); digitalWrite(dioda_trzy, LOW); digitalWrite(dioda_cztery, LOW); digitalWrite(dioda_piec, LOW); } Serial.println("Lewy: " + String(wartosc_fotorezystor_lewy)); Serial.println("Prawy: " + String(wartosc_fotorezystor_prawy)); }
Gieneq Październik 16, 2023 Udostępnij Październik 16, 2023 @Krigor witam na forum A jak zamienisz diody miejscami to dalej jest problem? Jeżeli przy tym samym sygnale jest ten same efekt to nie sprawa diod tylko Arduino
Krigor Październik 16, 2023 Udostępnij Październik 16, 2023 @Gieneq Tak - to samo. Zrobiłem program z samymi diodami i święci jasno jak cholera... Nie jest to spowodowane czasem dzielnikami napięć z fotorezystorów? (Przy fotorezystory użyłem 1 kilo Ohm, a przy diodach 330 Ohm)
Gieneq Październik 16, 2023 Udostępnij Październik 16, 2023 @Krigor tak tera patrze, nie chce straszyć ale może masz coś upalone. Niechcący ominąłeś rezystory - włożyłeś je obiema nóżkami w jedną serię dziurek na płytce stykowej. Przełóż je po dolne nóżki i kableki na drugą stronępłytki stykowej i zobacz czy jest poprawa. Możesz też pomierzyć napięcia pomiędyz wyjściami Arduino a masą. Jak na jakimś bedzie znacznie mniejsze zapięcie to zły znak. Dla testu napisz program gdzie ustawiasz 1 na wszystkich wyjsciach, a później twój kod z zadania.
Krigor Październik 16, 2023 Udostępnij Październik 16, 2023 @Gieneq Pomiary napięć: Pin 0: 5 [V] Pin 1: 4,98 [V] Pin 2: 4,97 [V] Pin 3: 4,98 [V] Pin 4: 4,98 [V] Pin 5: 4,97 [V] Pin 6: 4,97 [V] Pin 7: 4,97 [V] Pin 8: 4,97 [V] Pin 9: 4,97 [V] Pin 10: 4,97 [V] Pin 11: 4,97 [V] Pin 12: 4,97 [V] Pin 13: 4,98 [V]
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ę »