zabek Październik 27, 2025 Udostępnij Październik 27, 2025 co wiecej kiedy dopisalem komende by wyswietlal na koputerze wartosci cyftrowe napiec to pokazuje caly przekroj od 1 do 5, ale diody przy wartosci 4 i 5 sie nie zapalaja...
zabek Październik 27, 2025 Udostępnij Październik 27, 2025 przepraszam za zamieszanie, znalazlem blad. przyporzadkowalem dla 3 diody nie znak == a znak =co powodowalo ze uklad klinowal sie na wartosci napiecia 3 i nie chcial isc w gore, a tylko w dól. pozdrawiam. 2
zabek Listopad 3, 2025 Udostępnij Listopad 3, 2025 witam. podziele sie swoim rozwiazaniem zadania domowego 4,5 z. na plytce program dziala. ale byc moze mozna to bylo jakos bardziej eleganccko napiac. jesli tak to poprosze o rady. pozdrawiam # define zielona 12 # define zolta 11 # define czerwona 10 int zagadka = 0; // wynik liczbowy z potencjometru bool jedenKomunikat = true; String wpisanaLiczba = ""; int liczbaGracza = 0; // liczba gracza do porownania int zakresMin = 0; // określenie dolnego zakresu wygranej int zakresMax = 0; // okreslenie gornego zakresu wygranej int licznikProb = 0; //okresla ilosc szans ktorą ma gracz void setup() { pinMode(zielona, OUTPUT); //wyjscie diody zielonej pinMode(zolta, OUTPUT); //wyjscie diody zoltej pinMode(czerwona, OUTPUT); //wyjscie diody czerwonej pinMode(9, INPUT_PULLUP); //wejscie przycisku styku digitalWrite(zielona, LOW); // diody są wyłączone digitalWrite(zolta, LOW); digitalWrite(czerwona, LOW); Serial.begin(9600);// ustalenie komunikacji z komputerem } void loop() { zagadka = analogRead(A5); // przyporzadkuj zagadce wynik z potencjometru zakresMin = zagadka - 50; // okresl zakres wartosci wygrywajacych zgodnie z wynikiem potencjometru zakresMax = zagadka + 50; while (digitalRead(9) == LOW) { // jesli jest właczony przycisk włacznika if (jedenKomunikat == true) { Serial.println("podaj liczbę"); //napisz na ekranie ' podaj liczbe' jedenKomunikat = false; // napisz tylko raz ten komunikat } // zakonczenie petli if } // zakończenie while if (Serial.available() > 0) { // jesli gracz napisze jakąś liczbe wpisanaLiczba = Serial.readStringUntil('\n'); //przeczytaj te liczbe liczbaGracza = wpisanaLiczba.toInt(); // i zamien na zapis cyfrowy if (liczbaGracza >= zakresMin && liczbaGracza <= zakresMax ) { // jesli wpisana liczba miesci sie w zakresei wygranej digitalWrite(zielona, HIGH); // mignij zielona dioda delay(1000); digitalWrite(zielona, LOW); } else { //w innym przypdaku gry liczba gracza nie miesci sie w zakresie wygranej if (licznikProb == 2) { // i jesli wyczerpal sie limit prob digitalWrite(czerwona, HIGH); //zakoncz gre mignieciem czerwonej diody delay(1000); digitalWrite(czerwona, LOW); delay(1000); licznikProb = 0; // daj ponownie 3 szanse grającemu } else { // jesli gracz ma jeszcze szanse digitalWrite(zolta, HIGH); //mignij zolta dioda delay(1000); digitalWrite(zolta, LOW); licznikProb = licznikProb + 1; // zmniejsz limit szans } //zakonczenie petli else } // zakonczenie petli else } // zakonczenie petli if } //zakończenie loop
Kajti Listopad 10, 2025 Udostępnij Listopad 10, 2025 Link do aktualizacji "sprawdź samodzielnie w dokumentacji co robi funkcja toInt" W zadaniu domowym 4.5 jest nie działajacy link https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/toint/ Poprawny link: https://docs.arduino.cc/language-reference/en/variables/data-types/stringObject/Functions/toInt/ 1
Santiago Listopad 10, 2025 Udostępnij Listopad 10, 2025 @zabek odpowiedź jest prosta - jak jesteś obecny to daj znać - miałem podobny problem, ale wszystko rozwiązane. Jak odpowiesz to napiszę !
swirus 8 stycznia Udostępnij 8 stycznia (edytowany) Moja wersja zadania domowego 4.5 - może komuś kiedyś się przyda Zadanie 4.5 #define redDiodePin 8 #define yellowDiodePin 9 #define greenDiodePin 10 #define buttonPin 13 #define analogPin A4 #define buffor 50 int trialCounter = 0; void setup() { Serial.begin(9600); pinMode(redDiodePin, OUTPUT); //Konfiguracja wyjść pod diodę LED pinMode(yellowDiodePin, OUTPUT); //Konfiguracja wyjść pod diodę LED pinMode(greenDiodePin, OUTPUT); //Konfiguracja wyjść pod diodę LED pinMode(buttonPin, INPUT_PULLUP); digitalWrite(redDiodePin, LOW); digitalWrite(yellowDiodePin, LOW); digitalWrite(greenDiodePin, LOW); } void turnDiodeOn(bool success) { if(success) { digitalWrite(greenDiodePin, HIGH); trialCounter = 0; } else if(trialCounter <= 2) { digitalWrite(yellowDiodePin, HIGH); } else { digitalWrite(redDiodePin, HIGH); trialCounter = 0; } delay(1000); digitalWrite(greenDiodePin, LOW); digitalWrite(yellowDiodePin, LOW); digitalWrite(redDiodePin, LOW); } void loop() { if(digitalRead(buttonPin) == LOW) //przycisk nacisniety { if(Serial.available() > 0) { String userInput = Serial.readStringUntil('\n'); int userNumber = userInput.toInt(); if(userNumber || userInput=="0") { trialCounter++; int adcValue = analogRead(analogPin); bool success = userNumber >= adcValue-buffor && userNumber <= adcValue+buffor; turnDiodeOn(success); } else { Serial.print("Wprowadzony tekst: '"); Serial.print(userInput); Serial.println("' nie jest liczba!"); } } else { Serial.println("Nie podano liczby!"); } while(digitalRead(buttonPin) == LOW) {}; //czekamy na puszczenie przycisku } } Edytowano 8 stycznia przez swirus 1
swirus 8 stycznia Udostępnij 8 stycznia (edytowany) Dnia 3.11.2025 o 21:55, zabek napisał: witam. podziele sie swoim rozwiazaniem zadania domowego 4,5 z. na plytce program dziala. ale byc moze mozna to bylo jakos bardziej eleganccko napiac. jesli tak to poprosze o rady. pozdrawiam # define zielona 12 # define zolta 11 # define czerwona 10 int zagadka = 0; // wynik liczbowy z potencjometru bool jedenKomunikat = true; String wpisanaLiczba = ""; int liczbaGracza = 0; // liczba gracza do porownania int zakresMin = 0; // określenie dolnego zakresu wygranej int zakresMax = 0; // okreslenie gornego zakresu wygranej int licznikProb = 0; //okresla ilosc szans ktorą ma gracz void setup() { pinMode(zielona, OUTPUT); //wyjscie diody zielonej pinMode(zolta, OUTPUT); //wyjscie diody zoltej pinMode(czerwona, OUTPUT); //wyjscie diody czerwonej pinMode(9, INPUT_PULLUP); //wejscie przycisku styku digitalWrite(zielona, LOW); // diody są wyłączone digitalWrite(zolta, LOW); digitalWrite(czerwona, LOW); Serial.begin(9600);// ustalenie komunikacji z komputerem } void loop() { zagadka = analogRead(A5); // przyporzadkuj zagadce wynik z potencjometru zakresMin = zagadka - 50; // okresl zakres wartosci wygrywajacych zgodnie z wynikiem potencjometru zakresMax = zagadka + 50; while (digitalRead(9) == LOW) { // jesli jest właczony przycisk włacznika if (jedenKomunikat == true) { Serial.println("podaj liczbę"); //napisz na ekranie ' podaj liczbe' jedenKomunikat = false; // napisz tylko raz ten komunikat } // zakonczenie petli if } // zakończenie while if (Serial.available() > 0) { // jesli gracz napisze jakąś liczbe wpisanaLiczba = Serial.readStringUntil('\n'); //przeczytaj te liczbe liczbaGracza = wpisanaLiczba.toInt(); // i zamien na zapis cyfrowy if (liczbaGracza >= zakresMin && liczbaGracza <= zakresMax ) { // jesli wpisana liczba miesci sie w zakresei wygranej digitalWrite(zielona, HIGH); // mignij zielona dioda delay(1000); digitalWrite(zielona, LOW); } else { //w innym przypdaku gry liczba gracza nie miesci sie w zakresie wygranej if (licznikProb == 2) { // i jesli wyczerpal sie limit prob digitalWrite(czerwona, HIGH); //zakoncz gre mignieciem czerwonej diody delay(1000); digitalWrite(czerwona, LOW); delay(1000); licznikProb = 0; // daj ponownie 3 szanse grającemu } else { // jesli gracz ma jeszcze szanse digitalWrite(zolta, HIGH); //mignij zolta dioda delay(1000); digitalWrite(zolta, LOW); licznikProb = licznikProb + 1; // zmniejsz limit szans } //zakonczenie petli else } // zakonczenie petli else } // zakonczenie petli if } //zakończenie loop A jak zachowa sie Twoj program gdy uzytkownik wpisze litery zamiast cyfr a AnalogRead zwroci wynik mniejszy od 50, np. 40? Bedzie wygrana, a to chyba bledne zachowanie Edytowano 8 stycznia przez swirus 1
DonDiego 26 kwietnia Udostępnij 26 kwietnia (edytowany) Witam, naprawdę fajny kurs. Do chwili obecnej zjadałem go jak wściekły ale w końcu trafiła kosa na kamień . Zadanie z grą przysporzyło mi problemów, spędziłem przy nim około 3h i chciałem się podzielić moim rozwiązaniem jego, chętnie też wysłucham wszelakich podpowiedzi odnośnie mojego kodu. Pozdrawiam Serdecznie. #include <Arduino.h> #define ledRed 2 #define ledGreen 4 #define ledYellow 3 #define button 8 int wartoscPotencometru = 0; int odczytanaLiczbaInt = 0; String odczytanaLiczba = ""; byte szanse = 3; void sprawdzanie(){ if(odczytanaLiczbaInt - wartoscPotencometru >= -50 && odczytanaLiczbaInt - wartoscPotencometru <= 50){ // sprawdzanie czy wprowadzona liczba jest w zakresie +/- 50 od wartości potencjometru Serial.println("Brawo trafiłeś"); digitalWrite(ledGreen, HIGH); delay(1000); digitalWrite(ledGreen, LOW); }else{ // jeśli liczba jest poza zakresem +/- 50 od wartości potencjometru szanse = szanse - 1; Serial.println("Pódło, spróbuj ponownie " + String(szanse) + " szansy"); digitalWrite(ledRed, HIGH); delay(1000); digitalWrite(ledRed, LOW); } } void szprawdzanieSzans(){ if(szanse <= 2 && szanse > 0){ // jeśli użytkownik ma 2 lub mniej ale więcej niż 0 szans, zapal żółtą diodę i wyświetl komunikat "Spróbuj ponownie" digitalWrite(ledYellow, HIGH); Serial.println("Spróbuj ponownie"); }else if (szanse == 0){ // jeśli użytkownik stracił wszystkie szanse, zapal czerwoną diodę i wyświetl komunikat "Przegrałeś naciśnij reset na Arduino" digitalWrite(ledYellow, LOW); digitalWrite(ledRed, HIGH); Serial.println("Przegrałeś naciśnij reset na Arduino"); while(true){} // zatrzymaj program, aby użytkownik musiał zresetować Arduino, aby zagrać ponownie } } void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(ledRed, OUTPUT); pinMode(ledGreen, OUTPUT); pinMode(ledYellow, OUTPUT); pinMode(button, INPUT_PULLUP); } void loop() { // put your main code here, to run repeatedly: while (!Serial){ // czekaj aż port szeregowy będzie gotowy delay(100); } Serial.println("Przekręć potencjometr i naciśnij przycisk"); while(digitalRead(button) == HIGH){} // czekaj aż przycisk zostanie naciśnięty wartoscPotencometru = analogRead(A5); // odczytaj wartość potencjometru i zapisz ją do zmiennej Serial.print("Podaj Liczbe z zakresu od 0 do 1023: "); while (Serial.available() == 0){} // czekaj aż użytkownik wprowadzi dane przez port szeregowy while (Serial.available() > 0){ odczytanaLiczba = Serial.readStringUntil('\n'); odczytanaLiczbaInt = odczytanaLiczba.toInt(); // konwertuj wprowadzoną liczbę na typ int } sprawdzanie(); //wywołuje funkcje sprawdzania wyniku szprawdzanieSzans(); //wywołuje funkcje sprawdzania szans } Jeszcze chciałem pokazać swój kod odnośnie zadania z diodami LED efekt fajny ale mam wątpliwości czy oto chodziło #define lRed 2 #define lYellow 3 #define cGreen 4 #define rYellow 5 #define rRed 6 int wartoscLewa = 0; int wartoscPrawa = 0; int skalowanaLewa = 0; int skalowanaPrawa = 0; void lewaStrona(){ // Funkcja dla lewej strony, która zapala odpowiednie diody w zależności od wartości odczytanej z fotorezystora. Im większa wartość, tym więcej diod się zapala. if(skalowanaLewa == -1){ // -1, bo mapowanie jest od -1 do -3 digitalWrite(cGreen, HIGH); digitalWrite(lYellow, LOW); digitalWrite(lRed, LOW); } if(skalowanaLewa == -2){ // -2, bo mapowanie jest od -1 do -3 digitalWrite(cGreen, HIGH); digitalWrite(lYellow, HIGH); digitalWrite(lRed, LOW); } if(skalowanaLewa == -3){ // -3, bo mapowanie jest od -1 do -3 digitalWrite(cGreen, HIGH); digitalWrite(lYellow, HIGH); digitalWrite(lRed, HIGH); } } void prawaStrona(){ // Funkcja dla prawej strony, która zapala odpowiednie diody w zależności od wartości odczytanej z fotorezystora. Im większa wartość, tym więcej diod się zapala. if(skalowanaPrawa == 1){ // 1, bo mapowanie jest od 1 do 3 digitalWrite(cGreen, HIGH); digitalWrite(rYellow, LOW); digitalWrite(rRed, LOW); } if(skalowanaPrawa == 2){ // 2, bo mapowanie jest od 1 do 3 digitalWrite(cGreen, HIGH); digitalWrite(rYellow, HIGH); digitalWrite(rRed, LOW); } if(skalowanaPrawa == 3){ // 3, bo mapowanie jest od 1 do 3 digitalWrite(cGreen, HIGH); digitalWrite(rYellow, HIGH); digitalWrite(rRed, HIGH); } } void setup(){ Serial.begin(9600); pinMode(lRed, OUTPUT); pinMode(lYellow, OUTPUT); pinMode(cGreen, OUTPUT); pinMode(rYellow, OUTPUT); pinMode(rRed, OUTPUT); } void loop(){ wartoscLewa = analogRead(A5); wartoscPrawa = analogRead(A4); skalowanaLewa = map(wartoscLewa, 0, 500, -1, -3); //Mapowanie wartości odczytanych z fotorezystorów na zakres od -1 do -3 dla lewej strony skalowanaPrawa = map(wartoscPrawa, 0, 500, 1, 3); //i od 1 do 3 dla prawej strony. if(wartoscLewa > wartoscPrawa){ // Jeśli wartość z lewej strony jest większa niż z prawej, zapala diody po lewej stronie i gasi po prawej. lewaStrona(); digitalWrite(rYellow, LOW); digitalWrite(rRed, LOW); } if(wartoscLewa < wartoscPrawa){ // Jeśli wartość z prawej strony jest większa niż z lewej, zapala diody po prawej stronie i gasi po lewej. prawaStrona(); digitalWrite(lYellow, LOW); digitalWrite(lRed, LOW); } delay(100); } Edytowano 26 kwietnia przez DonDiego Dodanie kodo od zadania z ledami 1
karkojarko 28 czerwca Udostępnij 28 czerwca Zadanie 4.6 - dosyć ciężko mi dobrze wyskalować breakpointy. Jakieś uwagi / sugestie? #define y2 11 #define y1 10 #define b0 8 #define g1 6 #define g2 5 void turnOffAllLeds() { digitalWrite(y2, LOW); digitalWrite(y1, LOW); digitalWrite(b0, LOW); digitalWrite(g1, LOW); digitalWrite(g2, LOW); } void setup() { Serial.begin(9600); pinMode(y2, OUTPUT); pinMode(y1, OUTPUT); pinMode(b0, OUTPUT); pinMode(g1, OUTPUT); pinMode(g2, OUTPUT); turnOffAllLeds(); } int sens1 = 0; int sens2 = 0; int sensDiff = 0; int diffLevel = 0; void loop() { sens1 = analogRead(A0); sens2 = analogRead(A5); sensDiff = sens2 - sens1; diffLevel = map(sensDiff, -200, 200, 1, 5); Serial.println("sens1: " + String(sens1)); Serial.println("sens2: " + String(sens2)); Serial.println("diff: " + String(sensDiff)); Serial.println("diffLevel: " + String(diffLevel)); switch (diffLevel) { case 1: turnOffAllLeds(); digitalWrite(y2, HIGH); break; case 2: turnOffAllLeds(); digitalWrite(y1, HIGH); break; case 3: turnOffAllLeds(); digitalWrite(b0, HIGH); break; case 4: turnOffAllLeds(); digitalWrite(g1, HIGH); break; case 5: turnOffAllLeds(); digitalWrite(g2, HIGH); break; default: break; } 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ę »