ethanak Maj 13, 2020 Udostępnij Maj 13, 2020 A to co? while(digitalRead(przycisk) = HIGH); Kompilator podaje Ci gdzie jest błąd (dokładny numer linii programu i nawet numer kolumny w której błąd wystąpił). Co to Twoim zdaniem znaczy: 9 minut temu, ZwiewnyTrzmiel napisał: C:\Users\Paweł\Documents\Arduino\sketch_may12a\sketch_may12a.ino:29:36: note: in expansion of macro 'HIGH' Resztę błędów powinieneś już znaleźć sam czytając komunikaty kompilatora.
ZwiewnyTrzmiel Maj 13, 2020 Udostępnij Maj 13, 2020 No dobra coś pokombinowałem i problem który mi wskazałeś zniknął po dodaniu na początku kodu #define HIGH Tylko kompletnie nie rozumiem dlaczego to pomogło i czemu to było potrzebne. Pojawił się jednak inny problem bo teraz kompilator podaje mi błąd: C:\Users\Paweł\Documents\Arduino\sketch_may12a\sketch_may12a.ino: In function 'void loop()': sketch_may12a:31:41: error: expected primary-expression before ')' token sketch_may12a:43:32: error: expected primary-expression before ')' token sketch_may12a:49:43: error: expected primary-expression before ')' token sketch_may12a:52:30: error: expected primary-expression before ')' token sketch_may12a:60:33: error: expected primary-expression before ')' token sketch_may12a:65:43: error: expected primary-expression before ')' token exit status 1 expected primary-expression before ')' token Czegoś mu w tych miejscach brakuje tylko nie mam pojęcia czego. Dla lepszego rozeznania wrzucam jeszcze raz kod. #define zielona 8 #define zolta 9 #define czerwona 10 #define przycisk 11 #define potencjometr A5 #define HIGH int wylosowanaLiczba; int Liczba; byte szanse; String podanaLiczba = ""; boolean START = true; void setup() { Serial.begin(9600); pinMode(zielona, OUTPUT); //Przypisanie wyjś pinMode(zolta, OUTPUT); pinMode(czerwona, OUTPUT); pinMode(przycisk, INPUT_PULLUP); } void loop() { if (START == true) { digitalWrite(zielona, LOW); digitalWrite(zolta, LOW); digitalWrite(czerwona, LOW); Serial.println("Nacisnij przycisk i przekręć potencjometr"); delay(50); while (digitalRead(przycisk) == HIGH) {} } wylosowanaLiczba = analogRead(potencjometr); Serial.println("Podaj liczbę od 0 do 1000"); //while(Serial.available() = 0); //Czekamy na podanie liczby if (Serial.available() > 0) { podanaLiczba = Serial.readStringUntil('\n'); Liczba = podanaLiczba.toInt(); if ((wylosowanaLiczba - Liczba <= 50) && (wylosowanaLiczba - Liczba >= -50)) { digitalWrite(zielona,HIGH); // zapal zieloną diodę Serial.println("Brawo odgadłeś liczbę"); Serial.println("Jeżeli chcesz zagrać jeszcze raz naciśnij przycisk"); delay(50); while (digitalRead(przycisk) == HIGH) {} START = true; } else if (szanse > 0) { digitalWrite(zolta,HIGH); Serial.println("Źle, podaj inną liczbę!"); szanse--; //Odejmij szansę Serial.println("Posiadasz jeszcze tyle szans"); Serial.println(szanse); START = false; } else if (szanse = 0) { digitalWrite(czerwona,HIGH); //Zapal czerwoną diodę digitalWrite(zolta,LOW); Serial.println("Przegrałeś!"); Serial.println("Jeżeli chcesz zagrać ponownie to naciśnij przycisk"); delay(50); while (digitalRead(przycisk) == HIGH) {} START = true; } } }
ethanak Maj 14, 2020 Udostępnij Maj 14, 2020 6 godzin temu, ZwiewnyTrzmiel napisał: No dobra coś pokombinowałem i problem który mi wskazałeś zniknął po dodaniu na początku kodu #define HIGH Tylko kompletnie nie rozumiem dlaczego to pomogło i czemu to było potrzebne. Pytania: Dlaczego wpadłeś na taki pomysł? Dlaczego uważasz że to pomogło, skoro wskutek umieszczenia owej niewątpliwie genialnej linijki ilość błędów wzrosła do kilkudziesięciu? 6 godzin temu, ZwiewnyTrzmiel napisał: Czegoś mu w tych miejscach brakuje tylko nie mam pojęcia czego. To pomyśl: Zdefiniowałeś HIGH jako 'nic', czyli napis o zerowej długości. W programie masz przykładowo: digitalWrite(zielona,HIGH) Preprocesor dostaje nazwę HIGH, sprawdza, że zamiast niej ma podstawić string o długości zero, i z radością przekazuje kompilatorowi linijkę: digitalWrite(zielona,); Jak myślisz, czy tu czegoś nie brakuje? Przy okazji: czytanie komunikatów błędów nie polega na wyłapywaniu ciągów cyferek oznaczających numer linii (bo niekoniecznie musi być to numer linii z błędem, czasem - jak widać - jest to jakaś linijka zawierająca deklarację przytoczona wyłącznie po to, aby nie trzeba było jej szukać po całym programie). Trzeba niestety czytać wszystko, te takie różne literki również. I nie ma że "nie znam angielskiego". Albo się tego angielskiego (w wersji uproszczonej do jakichś 300 słów) człowiek nauczy, albo zmienia hobby na hodowlę dyni.
ewgron Maj 21, 2020 Udostępnij Maj 21, 2020 Moja propozycja rozwiązania zadania 4.5 Układ: Kod: #define zielona 8 #define czerwona 9 #define zolta 10 #define potencjometr A5 #define przycisk 11 String wpisanaWartosc = ""; //Wartość wpisana przez gracza int liczba = 0; //Wartość wpisana przez gracza zamieniona na liczbę int wartoscUstawiona = 0; //Wartość odczytana z potencjometru int proba = 0; //Licznik prób void setup() { Serial.begin(9600); //Uruchomienie komunikacji pinMode(zielona, OUTPUT); //Ustawienie wyjść pinMode(czerwona, OUTPUT); pinMode(zolta, OUTPUT); pinMode(przycisk, INPUT_PULLUP); digitalWrite(zielona, LOW); //Wyłącznie diod digitalWrite(czerwona, LOW); digitalWrite(zolta, LOW); } void loop() { if (proba<3) { //Jeżeli licznik prób jest mniejszy od 3 Serial.println("Przekręć potencjometr, a następnie naciśnij przycisk."); while (digitalRead(przycisk) == HIGH) {delay(50);} //Poczekaj na wiśnięcie przycisku wartoscUstawiona = analogRead(potencjometr); //Odczytanie wartości z potenjometru Serial.println("Podaj liczbę z zakresu od 0 do 1023."); //Wyświetlenie komunikatu while (Serial.available()==0){delay(50);} //Oczekiwanie na wprowadzenie wartości if (Serial.available()>0) { //Jeżeli wartość została wprowadzona wpisanaWartosc = Serial.readStringUntil('\n'); //Przeczytanie wartości wprowadzonej liczba = wpisanaWartosc.toInt(); //Konwersja wartości wprowadzonej na liczbę if ((liczba<wartoscUstawiona+50) and (liczba>wartoscUstawiona-50)) { //Jeżeli wprowadzona liczba mieści się w zakresie digitalWrite(zielona, HIGH); //Włączenie diody zielonej Serial.println("Wygrana."); //Wyświetlenie komunikatu informującego o wygranej Serial.println(wartoscUstawiona); //Wyświetlenie prawidłowego wyniku delay(2000); digitalWrite(zielona, LOW); //Wyłączenie diody delay(1000); } else { //Jeżeli wprowadzona wartość jest spoza zakresu digitalWrite(zolta, HIGH); //Włączenie żółtej diody Serial.println("Błąd."); //Wyświetlenie komunikatu informującego o błędnej wartośći delay(2000); digitalWrite(zolta, LOW); //Wyłączenie żółtej diody delay(1000); proba=proba+1; //Zwiększenie licznika prób } } } else if (proba == 3) { //Jeżeli osiągnięto limit prób digitalWrite(czerwona, HIGH); //Włączenie czerwonej diody Serial.println("Przegrana."); //Wyświetlenie komunikatu informującego o przegranej Serial.println(wartoscUstawiona); //Wyświetlenie prawidłowego wyniku delay(2000); digitalWrite(czerwona, LOW); //Wyłączenie czerwonej diody delay(1000); proba = 0; //Zerowanie licznika prób } } 1
Gieneq Maj 22, 2020 Udostępnij Maj 22, 2020 @ewgron fajnie że robisz zadania domowe Przejrzałem kod i wygląda na to, że działa i jest całkiem ładnie napisany. Zastanawiam się tylko czy nie dałoby się pominąć jakoś powtórzenie Serial.available(). Tak też przyszłościowo, możesz spróbować napisać taką grę ale bez wykorzystania delay() może to być ciekawe wyzwanie. 1
ewgron Maj 22, 2020 Udostępnij Maj 22, 2020 1 godzinę temu, Gieneq napisał: @ewgron fajnie że robisz zadania domowe Przejrzałem kod i wygląda na to, że działa i jest całkiem ładnie napisany. Zastanawiam się tylko czy nie dałoby się pominąć jakoś powtórzenie Serial.available(). Tak też przyszłościowo, możesz spróbować napisać taką grę ale bez wykorzystania delay() może to być ciekawe wyzwanie. Dzięki za opinię Ciekawa sugestia do przemyślenia Przyznam, że na początku sceptycznie podchodziłem do Arduino ale już teraz czuję, że zaczyna mnie wciągać. I moim zdaniem prawdą jest, że trzeba wykonywać dużo ćwiczeń praktycznych - nauka przez rozwiązywanie problemów jest skuteczna i sprawia dużo frajdy 2
Tobitobiasz44 Lipiec 7, 2020 Udostępnij Lipiec 7, 2020 Mam na imię Tobiasz ,mam 9 lat. Mam problem w ćwiczeniu wskażnik na diodach.żadna diody nie chcę działać mino prądu.Oto podłączenie mojego układu.
Gieneq Lipiec 8, 2020 Udostępnij Lipiec 8, 2020 @Tobitobiasz44 wygląda dobrze, a czy mógłbyś wysłać kod programu? 1
Tobitobiasz44 Lipiec 9, 2020 Udostępnij Lipiec 9, 2020 (edytowany) Mój kod to Edytowano Lipiec 9, 2020 przez Tobitobiasz44
Gieneq Lipiec 10, 2020 Udostępnij Lipiec 10, 2020 @Tobitobiasz44 kod wygląda dobrze. A czy jak wgrasz program który tylko świci diodami, bez mierzenia, funkcji map i tym podobnych to też nie działa? W funkcji setup po prostu napisz pinMode...OUTPUT i digitalWrite z HIGH. 1
Karol_w1985 Lipiec 14, 2020 Udostępnij Lipiec 14, 2020 Witam. Bardzo fajny kurs. Jednakże nie znalazłem obiecanego wyjaśnienia dlaczego pomiar z adc jest "bardzo niedokładny". Że screena widać że odczyty są takie same, nie bujają, są stabilne. Moim zdaniem nie ma powodu dla którego miałby być nie dokładny, chyba że fabrycznie jest słabo zrobiony (nie zaglądałem do datasheet). Proszę o odpowiedź z uzasadnieniem. Pozdrawiam.
Gieneq Lipiec 15, 2020 Udostępnij Lipiec 15, 2020 @Karol_w1985 jest tu porównanie z multimetrem - w porównaniu z nim ADC mikrokontrolera jest dość niedokładne. Nie ma tu żadnego wyrafinowanego filtrowania sygnału, sam przetwornik nie jest bardzo dokładny - 10 bit.
J_Halcon Lipiec 17, 2020 Udostępnij Lipiec 17, 2020 Dzień dobry, mam takie pytanie, bo chciałbym do układu ze sterowaniem częstotliwością migania diody dołączyć 2 potencjometr, który w tym samym czasie regulowałby moc świecenia tej diody. Dopiąłem do układu 2 potencjometr (środkowa nóżka pod A4), jednak nie za bardzo doszedłem do działającego rozwiązania i mam 2 małe problemy. Po 1, potencjometr z regulacją mocy nie działa płynnie, tylko zero-jedynkowo i zmiana jest na zasadzie "świeci/nie świeci". A 2 rzecz, nie mogę dojść do momentu, by te 2 potencjometry działały równocześnie, albo działa jeden, albo drugi. Będę bardzo wdzięczy za jakiekolwiek wskazówki, jestem początkujący i pewnie coś robię źle.
AndrzejWi Lipiec 21, 2020 Udostępnij Lipiec 21, 2020 (edytowany) int odczytanaWartosc = 0; int prog = 0; String a = "ustawione"; void setup() { pinMode(8, OUTPUT); Serial.begin(9600); } void loop() { odczytanaWartosc = analogRead(A5); prog = analogRead(A4); Serial.println(a + prog ) ; Serial.println( "odczyt= " + odczytanaWartosc ); delay(6000); if(odczytanaWartosc < prog) { digitalWrite(8, HIGH); }else{ digitalWrite(8, LOW);} } Witam. Natrafiłem na taki oto problem z wyświetleniem komunikatu, otóż, podłączyłem potencjometr, fotorezystor i diodę i chciałem zobaczyć, jak wygląda sprawy regulacji i aktualne wskazania z fotorezystora. Zatem wyświetlać miało tak: Ustawione = tutaj wartość odczyt= tutaj wartość I teraz jeżeli słowo przypisze do zmiennej i wstawię j/w, to wyświetla poprawnie, natomiast gdy wpiszę po println("słowo" + zmienna); , to wyświetla mi krzaczki w monitorze portu szeregowego. Gdzie popełniam błąd? Czego nie wiem? Pozdrawiam serdecznie Edytowano Lipiec 21, 2020 przez AndrzejWi
Gieneq Lipiec 22, 2020 Udostępnij Lipiec 22, 2020 (edytowany) @AndrzejWi w Arduino nie można robić takich uproszczeń, często zapis Strina i zmiennej przy wypisywaniu wygląda tak: Serial.print("Wartosc to: "); Serial.println(zmienna); Więcej o Stringach możesz poczytać w dokumentacji ze strony Arduino. Masz tam przykład tego co można robić. W przypadku połączenia z wartością mógłbyś zamienić zmienną na String i ją połączyć z poprzednim, ale tak skomplikowane operacje na dynamicznym obiekcie nie są w Arduino zbyt dobre. Edytowano Lipiec 22, 2020 przez Gieneq 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ę »