Treker (Damian Szymański) Kwiecień 12, 2019 Udostępnij Kwiecień 12, 2019 @qubacki123, witam na forum Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start: Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników. Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć? Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości. Dnia 10.04.2019 o 18:56, qubacki123 napisał: Na jakiej zasadzie powinienem dobrać rezystor do fotorezystora w dzielniku napięcia (ze wzoru na dzielnik napięcia)? Posiadam w zestawie dwa fotorezystory 5-10k oraz 20-30k. Nie ma to większego znaczenia. Użycia innego fotorezystora sprawi jedynie, że Twój układ będzie reagował trochę inaczej, ale nadal poprawnie. W ramach eksperymentu możesz spokojnie zrobić dwa układy z różnymi fototranzystorami i sprawdzić jak działają 1
emilzazaza Czerwiec 1, 2019 Udostępnij Czerwiec 1, 2019 Proszę o pomoc. Czy w moim kodzie jest jakiś błąd? Jak więcej światła pada na fotorezystor po lewej, zapala się dioda po lewej, jak jest ~po równo, to dioda środkowa, a jak na fotorezystor po prawej to nadal świeci się środkowa dioda. int odczytL = 0; //odczyt z lewego fotorezystora int odczytR = 0; //odczyt z prawego fotorezystora #define LL 4 //dioda po lewej #define LR 2 //dioda po srodku #define RR 8 //dioda po prawej void setup() { pinMode(LL, OUTPUT); pinMode(LR, OUTPUT); pinMode(RR, OUTPUT); pinMode(A4, INPUT); //fotorezystor po lewej pinMode(A5, INPUT); //fotorezystor po prawej Serial.begin(9600); } void loop() { digitalWrite(LL, LOW); digitalWrite(LR, LOW); digitalWrite(RR, LOW); odczytL = analogRead(A4); odczytR = analogRead(A5); Serial.print(odczytL); Serial.print(" "); Serial.println(odczytR); delay(250); odczytL = map(odczytL, 10, 1020, 1, 5); odczytR = map(odczytL, 10, 1020, 1, 5); if (odczytL > odczytR){ digitalWrite(LL, HIGH); digitalWrite(LR, LOW); digitalWrite(RR, LOW); } else if (odczytL == odczytR){ digitalWrite(LR, HIGH); digitalWrite(LL, LOW); digitalWrite(RR, LOW); } else if (odczytL < odczytR){ digitalWrite(RR, HIGH); digitalWrite(LR, LOW); digitalWrite(LL, LOW); } delay(250); }
ethanak Czerwiec 2, 2019 Udostępnij Czerwiec 2, 2019 Owszem jest Tutaj: odczytL = map(odczytL, 10, 1020, 1, 5); odczytR = map(odczytL, 10, 1020, 1, 5); Widzisz? 1 1
emilzazaza Czerwiec 2, 2019 Udostępnij Czerwiec 2, 2019 Teraz widzę czarno na białym (a właściwie biało na szarym ). Dzięki 1
Ronaldo71888 Czerwiec 17, 2019 Udostępnij Czerwiec 17, 2019 Hejka. Podsyłam swoje rozwiązanie zadanie 4.5. Chodź nie jest ono do końca poprawne ;/ int odczyt_potencjometru = 0; // do odczytania liczby z potencjometru int wczytana_liczba = 0; int roznica = 0; #define LedZiel 9 #define LedZol 8 #define LedCzer 7 #define przycisk 4 #define potencjometr A5 void setup() { Serial.begin(9600); // ustawienie transmisji pinMode(przycisk, INPUT_PULLUP); // wyjscie 4 jako przycisk // ustawienia diod jako wyjscie pinMode(LedZiel, OUTPUT); pinMode(LedZol, OUTPUT); pinMode(LedCzer, OUTPUT); } void loop() { // ustawienie poczatkowe diod przed kazda gra digitalWrite(LedZiel, LOW); digitalWrite(LedZol, LOW); digitalWrite(LedCzer, LOW); int szansa = 3 ; // ile pozostalo szans odczyt_potencjometru = analogRead(A5); Serial.println(odczyt_potencjometru); // do sprawdzania jaka jest liczba (opcjonalne) while (digitalRead(przycisk) == LOW ){ // jesli przycisk nacisniety delay(1000); Serial.println("Podaj licze z zakresu 0 do 1023 +/- 50 " ); delay(1000); if ( Serial.available() > 0 ) { // jesli przekazana jest liczba wczytana_liczba = Serial.parseInt(); Serial.print("Podales liczbe:"); Serial.println(wczytana_liczba); roznica = odczyt_potencjometru - wczytana_liczba; if (roznica <= 50 && roznica >= -50){ Serial.println("Wygrales"); digitalWrite(LedZiel, HIGH); digitalWrite(LedZol, LOW); digitalWrite(LedCzer, LOW); }else{ szansa = szansa - 1; Serial.print("masz prob = "); Serial.println(szansa); digitalWrite(LedZol, HIGH); digitalWrite(LedCzer, LOW); digitalWrite(LedZiel, LOW); if( szansa <= 0 ){ Serial.println("Przegrales"); digitalWrite(LedZol,LOW); digitalWrite(LedZiel,LOW); digitalWrite(LedCzer, HIGH); } } } else { // gdy nie przakazano liczby Serial.println("nie podano liczby"); delay(1000); } } while (digitalRead(przycisk) == HIGH){ // komunitak gdy nie mamy przycsku wduszonego delay(3000); Serial.println("wdus przycisk"); } } Problem jest taki, że jak wpisze jakąś liczbę to Arduino po przejściu wszystkich warunków sam wstawia drugą liczbę wykonuje wszystkie warunki i dopiero potem czeka na wpisanie drugiej liczby. Czy ktoś wie dlaczego tak jest? Ewentualnie czy ktoś ma jakieś uwagi jak ten kod napisać lepiej, poprawniej? Dziękuje za podpowiedzi!
Treker (Damian Szymański) Czerwiec 17, 2019 Udostępnij Czerwiec 17, 2019 4 godziny temu, Ronaldo71888 napisał: sam wstawia drugą liczbę wykonuje wszystkie warunki i dopiero potem czeka na wpisanie drugiej liczby A sprawdzałeś jaka to liczba? Może zwyczajnie chodzi o znaki końca linii wysyłane przez Monitor Portu Szeregowego (wystarczy zmienić odpowiednią opcję w tym okienku). 1
Ronaldo71888 Czerwiec 18, 2019 Udostępnij Czerwiec 18, 2019 16 godzin temu, Treker napisał: A sprawdzałeś jaka to liczba? Może zwyczajnie chodzi o znaki końca linii wysyłane przez Monitor Portu Szeregowego (wystarczy zmienić odpowiednią opcję w tym okienku). Super. Dzięki za podpowiedź! Teraz już działa. Powiem szczerze, że nawet nie wiedziałem, że coś takiego wystarczy zmienić w terminalu. Myślałem, że jedyne rozwiązanie to poprawienie kodu tak, żeby czytał znak końca linii. Więc nauczyłem się kolejnej rzeczy! Jeszcze raz dzięki! Co do powyższego kodu to teraz wszystko jest okej. ; )
robal88 Czerwiec 21, 2019 Udostępnij Czerwiec 21, 2019 Witajcie mam banalne pytanie niestety nie mogę znaleźć działającej odpowiedzi... program dokładnie jak w kursie, jak zmodyfikować linię : Serial.println(napiecie); tak by w serial monitorze wyświetlana wartość była napiecie + "V" tj 5.00 V zamiast 5.00?
emilzazaza Czerwiec 21, 2019 Udostępnij Czerwiec 21, 2019 Serial.print(napiecie); Serial.println("V"); "ln" przy słowie print przerzuca do następnej linijki. 1
robal88 Czerwiec 21, 2019 Udostępnij Czerwiec 21, 2019 super bardzo dziękuję! nasuwa się kolejne pytanie dlaczego fraza poniżej nie działa w tym przypadku? Serial.println("Napięcie: "+ napiecie + " V");
Treker (Damian Szymański) Czerwiec 22, 2019 Udostępnij Czerwiec 22, 2019 @robal88 witam na forum 10 godzin temu, robal88 napisał: nasuwa się kolejne pytanie dlaczego fraza poniżej nie działa w tym przypadku? Serial.println("Napięcie: "+ napiecie + " V"); W dokumentacji Arduino znajdziesz dokładną informację na ten temat (jest tam praktycznie identyczny "anty" przykład). Zerknij tutaj: https://www.arduino.cc/en/Tutorial/StringAdditionOperator
voidtec Lipiec 9, 2019 Udostępnij Lipiec 9, 2019 1024 => 5V 1 => x 1024x = 1*5 x = (1*5V)/1024 = ~0,0049V A napięciu 5V nie odpowiada wartość 1023? Więc zamiast: napiecie = odczytanaWartosc * (5.0/1024.0); //Przeliczenie wartości na napięcie nie powinno być 5.0/1023.0 ? Owszem, wartości jest 1024, ale 0 reprezentuje zero, więc przedziałów między nimi jest 1023. Analogicznie, gdyby przetwornik był 2 bitowy czyli od 0 do 4 to 1=>1,67. 0=>0V 1=>1,67V 2=>3,33V 3=>5V Gdyby liczyć wg Twojego wzoru to by wyszło: 1=> 5/4=1,25 i by się mapowało: 0=>0V 1=>1,25V 2=>2,5V 3=>3,75V Czyli chyba bęłdnie, albo ja czegoś nie rozumiem. Zresztą widzę, że w kodzie w komentarzach ludzie też obliczają dzieląc przez 1023 1
Treker (Damian Szymański) Lipiec 10, 2019 Udostępnij Lipiec 10, 2019 @voidtec witam na forum Ten temat był tutaj omawiany wiele razy - zdania w tej kwestii są podzielone. 7 godzin temu, voidtec napisał: Zresztą widzę, że w kodzie w komentarzach ludzie też obliczają dzieląc przez 1023 Dzieje się tak, ponieważ pierwotnie w kursie było właśnie pokazane dzielenie przez 1023, a później zostało zaktualizowane na 1024. Jedna z dyskusji na ten temat: 1
adrianrogalski Lipiec 25, 2019 Udostępnij Lipiec 25, 2019 Hej mam problem z zadaniem 4.5 program nie chce wczytywać danych kiedy jest w instrukcji if dotyczącej wciśnięcia przycisku. Zaczyna działać dopiero kiedy oddzielam reszte if'ow(kod nr.2) i zastanawiam sie czym jest to spowodowane. #define zielona 10 #define zolta 13 #define czerwona 11 #define przycisk 12 #define potencjometr A5 int wartoscLosu = 0; String userInput = ""; int intInput = 0; int proby = 0; void setup() { Serial.begin(9600); pinMode(czerwona, OUTPUT); pinMode(zielona, OUTPUT); pinMode(zolta, OUTPUT); pinMode(przycisk, INPUT_PULLUP); Serial.println("Losuj"); } void loop() { if (digitalRead(przycisk) == LOW) { wartoscLosu = analogRead(potencjometr); Serial.println("Podaj liczbę"); if (Serial.available() > 0) { userInput = Serial.readStringUntil('\n'); Serial.println(userInput); intInput = userInput.toInt(); if (intInput <= (wartoscLosu + 50) && intInput >= (wartoscLosu - 50) ) { digitalWrite(zielona, HIGH); digitalWrite(czerwona, LOW); digitalWrite(zolta, LOW); Serial.println("Wygrałeś"); } else if (proby < 2) { digitalWrite(zolta, HIGH); digitalWrite(zielona, LOW); digitalWrite(czerwona, LOW); proby++; } else { digitalWrite(czerwona, HIGH); digitalWrite(zielona, LOW); digitalWrite(zolta, LOW); Serial.println("Przegrałeś"); } } } } #define zielona 10 #define zolta 13 #define czerwona 11 #define przycisk 12 #define potencjometr A5 int wartoscLosu = 0; String userInput = ""; int intInput = 0; int proby = 0; void setup() { Serial.begin(9600); pinMode(czerwona, OUTPUT); pinMode(zielona, OUTPUT); pinMode(zolta, OUTPUT); pinMode(przycisk, INPUT_PULLUP); Serial.println("Losuj"); } void loop() { if (digitalRead(przycisk) == LOW) { wartoscLosu = analogRead(potencjometr); Serial.println("Podaj liczbę"); } if (Serial.available() > 0) { userInput = Serial.readStringUntil('\n'); Serial.println(userInput); intInput = userInput.toInt(); if (intInput <= (wartoscLosu + 50) && intInput >= (wartoscLosu - 50) ) { digitalWrite(zielona, HIGH); digitalWrite(czerwona, LOW); digitalWrite(zolta, LOW); Serial.println("Wygrałeś"); } else if (proby < 2) { digitalWrite(zolta, HIGH); digitalWrite(zielona, LOW); digitalWrite(czerwona, LOW); proby++; } else { digitalWrite(czerwona, HIGH); digitalWrite(zielona, LOW); digitalWrite(zolta, LOW); Serial.println("Przegrałeś"); } } }
Treker (Damian Szymański) Lipiec 25, 2019 Udostępnij Lipiec 25, 2019 @adrianrogalski witam na forum! W pierwszym przypadku program powinien działać poprawnie, jeśli trzymasz cały czas wciśnięty przycisk, a chyba nie o to tu chodziło Zwróć uwagę, że program w takiej formie sprawdza czy odebrano jakieś dane przez UART tylko "natychmiast po wciśnięciu przycisku", a nie cały czas. Musisz sprawić, że program poczeka do momentu podania danych lub zapętlić część, w której odbierane są dane 1
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ę »