Maszynyodsrodka Styczeń 10, 2019 Udostępnij Styczeń 10, 2019 Cześć; Chciałbym Was prosić o pomoc z zadaniem 4.5. Z programowaniem nie miałem zbyt wiele doświadczenia. Poprzeglądałem trochę internet i w głowie stworzyła mi się jakaś wizia tego programu, ale wizja nie bardzo działa. Możecie coś podpowiedzieć? Co powinienem poprawić ewentualnie czy to co stworzyłem zmierza w dobrym kierunku czy lepiej skasować i zacząć od nowa? #define zielona 8 #define zolta 9 #define czerwona 10 #define przycisk 7 int i=0; String odczytanaWartosc = ""; //wartosc wpisana przez użytkownika int odczytanaWartosc_int = 0; //wartosc wpisana przez użytkownika int wartoscPot = 0; //wartosc odczytana z potencjometru void setup() { Serial.begin(9600); pinMode(zielona, OUTPUT); pinMode(zolta, OUTPUT); pinMode(czerwona, OUTPUT); pinMode(przycisk,INPUT_PULLUP); digitalWrite(zielona, LOW); digitalWrite(zolta, LOW); digitalWrite(czerwona, LOW); } void loop() { if (digitalRead(7) == LOW){ //jeśli przycisk wcisniety Serial.println("Podaj liczbe:"); for (i=1; i <= 3; i++){ //wykonujemy 3 proby odczytanaWartosc = Serial.readStringUntil('\n'); // odczyt wartości i zamianan na INT odczytanaWartosc_int = odczytanaWartosc.toInt(); if (Serial.available()>0){ //jeśli wprowadzone dane sa wieksze od 0 wartoscPot = analogRead(A5); //odczytujemy wartość z potencjometru if (odczytanaWartosc_int == wartoscPot || odczytanaWartosc_int <= wartoscPot+50 && odczytanaWartosc_int >= wartoscPot-50){ digitalWrite(zielona, HIGH); digitalWrite(zolta, LOW); digitalWrite(czerwona, LOW); Serial.println("Gratulacje, wygrales"); break; //przerywamy for w przypadku trafienia }else { digitalWrite(zielona, LOW); digitalWrite(zolta, HIGH); digitalWrite(czerwona, LOW); Serial.println("Zla liczba");//jeśli dobrz rozumiem wracm na początek pętli for } } Serial.println("Przegrałes, sprobuj ponownie"); } } }
Treker (Damian Szymański) Styczeń 15, 2019 Udostępnij Styczeń 15, 2019 @Maszynyodsrodka, wygląda ładnie, idziesz w dobrym kierunku Powodzenia w dalszych eksperymentach! W razie problemów możesz zawsze podejrzeć jak z zadaniem poradziły sobie inne osoby (w tym temacie znajdziesz sporo przykładowych programów).
TheProrok29 Luty 2, 2019 Udostępnij Luty 2, 2019 Witam. Rozwiązałem zadanie 4.6 i nawet działa. Jest jednak pewno ale... Wszystko działa tak jak powinno jednak jedna z diod świeci bardzo bardzo słabo, sprawdziłem prąd jakim jest zasilana podczas świecenia i jest to 0,08mA. Rezystory wszędzie jednakowe, skrypt wydaje się ok. W czym może tkwić problem? Zamieszczam nieco chaotyczne zdjęcie połączeń i skrypt. #define redLedL 8 #define yellowLedL 9 #define greenLed 10 #define yellowLedR 11 #define redLedR 12 int fotoRez1 = 0; int fotoRez2 = 0; byte value = 100; void setup() { pinMode(redLedL, OUTPUT); pinMode(yellowLedL, OUTPUT); pinMode(greenLed, OUTPUT); pinMode(redLedR, OUTPUT); pinMode(redLedR, OUTPUT); Serial.begin(9600); } void loop() { fotoRez1 = analogRead(A5); fotoRez2 = analogRead(A4); Serial.print("Fotorezystor 1: "); Serial.println(fotoRez1); Serial.print("Fotorezystor 2: "); Serial.println(fotoRez2); if (abs(fotoRez1 - fotoRez2) <= 50) { digitalWrite(redLedL, LOW); digitalWrite(yellowLedL, LOW); digitalWrite(greenLed, HIGH); digitalWrite(yellowLedR, LOW); digitalWrite(redLedR, LOW); } else if (fotoRez1 > fotoRez2 + value) { digitalWrite(redLedL, HIGH); digitalWrite(yellowLedL, LOW); digitalWrite(greenLed, LOW); digitalWrite(yellowLedR, LOW); digitalWrite(redLedR, LOW); } else if (fotoRez1 > fotoRez2) { digitalWrite(redLedL, LOW); digitalWrite(yellowLedL, HIGH); digitalWrite(greenLed, LOW); digitalWrite(yellowLedR, LOW); digitalWrite(redLedR, LOW); } else if (fotoRez2 > fotoRez1) { digitalWrite(redLedL, LOW); digitalWrite(yellowLedL, LOW); digitalWrite(greenLed, LOW); digitalWrite(yellowLedR, HIGH); digitalWrite(redLedR, LOW); } else if (fotoRez2 > fotoRez1 + value) { digitalWrite(redLedL, LOW); digitalWrite(yellowLedL, LOW); digitalWrite(greenLed, LOW); digitalWrite(yellowLedR, LOW); digitalWrite(redLedR, HIGH); } delay(1000); } Mowa o prawej żółtej diodzie, pin 11 na Arduino.
Treker (Damian Szymański) Luty 2, 2019 Udostępnij Luty 2, 2019 @TheProrok29 zostaw podłączenie takie jak masz i wgraj zwykły program, który miga diodą na pinie numer 11. Będziesz wiedział, czy to problem sprzętowy (uszkodzone Arduino, błędne połączenie), czy coś z programem. Daj znać jaki efekt
25pawel Luty 9, 2019 Udostępnij Luty 9, 2019 ZAD 4.5 Nie mam pojęcia dlaczego, przy wpisaniu błędnej odpowiedzi, gdy program po raz drugi prosi użytkownika o podanie liczby, program zachowuje się tak jakbym po raz kolejny wpisał liczbę(tą starą), a za trzecim razem ta sytuacja już nie występuje, ktoś mógłby mi pomóc? int wartoscADC=0; int liczba; int i=0; void setup() { // put your setup code here, to run once: pinMode(2,INPUT_PULLUP); Serial.begin(9600); pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,LOW); } void loop() { // put your main code here, to run repeatedly: if(digitalRead(2)==LOW) { wartoscADC=analogRead(A5); } if(wartoscADC>0) { Serial.println(liczba); Serial.println("Podaj liczbe: "); while(Serial.available()==0){} if(Serial.available()>0) { liczba=Serial.parseInt(); if(liczba>(wartoscADC-50) && liczba<(wartoscADC+50)) { Serial.println("WYGRALES"); digitalWrite(8,LOW); digitalWrite(9,LOW); digitalWrite(10,HIGH); while(liczba>(wartoscADC-50) && liczba<(wartoscADC+50)){} } else { i=i+1; if(i<3) { Serial.println("ZLE,ALE MASZ JESZCZE SZANSE: "); Serial.println(3-i); digitalWrite(9,HIGH); delay(2000); digitalWrite(9,LOW); } else { digitalWrite(8,HIGH); Serial.println("PRZEGRALES"); while(i=3){} } } } } }
Karliko Luty 11, 2019 Udostępnij Luty 11, 2019 Cześć, potrzebuję pomocy bo nie wiem jak zatrzymać program do czasu aż wejdą jakieś dane i chodzi o to by zatrzymywał przy każdym przejściu przez pętle void loop(). To mój kod do zad 4.5 (jeszcze niedokończony). int podanaWartosc = 2; int odczytanaWartosc = 0; void setup() { pinMode(4, INPUT_PULLUP); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); Serial.begin(9600); } void loop() { Serial.println("Proszę przekręcić potencjmoter i podać liczbę od 1 do 5"); while(Serial.available() == 0) {} Serial.println(podanaWartosc); podanaWartosc = Serial.parseInt(); Serial.println(podanaWartosc); while(digitalRead(4) == HIGH) { odczytanaWartosc = analogRead(A5); odczytanaWartosc = map(odczytanaWartosc, 0, 1023, 1, 5); } if(podanaWartosc == odczytanaWartosc) { digitalWrite(5,HIGH); Serial.println("Gratuluję!"); } } po pierwszym wpisaniu liczby wszystko jest okej ale potem jak wraca program do początku to przeskakuje pętle while(Serial.available() ==0) {}.
CharlesX Luty 11, 2019 Udostępnij Luty 11, 2019 Witam wszystkich na forum, jest to mój pierwszy post. Otóż w poradniku mam problem z zadaniem z fotorezystorem. Na wstępie napiszę, że program na arduino dla pewności wgrałem przekopiowany z kursu. Problem wygląda następująco. W kursie na schemiacie do fotorezystora i rezystora podłączony jest + i - i u mnie taki układ nie działa. Ale po odłączeniu tych przewodów zaczyna działać(po całkowitym zakryciu fotorezystora dioda miga, nie świeci ciągle) . Dlaczego tak się dzieje? Dołączam rysunek. Zrobiłem wersję z potencjomatrem, działa, ale zbudowałem jeszcze raz tą bez potencjometru i znowu ten sam problem. Wartość przełączania próbowałem też różną.
Treker (Damian Szymański) Luty 12, 2019 Udostępnij Luty 12, 2019 @25pawel, 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 9.02.2019 o 11:42, 25pawel napisał: Nie mam pojęcia dlaczego, przy wpisaniu błędnej odpowiedzi, gdy program po raz drugi prosi użytkownika o podanie liczby, program zachowuje się tak jakbym po raz kolejny wpisał liczbę(tą starą), a za trzecim razem ta sytuacja już nie występuje, ktoś mógłby mi pomóc? To powinno dać Ci do myślenia, że albo nie czyścisz zmiennej lub robisz to w złym momencie. Zacznijmy jednak od czegoś innego. Jak masz ustawiony monitor portu szeregowego? Czy do wysyłanych danych doklejasz jakieś znaki końca linii? @Karliko to samo pytanie, co wyżej - czy doklejasz do wysyłanych danych jakież znaki końca linii? @CharlesX, 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 11.02.2019 o 18:16, CharlesX napisał: Zrobiłem wersję z potencjomatrem, działa, ale zbudowałem jeszcze raz tą bez potencjometru i znowu ten sam problem. Wartość przełączania próbowałem też różną. Twoja "działająca" wersja jest na 100% zła, tutaj nie ma co dyskutować. Coś tam działa, bo przypadkiem zbiera jakieś "elektrośmieci" z powietrza. Spójrz jeszcze raz na swój układ i na schemat z kursu. Nie pokazałeś zdjęcia całej swojej płytki, ale według mnie układ masz podłączony inaczej (nie widać zasilania). Po trzecie nie masz chyba naszego zestawu, więc problemem może być np. zły fotorezystor lub rezystor (który ma jakieś dziwne kolorki) lub jakiś inny element. Nie mam pojęcia czym dokładnie dysponujesz, więc ciężko zdalnie pomóc. 1
Karliko Luty 13, 2019 Udostępnij Luty 13, 2019 @Treker Nie za bardzo wiem o co chodzi, nic nie dopisuje a powinienem dopisać np "2\n"?
Treker (Damian Szymański) Luty 13, 2019 Udostępnij Luty 13, 2019 @Karliko wiem, że Ty nic nie dopisujesz - pytam o ustawienia terminala, bo może tam masz wybraną taką opcję, która mogłaby powodować właśnie podobne błędy
Karliko Luty 13, 2019 Udostępnij Luty 13, 2019 @Treker Mam takie okienko z wyborem: -brak zakończenia linii -nowa linia -- to mam ustawione w domyśle -powrót karetki -zarówno NL jak i CR
Treker (Damian Szymański) Luty 13, 2019 Udostępnij Luty 13, 2019 @Karliko czyli przy wysyłaniu dodajesz znaki nowej linii. Ustaw na "Brak zakończenia linii" i sprawdź jeszcze raz działanie programu
Karliko Luty 13, 2019 Udostępnij Luty 13, 2019 @Treker Wszystko teraz działa, dziękuję a mógłbyś napisać co robią pozostałe opcje? Bo na stronie Arduino nic nie znalazłem.
CharlesX Luty 14, 2019 Udostępnij Luty 14, 2019 Zasilanie po dwóch stronach na pewno dobrze, bo zmierzyłem multimetrem i robiłem już inne prpjekty na tym samym podłączeniu. Może i sprawa tego fotorezystora. Ważne, że na wersji z potencjometrem działa
Treker (Damian Szymański) Luty 14, 2019 Udostępnij Luty 14, 2019 @Karliko, zerknij tutaj: https://pl.wikipedia.org/wiki/Koniec_linii to powinno się wyjaśnić czym jest NL i CR, bo to właściwie nie jest temat związany z samym Arduino @CharlesX, czyli kolejny raz mamy dowód na to, że można sobie dorobić dodatkowych problemów niewłaściwym sprzętem 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ę »