Skocz do zawartości

radekwrc

Użytkownicy
  • Zawartość

    14
  • Rejestracja

  • Ostatnio

Reputacja

4 Neutralna

O radekwrc

  • Ranga
    2/10
  1. Wszystko co było jest nieaktualne. W końcu i ja zrozumiałem o co chodzi Teraz już działa zad 4.5 String liczbastring = ""; int odczytanaWartosc = 0; int liczba = 0; int roznica = 0; int proby = 0; int poczatek = 0; void setup() { Serial.begin(9600); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, INPUT_PULLUP); pinMode(A5, INPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } void loop() { if (poczatek == 0) { poczatek = 1; Serial.println("Ustaw potencjometr i wciśnij przycisk"); odczytanaWartosc = analogRead(A5); while (digitalRead(11) == HIGH) { delay(25); } } if (digitalRead(11) == LOW) { Serial.println("Podaj liczbe od 20 do 1023: (możesz sie pomylić o +/-50"); while (digitalRead(11) == LOW) { delay(25); } } else { if (proby < 3) { if (Serial.available() > 0) { liczbastring = Serial.readStringUntil('\n'); liczba = liczbastring.toInt(); Serial.println(liczba); roznica = liczba - odczytanaWartosc; if (roznica <= 50 && roznica >= -50) { Serial.println("WYGRAŁEŚ"); digitalWrite(9, LOW); digitalWrite(8, HIGH); delay(3000); digitalWrite(8, LOW); poczatek = 0; proby = 0; } else { proby = proby + 1; if (proby < 3) { Serial.println("błędna odpowiedz, spróbuj jeszcze raz"); digitalWrite(9, HIGH); } } } } else { Serial.println("PRZEGRAŁEŚ"); digitalWrite(9, LOW); digitalWrite(10, HIGH); delay(3000); digitalWrite(10, LOW); poczatek = 0; proby = 0; } } }
  2. { delay(25); tutaj już nie mają już sensu, wcześniej stosowałem je z nawiasem z obu stron {delay(25);} ,po to żeby program w tym miejscu wpadał w pustą pętlę, do momentu aż gracz wciśnie przycisk lub wpisze liczbę. Nie chciało mi to działać, ponieważ program się zatrzymywał i nie reagował. To jest cały mój problem, żeby program w tych miejscach zatrzymał się, a po otrzymaniu sygnału od gracza (wciśnięty przycisk, wpisana liczba), działał dalej.
  3. Tak wcześniej pisałem to sobie w notatniku. Wydaje mi się że program powinien działać, tylko jakbym nie kombinował z nawiasami to albo nie reaguje na przycisk/wpisanie wartości (jak pisałem {delay(25);} ), albo wykonuje wszystko bez względu na to czy coś wcisnę, napiszę ( jak piszę {delay(25); ...} , jak wyżej ).
  4. String liczbastring = ""; int odczytanaWartosc = 0; int liczba = 0; int roznica = 0; int proby = 0; void setup() { Serial.begin(9600); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, INPUT_PULLUP); pinMode(A5, INPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } void loop() { Serial.println("Ustaw potencjometr i wciśnij przycisk"); odczytanaWartosc = analogRead(A5); Serial.println(odczytanaWartosc); while (odczytanaWartosc >= 0) { delay(25); while (digitalRead(11) == LOW) { Serial.println("Podaj liczbe od 20 do 1023:"); while (Serial.available() == 0) { delay(25); while (proby < 3) { delay(25); liczbastring = Serial.readStringUntil('\n'); liczba = liczbastring.toInt(); Serial.println(liczba); roznica = liczba - odczytanaWartosc; if (roznica <= 50 && roznica >= -50) { Serial.println("wygrałes"); digitalWrite(8, HIGH); delay(10000); digitalWrite(8, LOW); } else { proby = proby + 1; Serial.println("błędna odpowiedz, spróbuj jeszcze raz"); digitalWrite(9, HIGH); } } // while (proby<3) Serial.println("przegrałeś"); digitalWrite(9, LOW); digitalWrite(10, HIGH); }//while (Serial.available() == 0) }//if (digitalRead(11) == LOW) }//while (odczytanaWartosc >= 0) }//void loop() Teraz już jest ładnie:)
  5. Tak dzisiaj poprawiłem, podpisałem który nawias dotyczy której pętli.
  6. Teraz działa:) #define diodaPIN 3 int wypelnienie = 0; int zmiana = 5; void setup() { pinMode(diodaPIN, OUTPUT);//Konfiguracja pinu jako wyjścia } void loop() { analogWrite(diodaPIN, wypelnienie); //Generujemy sygnał o zadanym wypełnieniu while(wypelnienie < 255) { //Jeśli wypełnienie mniejsze od 100% wypelnienie = wypelnienie + zmiana;//Zwiększamy wypełnienie analogWrite(diodaPIN, wypelnienie); delay(500); } while(wypelnienie <= 255 && wypelnienie >0) { wypelnienie = wypelnienie - zmiana; analogWrite(diodaPIN, wypelnienie); delay(500); } } Może umiał by Pan pomóc mi w zadaniu 4.5?
  7. //#define diodazielona 8 //#define diodazolta 9 //#define diodaczerwona 10 //#define przycisk A5 String liczbastring = ""; int odczytanaWartosc = 0; int liczba = 0; int roznica = 0; int proby = 0; //boolean petle = true; void setup() { Serial.begin(9600); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, INPUT_PULLUP); pinMode(A5, INPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } void loop() { Serial.println("Ustaw potencjometr i wciśnij przycisk"); odczytanaWartosc = analogRead(A5); Serial.println(odczytanaWartosc); while (odczytanaWartosc >= 0) { delay(25); 3 while (digitalRead(11) == LOW) { Serial.println("Podaj liczbe od 20 do 1023:"); while (Serial.available() == 0) { delay(25); while (proby < 3) { delay(25); liczbastring = Serial.readStringUntil('\n'); liczba = liczbastring.toInt(); Serial.println(liczba); roznica = liczba - odczytanaWartosc; if (roznica <= 50 && roznica >= -50) { Serial.println("wygrałes"); digitalWrite(8, HIGH); delay(10000); digitalWrite(8,LOW); } else { proby = proby + 1; Serial.println("błędna odpowiedz, spróbuj jeszcze raz"); digitalWrite(9, HIGH); } } // while (proby<3) Serial.println("przegrałeś"); digitalWrite(9,LOW); digitalWrite(10, HIGH); }//while (Serial.available() == 0) }//if (digitalRead(11) == LOW) }//while (odczytanaWartosc >= 0) }//void loop() W tej konfiguracji dzieje się tak: Podaj liczbe od 20 do 1023: 0 błędna odpowiedz, spróbuj jeszcze raz 0 błędna odpowiedz, spróbuj jeszcze raz 0 błędna odpowiedz, spróbuj jeszcze raz przegrałeś przegrałeś przegrałeś przegrałeś ... przegrałeś ... A jak po delay jest nawias to zatrzymuje się w tej pętli.
  8. Witam Zadanie 5.2, dlaczego nie działa? #define diodaPIN 3 int wypelnienie = 0; int zmiana = 5; void setup() { pinMode(diodaPIN, OUTPUT);//Konfiguracja pinu jako wyjścia } void loop() { analogWrite(diodaPIN, wypelnienie); //Generujemy sygnał o zadanym wypełnieniu while(wypelnienie < 255) { //Jeśli wypełnienie mniejsze od 100% wypelnienie = wypelnienie + zmiana; //Zwiększamy wypełnienie delay(50); } while(wypelnienie <= 255 && wypelnienie >0) { wypelnienie = wypelnienie - zmiana; delay(50); } }
  9. Mam taki problem z pętlami while, szczególnie z while (proby < 3) Jak zapiszę to w ten sposób: while (proby < 3) { delay(25); } Program dojdzie do momentu delay i nie reaguje już na to że wpisuję wartość np. 300 i klikam "wyślij". Jeśli usunę po delay nawias, to po wciśnięciu przycisku na płytce stykowej, wyskoczy : Podaj liczbe od 20 do 1023: 0 błędna odpowiedz, spróbuj jeszcze raz 0 błędna odpowiedz, spróbuj jeszcze raz 0 błędna odpowiedz, spróbuj jeszcze raz przegrałeś przegrałeś przegrałeś przegrałeś ... przegrałeś ... No mam problem z tymi nawiasami, przez to że tyle mam tych pętli while.
  10. Witam Dlaczego program blokuje się przy "while (proby < 3)?" //#define diodazielona 8 //#define diodazolta 9 //#define diodaczerwona 10 //#define przycisk A5 String liczbastring = ""; int odczytanaWartosc = 0; int liczba = 0; int roznica = 0; int proby = 0; //boolean petle = true; void setup() { Serial.begin(9600); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, INPUT_PULLUP); pinMode(A5, INPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); } void loop() { Serial.println("Ustaw potencjometr i wciśnij przycisk"); odczytanaWartosc = analogRead(A5); Serial.println(odczytanaWartosc); while (odczytanaWartosc >= 0) { delay(25); if (digitalRead(11) == LOW) { Serial.println("Podaj liczbe od 20 do 1023:"); while (Serial.available() == 0) { delay(25); while (proby < 3) { delay(25); } { liczbastring = Serial.readStringUntil('\n'); liczba = liczbastring.toInt(); Serial.println(liczba); roznica = liczba - odczytanaWartosc; if (roznica <= 50 && roznica >= -50) { Serial.println("wygrałes"); digitalWrite(8, HIGH); delay(10000); digitalWrite(8,LOW); } else { //if(proby < 2) proby = proby + 1; Serial.println("błędna odpowiedz, spróbuj jeszcze raz"); digitalWrite(9, HIGH); //petle = true; } } { Serial.println("przegrałeś"); digitalWrite(10, HIGH); } } } } } Mam jeszcze taki drugi wariant, ale nie wiem jak "przeskoczyć" z void setup do void loop //#define diodazielona 8 //#define diodazolta 9 //#define diodaczerwona 10 //#define przycisk A5 String liczbastring = ""; int odczytanaWartosc = 0; int liczba = 0; int roznica = 0; boolean zakres = false; void setup() { Serial.begin(9600); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, INPUT_PULLUP); pinMode(A5, INPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); Serial.println("Ustaw potencjometr i wciśnij przycisk"); odczytanaWartosc = analogRead(A5); Serial.println(odczytanaWartosc); if (digitalRead(11) == LOW) { Serial.println("Podaj liczbe od 20 do 1023:"); } } void loop() { while (Serial.available() == 0) { delay(25); } { liczbastring = Serial.readStringUntil('\n'); liczba = liczbastring.toInt(); Serial.println(liczba); } roznica = liczba - odczytanaWartosc; if (roznica <= 50 && roznica >= -50) { Serial.println("wygrałes"); digitalWrite(8, HIGH); } else { Serial.println("błędna odpowiedz, spróbuj jeszcze raz"); digitalWrite(9, HIGH); Serial.println("Podaj liczbe od 20 do 1023:"); } }
  11. Witam To jeśli to faktycznie jest normalne, że na A5 nawet bez podłączenia kabelka, Arduino twierdzi że jest jakieś napięcie ok. 3V, tzn. że płytka jest ok. To dlatego nie mogłem poradzić sobie z zadaniem 4.5, ponieważ napisałem taki warunek, że jak na A5 pojawi się jakaś wartość, np. większa niż 100, (a u mnie wyjście z potencjometru idzie do przycisku, a za przyciskiem do A5) to ma wyświetlić się napis "podaj wartość 0 - 1023". To dlatego ten napis ciągle się wyświetlał 99999... razy, skoro na A5 szczytuje sobie wartości ok. 600. Muszę wymyślić inny sposób, na razie nie chcę patrzeć jak zrobili to inni:) Ważne że płytka działa !
  12. Witam Niestety mam problem z moim Arduino. Wgrałem program na miernik napięcia (który wcześniej działał), int odczytanaWartosc = 0; float napiecie = 0; void setup() { Serial.begin(9600); } void loop() { odczytanaWartosc = analogRead(A5); napiecie = odczytanaWartosc * (5.0/1024.0); Serial.println(napiecie); delay(500); } i na monitorze portu szeregowego cały czas mam wartości ok. 3V, pomimo że nie do płytki nie wpiąłem nic oprócz oczywiście kabla usb! Taki problem mam na różnych programach, które wcześniej działały : int odczytanaWartosc = 0; //Zmienna do przechowywania odczytu ADC void setup() { Serial.begin(9600); } void loop() { odczytanaWartosc = analogRead(A5);//Odczytanie wartości z ADC Serial.println(odczytanaWartosc); delay(1000); } cały czas pokazuje wartość ok 600, chociaż wszystkie piny są wolne. Tak samo dzieje się na A4. Proszę administratora Trekker o pomoc.
  13. Witam Też nie miałem styczności z programowaniem, tylko z kursem elektroniki 1 i 2 oraz kurs techniki cyfrowej. Nie wiem jak inni napisali to zadanie z gwiazdką (oprócz użytkownika Wnuczus), ale ja napisałem w ten sposób (bez &&) i działa, może to będzie dla Pana zrozumiałe? (od laika) String odebraneDane = ""; boolean czerwona = false; boolean zielona = false; void setup () { Serial.begin(9600); pinMode(8, OUTPUT); pinMode(9, OUTPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); } void loop (){ if(Serial.available() > 0) { odebraneDane = Serial.readStringUntil('\n'); if (odebraneDane == "zielona") { if (zielona == false) { digitalWrite(8, HIGH); boolean (zielona = true); } else { digitalWrite(8, LOW); boolean (zielona = false); } } if (odebraneDane == "czerwona") { if (czerwona == true) { digitalWrite(9, LOW); boolean (czerwona = false); } else { digitalWrite(9, HIGH); boolean (czerwona = true); } } } } Później przeczytałem kod "Wnuczus" i spróbowałem napisać podobny: String odebraneDane = ""; void setup () { Serial.begin(9600); pinMode(8, OUTPUT); pinMode(9, OUTPUT); digitalWrite(8, LOW); digitalWrite(9, LOW); } void loop (){ if(Serial.available() > 0) { odebraneDane = Serial.readStringUntil('\n'); if (digitalRead(8) == LOW && odebraneDane == "zielona") { digitalWrite(8, HIGH); } else { digitalWrite(8, LOW); } if (digitalRead(9) == LOW && odebraneDane == "czerwona") { digitalWrite(9, HIGH); } else { digitalWrite(9, LOW); } } } też działa. Ale nie używam #define, bo nie ogarniam tego:)
  14. Witam Mam problem z kompilacją kodu: int licznik = 0; void setup() { Serial.begin(9600); //Inicjalizacja połączenia z PC } void loop() { Serial.println(licznik); //Wysłanie wartości zmiennej licznik licznik = licznik + 1; //Zwiększenie licznika o 1 delay(100); //Opóźnienie, aby efekt był lepiej widoczny } Wyskakuje komunikat : exit status 1 Błąd kompilacji dla płytki Arduino/Genuino Uno. Ktoś miał ten problem?
×
×
  • Utwórz nowe...