Treker (Damian Szymański) Styczeń 6, 2016 Udostępnij Styczeń 6, 2016 PatrykOSK, wróćmy do mojego działającego przykładu, z części 3 tego kursu. Przeanalizuj, co i gdzie jest ustawiane oraz jaki jest warunek pętli: void loop() { if (digitalRead(czujnikOkna) == LOW) { //Jeśli przycisk jest wciśnięty digitalWrite(diodaZielona, HIGH); //Włączenie diody zielonej digitalWrite(diodaCzerwona, LOW); //Wyłączenie diody czerwonej } else { //Jeśli przycisk nie jest wciśnięty digitalWrite(diodaZielona, LOW); //Wyłączenie diody zielonej digitalWrite(diodaCzerwona, HIGH); //Włączenie diody czerwonej Serial.println("Uwaga! Alarm! Okno nie jest zamkniete!"); while (digitalRead(czujnikOkna) == HIGH) { //Zatrzymuyjemy się w pustej pętli do ponownego zamknięcia okna delay(25); //W pętli wprowadzamy małe opóźnienie 25ms, aby niwelować zakłócenia } } } Spróbuj dostosować go do swoich potrzeb. Inaczej zabrniemy już chyba zbyt daleko od celu
PatrykOSK Styczeń 6, 2016 Udostępnij Styczeń 6, 2016 Ehhh... już powoli chyba zaczynam się w tym gubić :/ Z Twojego przykładu jasno wszystko wynika i bez problemu go rozumiem ale nie wiem czego bym mógł użyć u siebie jako warunku w pętli while.
Treker (Damian Szymański) Styczeń 6, 2016 Udostępnij Styczeń 6, 2016 PatrykOSK, no to na spokojnie, a od czego u siebie chcesz uzależnić ponowne wysłanie komunikatu?
PatrykOSK Styczeń 7, 2016 Udostępnij Styczeń 7, 2016 Jedyne co mi przychodzi do głowy to przykład z diodą który tu dawałem,ale okazał się błędny ewentualnie jakaś dodatkowa zmienna mogła by mi pomóc.
Treker (Damian Szymański) Styczeń 7, 2016 Udostępnij Styczeń 7, 2016 Może to Cie nakieruje, pisane w pseudokodzie (jedna z metod): if (odczytanaWartosc < prog) { Włącz diodę; (Czy wysłano == 0 ?) { wyślij komunikat; wysłano = 1; } } else { wyłacz diodę; wysłano = 0; } 1
PatrykOSK Styczeń 8, 2016 Udostępnij Styczeń 8, 2016 int odczytanaWartosc = 0; //Zmienna do przechowywania odczytu ADC int prog = 0; //Próg włączenia światła - ustawiany potencjometrem float napiecie = 0; int wyslano = 0; void setup() { pinMode(8, OUTPUT); //Konfiguracja wyjść pod diodę LED Serial.begin(9600); } void loop() { odczytanaWartosc = analogRead(A5);//Odczytanie wartości z ADC prog = analogRead(A4);//Odczytanie wartości z ADC napiecie = odczytanaWartosc * (5.0/1023.0); //Przeliczenie wartości na napięcie if (odczytanaWartosc < prog) { //Czy jest ciemniej od ustawionego progu? digitalWrite(8, HIGH);//Włączenie diody if (wyslano == 0) Serial.println(napiecie); wyslano=1; } else { digitalWrite(8, LOW);//Wyłączenie diody wyslano=0; } } Treker, W końcu się udało... już myślałem że nie podołam Nie wiem dlaczego uparłem się n pętle while skoro można to było rozwazać poprostu dodatkowym if'em.. Mógłbyś mi jeszcze wytłumaczyć (ew. podać link) czym różni się "=" od "==" ?. Biore się za kolejne zad.dom. może nie pójdzie tak topornie
Mechano Styczeń 8, 2016 Udostępnij Styczeń 8, 2016 == to porównanie a = to przypisanie, dokładne wyjaśnienie znajdziesz w tym artykule: Jak unikać pułapek języka C?
Treker (Damian Szymański) Styczeń 9, 2016 Udostępnij Styczeń 9, 2016 PatrykOSK, cieszę się, że teraz działa. Jeśli chodzi o znaki równości, to sprawdź artykuł wskazany przez Mechano. Moja uwaga, co do kodu jest jeszcze taka, abyś dodał nawiasy klamrowe przy tym nowym if'ie. Nie są one niezbędne, ale dopiszesz coś później, zapomnisz o ich dodaniu i będą niepotrzebne problemy. Z nawiasami jest lepsza czytelność kodu
qbeczek Styczeń 24, 2016 Udostępnij Styczeń 24, 2016 Przy dłuższych kodach, wyskakuje mi coś takiego. Ktoś wie o co chodzi, nie chce się kompilować.
Treker (Damian Szymański) Styczeń 24, 2016 Udostępnij Styczeń 24, 2016 qbeczek, co to znaczy dłuższy kod? Kiedy dokładnie to wyskakuje? Próbowałeś reinstalować środowisko?
qbeczek Styczeń 24, 2016 Udostępnij Styczeń 24, 2016 Właściwie to nie wiem skąd się to bierze juz, na pocztaku wyskakiwalo powyzej 50 linijek kodu, a teraz dalo rade, czasami wyskakuje jeszcze przy funkcji delay, jak jej nie ma jest ok, wpisze cos i pada. [ Dodano: 24-01-2016, 21:04 ] #define przycisk 8 #define czerwona 9 #define zolta 10 #define zielona 11 int odczyt = 0; String podanaliczba = ""; int podanaliczba_int = 0; int proby = 3; int nowakolejka = 0; void setup() { Serial.begin(9600); pinMode(przycisk, INPUT_PULLUP); pinMode(czerwona, OUTPUT); pinMode(zolta, OUTPUT); pinMode(zielona, OUTPUT); digitalWrite(czerwona, LOW); digitalWrite(zolta, LOW); digitalWrite(zielona, LOW); } void loop() { if(nowakolejka == 0){ Serial.println("Witaj w mojej grze"); Serial.println("zgadnij jaka jest wartosc odczytana przez procesor"); Serial.println("masz 3 proby, granica bledu +-200\n powdodzenia"); Serial.println("Przekrec potencjometr i wcsinij przycisk"); ++nowakolejka;} else{ if(digitalRead(przycisk) == LOW){ Serial.println("Zaczynamy!"); Serial.println("podaj liczbe od 1 do 1021:"); while (digitalRead(przycisk) == LOW){delay(25);} } if(Serial.available()>0){ odczyt = analogRead(A5); podanaliczba = Serial.readStringUntil('\n'); podanaliczba_int=podanaliczba.toInt(); Serial.println("twoja liczba TO:"); Serial.println(podanaliczba_int); if(odczyt-200<=podanaliczba_int && odczyt+200>=podanaliczba_int){ digitalWrite(zielona, HIGH); digitalWrite(zolta, LOW); digitalWrite(czerwona, LOW); Serial.println("Brawo wygraleś"); Serial.println("Wcisnij przycisk RESET, aby zaczac od nowa"); } else{ proby--; digitalWrite(czerwona, LOW); digitalWrite(zolta, HIGH); digitalWrite(zielona, LOW); Serial.println("Nie udalo sie"); Serial.println("pozostaly: "); Serial.println(proby);Serial.println("proby"); } if(proby==0){ digitalWrite(czerwona, HIGH); digitalWrite(zielona, LOW); digitalWrite(zolta, LOW); Serial.println("Przegrales! Sprobj jeszcze raz!"); Serial.println("nacisnij RESET"); } } } } A tak przy okazji, jest ok? W gre grał moj tata, wiec zrobilem +-200 pkt
Treker (Damian Szymański) Styczeń 24, 2016 Udostępnij Styczeń 24, 2016 qbeczek, to, że program działa, to częściowy sukces. Pamiętaj o poprawnym formatowaniu kodu oraz komentarzach. W kilku miejscach dość dziwnie umieściłeś nawiasy np. tu: ++nowakolejka;} else{ if(digitalRead(przycisk) == LOW){ Zapis ten jest mylący, zrób to ładnie, tak jak było w artykułach
qbeczek Styczeń 24, 2016 Udostępnij Styczeń 24, 2016 Mówią, że ile programistów tyle róznych kodów, wiem wszyscy mi mowia, że moje kody są nieczytelne, ale dla mnie są, tak się przyzwyczaiłem edit rezcywiscie w niektorcyh miejscach juz sam sie nie lapie
Chumanista Styczeń 24, 2016 Udostępnij Styczeń 24, 2016 qbeczek, może i tak. Ale nie widziałem jeszcze kogokolwiek używającego zamykających nawiasów po średniku. Poza tym wcięcia tutaj: else{ if(digitalRead(przycisk) == LOW){ Serial.println("Zaczynamy!"); Serial.println("podaj liczbe od 1 do 1021:"); while (digitalRead(przycisk) == LOW){delay(25);} } Masz chyba losowo. To formatowanie to jakaś katastrofa, tego się nie da czytać.
Cierbo Styczeń 25, 2016 Udostępnij Styczeń 25, 2016 Cześć! Potrzebuje pomocy do zadania 4.6, otóż nie wiem czy idę w dobrym kierunku... Z góry dzięki za odpowiedź! int FotorezLewy = 0; int FotorezPrawy = 0; float NapiecieLewy = 0; float NapieciePrawy = 0; void setup() { Serial.begin(9600); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); } void loop() { FotorezLewy = analogRead(A4); FotorezPrawy = analogRead(A5); FotorezLewy = map(FotorezLewy, 0, 1023, 1, 3); FotorezPrawy = map(FotorezPrawy, 0, 1023, 1, 3); Serial.println(FotorezLewy); Serial.println(FotorezPrawy); if (NapiecieLewy == 2) { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, HIGH); digitalWrite(12, LOW); } else if (NapiecieLewy == 3) { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, HIGH); } else if (NapieciePrawy == 2) { digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); } else if (NapieciePrawy == 3) { digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); digitalWrite(12, LOW); } else { digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, LOW); digitalWrite(12, LOW); } delay(500); }
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ę »