Skocz do zawartości

Kurs Arduino - #4 - Przetwornik ADC


Pomocna odpowiedź

@Treker super, dziękuję!

Oczywiście nic się nie stało - otrzymałem wtedy odpowiedzi na mój post, jednak nie otrzymałem odpowiedzi na to konkretne pytanie.

Czy mógłbyś przybliżyć w jaki sposób to działa? Rozumiem to tak, że pobierana zostaje wartość, którą wpisałem tj. dana liczba po czym wykonuje się pętla i zostaje pobrana kolejna wartość tj. nic przez to, że nastąpiło przejście do kolejnej linii?

Link to post
Share on other sites

Cześć, Mam problem ze swoim kodem co do zadania 4.5. Mianowicie działa OK, ale nie wiem, gdzie powinienem wkleić linijkę, która wyświetla napis "Podaj liczbę"? Teraz Arduino wyświetla mi ten napis przy każdorazowym kliknięciu i niestety wyświetla go również przy ostatniej próbie, co dziwnie wygląda, bo wyświetlane są napisy:

Podaj liczbę
koniec gry
Nowa gra 

A powinno być wyświetlane bez linijki podaj liczbę. Z kolei jak przeniosę linijkę kodu odpowiedzialną za wyswietlanie tego napisu, pod warunek liczniknac to po kliknięciu guzika Arduino cały czas wysyła do komputera napis Podaj liczbę, co wygląda jeszcze gorzej niż w poprzednim wypadku. Prosze wytłumaczcie mi gdzie powinienem wpisać tą linijkę wyświetlająca napis, aby została wyświetlona tylko raz i dlaczego?

 

Mój kod:

#define diodac 8 // dioda czerwona
#define diodazo 9 // dioda zolta
#define diodaz 10 // dioda zielona
#define guzik 11 // Przycisk
int losowanie = 0;
String liczba = ""; // Pusty ciag odebranych danych
int intliczba = 0;
int liczniknac = 0;

void setup() {
Serial.begin(9600); // uruchomienie transmisji z UART 
pinMode(diodac, OUTPUT); // konf pinu 8 jako wyjscie
pinMode(diodazo, OUTPUT); // konf pinu 9 jako wyjscie
pinMode(diodaz, OUTPUT); // konf pinu 10 jako wyjscie
pinMode(guzik, INPUT_PULLUP); // konf pinu 11 jako wyjscie


digitalWrite(diodac, LOW); // wylaczenie diod
digitalWrite(diodazo, LOW);
digitalWrite(diodaz, LOW);
liczniknac=0;
}

void loop() {
 
losowanie=analogRead(A4); // Odczytujemy losową liczbę na potencjometrze

while (digitalRead(guzik) == LOW) { // Jesli wcisniemy przycisk
  liczniknac = liczniknac + 1; // zwieksz licznik nac o 1
  delay(1000);
  Serial.println("Podaj liczbe");
}
if(liczniknac == 1) {  
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
       liczba = Serial.readStringUntil('\n');  //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej liczba
       intliczba = liczba.toInt(); // konwersja slowa na liczbe
       if (losowanie > (intliczba - 50) and (losowanie < (intliczba + 50))) {
        Serial.println("Wygrana!!");
        digitalWrite(diodaz, HIGH);
        digitalWrite(diodac, LOW);
        digitalWrite(diodazo, LOW);
       }
       if (losowanie < (intliczba - 50) or (losowanie > (intliczba + 50))) {
        Serial.println("Spróbuj jeszcze raz");
        digitalWrite(diodazo, HIGH);
        digitalWrite(diodac, LOW);
        digitalWrite(diodaz, LOW);
       }
}
}
if(liczniknac == 2) {  
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
       liczba = Serial.readStringUntil('\n');  //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej liczba
       intliczba = liczba.toInt(); // konwersja slowa na liczbe
       if (losowanie > (intliczba - 50) and (losowanie < (intliczba + 50))) {
        Serial.println("Wygrana!!");
        digitalWrite(diodaz, HIGH);
        digitalWrite(diodac, LOW);
        digitalWrite(diodazo, LOW);
       }
       if (losowanie < (intliczba - 50) or (losowanie > (intliczba + 50))) {
        Serial.println("Spróbuj jeszcze raz");
        digitalWrite(diodazo, HIGH);
        digitalWrite(diodac, LOW);
        digitalWrite(diodaz, LOW);
       }
}
}
if(liczniknac == 3) {  
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
       liczba = Serial.readStringUntil('\n');  //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej liczba
       intliczba = liczba.toInt(); // konwersja slowa na liczbe
       if (losowanie > (intliczba - 50) and (losowanie < (intliczba + 50))) {
        Serial.println("Wygrana!!");
        digitalWrite(diodaz, HIGH);
        digitalWrite(diodac, LOW);
        digitalWrite(diodazo, LOW);
       }
       if (losowanie < (intliczba - 50) or (losowanie > (intliczba + 50))) {
        Serial.println("Spróbuj jeszcze raz");
        digitalWrite(diodazo, HIGH);
        digitalWrite(diodac, LOW);
        digitalWrite(diodaz, LOW);
       }
}
}
if(liczniknac >3) {
  Serial.println("Koniec Gry");
        digitalWrite(diodaz, LOW);
        digitalWrite(diodac, HIGH);
        digitalWrite(diodazo, LOW);
        liczniknac=0;
        Serial.println("Nowa gra.");
}
}

 

Edytowano przez lleymann
Link to post
Share on other sites

@lleymann witam na forum 🙂 Zacznijmy od tego, że trzeba tu zrobić jakiś mały porządek w tym programie - dlaczego masz tam zmienną "liczniknac" i spora część programu jest powielona 3 razy. Jak to miało działać? Opisz słownie proszę co chciałeś osiągnąć.

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

#define diodac 8 // dioda czerwona
#define diodazo 9 // dioda zolta
#define diodaz 10 // dioda zielona
#define guzik 11 // Przycisk
int losowanie = 0; // zdefiniowanie zmiennej losowanie
String liczba = ""; // Pusty ciag odebranych danych inaczej podana liczba
int intliczba = 0; // konwersja podanej liczby na wartosc liczbowa, zaczerpnalem to z forum
int liczniknac = 0; // licznik nacisniec guzika, zeby zliczac 3 proby

void setup() {
Serial.begin(9600); // uruchomienie transmisji z UART 
pinMode(diodac, OUTPUT); // konf pinu 8 jako wyjscie
pinMode(diodazo, OUTPUT); // konf pinu 9 jako wyjscie
pinMode(diodaz, OUTPUT); // konf pinu 10 jako wyjscie
pinMode(guzik, INPUT_PULLUP); // konf pinu 11 jako guzika


digitalWrite(diodac, LOW); // wylaczenie diod
digitalWrite(diodazo, LOW);
digitalWrite(diodaz, LOW);
liczniknac=0; // ustawienie licznika nacisniec na 0
}

void loop() {
 
losowanie=analogRead(A4); // Odczytujemy losową liczbę na potencjometrze

while (digitalRead(guzik) == LOW) { // Jesli wcisniemy przycisk
  liczniknac = liczniknac + 1; // zwieksz licznik nac o 1
  delay(1000); // czekamy 1 sekunde, aby guzik nie naciskal sie wiecej razy
  Serial.println("Podaj liczbe"); // wyswietlamy napis podaj liczbe
}
if(liczniknac == 1) {  // Jesli licznik nac bedzie rowny 1 wtedy realizujemy ponizsze warunki
  if(Serial.available() > 0) { //Czy Arduino odebrało dane w zsensie wpisana liczbe
       liczba = Serial.readStringUntil('\n');  //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej liczba
       intliczba = liczba.toInt(); // konwersja slowa na liczbe
       if (losowanie > (intliczba - 50) and (losowanie < (intliczba + 50))) { // Jesli wpisana liczba spelnia podany warunek
        Serial.println("Wygrana!!");// Wyswietlany jest napis wygrana
        digitalWrite(diodaz, HIGH); // I zapalana zielona dioda
        digitalWrite(diodac, LOW);
        digitalWrite(diodazo, LOW);
       }
       if (losowanie < (intliczba - 50) or (losowanie > (intliczba + 50))) { // Jesli wpisana liczba nie miesci sie w przedziale
        Serial.println("Spróbuj jeszcze raz"); // wyswietlany napis sprobuj jeszcze raz
        digitalWrite(diodazo, HIGH); // I zapala się dioda zolta
        digitalWrite(diodac, LOW);
        digitalWrite(diodaz, LOW);
       }
}
}
if(liczniknac == 2) {   // Jesli licznik nac bedzie rowny 2 wtedy realizujemy ponizsze warunki
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
       liczba = Serial.readStringUntil('\n');  //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej liczba
       intliczba = liczba.toInt(); // konwersja slowa na liczbe
       if (losowanie > (intliczba - 50) and (losowanie < (intliczba + 50))) { // Jesli wpisana liczba spelnia podany warunek
        Serial.println("Wygrana!!"); // Wyswietlany jest napis wygran
        digitalWrite(diodaz, HIGH);// I zapalana zielona dioda
        digitalWrite(diodac, LOW);
        digitalWrite(diodazo, LOW);
       }
       if (losowanie < (intliczba - 50) or (losowanie > (intliczba + 50))) {// Jesli wpisana liczba nie miesci sie w przedziale
        Serial.println("Spróbuj jeszcze raz");// wyswietlany napis sprobuj jeszcze raz
        digitalWrite(diodazo, HIGH);// I zapala się dioda zolta
        digitalWrite(diodac, LOW);
        digitalWrite(diodaz, LOW);
       }
}
}
if(liczniknac == 3) {  // Jesli licznik nac bedzie rowny 3 wtedy realizujemy ponizsze warunki
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
       liczba = Serial.readStringUntil('\n');  //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej liczba
       intliczba = liczba.toInt(); // konwersja slowa na liczbe
       if (losowanie > (intliczba - 50) and (losowanie < (intliczba + 50))) {// Jesli wpisana liczba spelnia podany warunek
        Serial.println("Wygrana!!"); // Wyswietlany jest napis wygran
        digitalWrite(diodaz, HIGH);// I zapalana zielona dioda
        digitalWrite(diodac, LOW);
        digitalWrite(diodazo, LOW);
       }
       if (losowanie < (intliczba - 50) or (losowanie > (intliczba + 50))) {// Jesli wpisana liczba nie miesci sie w przedziale
        Serial.println("Spróbuj jeszcze raz");// wyswietlany napis sprobuj jeszcze raz
        digitalWrite(diodazo, HIGH);// I zapala się dioda zolta
        digitalWrite(diodac, LOW);
        digitalWrite(diodaz, LOW);
       }
}
}
if(liczniknac >3) { // Jesli guzik jest już naciskany 4 raz 
  Serial.println("Koniec Gry"); // wyswtielany ma byc napis Koniec gry
        digitalWrite(diodaz, LOW);
        digitalWrite(diodac, HIGH); // Zapalana jest czerwona dioda
        digitalWrite(diodazo, LOW);
        liczniknac=0; // licznik naciśnięć jest zerowany
        Serial.println("Nowa gra."); // wyswietlany jest napis nowa gra i mozna grać od nowa
}
}

Uzupełniłem kod o opis poszczególnych linii. W trakcie opisywania zauważyłem, że trochę "łopatologicznie" podszedłem do tego. Ponieważ łatwo można skrócić kod używając tylko 2-óch warunków (liczniknac < lub =3      i        liczniknac > 3), zamiast wpisywać 4 warunki ( liczniknac = 1; =2; =3; >3). Ale to nie rozwiązuje mojego problemu z tym napisem podaj liczbę. Nie wiem dlaczego, ale w poprzednich programach też miałem problem z ciągłym powielaniem jakiejś czynności. Wiem dlaczego tak się dzieje (ponieważ program wykonuje to w pętli), ale nie wiem jak sobie z tym poradzić. 

Jeszcze taki krótki opis słowny, jak program miał działać:
Chciałem, żeby przy każdorazowym kliknięciu guzika wyświetlany był napisa podaj liczbę. Podajemy liczbę, program sprawdza, czy mieści się w przedziale, jesli tak wyświetlany jest napis wygrana i zielona dioda, jesli nie to żółta i napis sprubuj jeszcze raz. Po 4-tym kliknięciu guzika zapala sie czerwona dioda napis koniec gry i nowa gra, a oprócz tego wyświetla mi się jeszcze nad nimi napis Podaj liczbę, który chciałbym zlikwidować

 

Pochwalę się, że jak miałem 14 lat (teraz 30) to udało mi się napisać cały kalkulator w takim programie Delphi6 (nie wiem, czy to jeszcze istnieje i jaki tam był język, ale tez były finkcje takie jak tutaj, oprócz tego void loop i void setup). A teraz mam problem z napisaniem takiej wydawałoby się łatwej rzeczy.

Edytowano przez lleymann
Link to post
Share on other sites

@lleymann proponuję w takim razie najpierw zrobić porządek z tym programem i go skrócić. Pokombinuj jak to zrobić, aby nie trzeba było tego wszystkiego powielać - zrób tak, aby pozbyć się tego kodu, który jest powielony 3 razy (powinien być tylko raz). Wiem, że nie o to pytasz, ale zaufaj, że tak będzie lepiej - najpierw trzeba to "zwinąć" do krótszej, poprawnej formy 🙂

Link to post
Share on other sites

Poprawiłem, sprawdziłem, działa, tylko nie wiem jak się pozbyć tego napisu: Podaj liczbę po zakończeniu gry.

#define diodac 8 // dioda czerwona
#define diodazo 9 // dioda zolta
#define diodaz 10 // dioda zielona
#define guzik 11 // Przycisk
int losowanie = 0;// zdefiniowanie zmiennej losowanie
String liczba = ""; // Pusty ciag odebranych danych
int intliczba = 0;// konwersja podanej liczby na wartosc liczbowa, zaczerpnalem to z forum
int liczniknac = 0;// licznik nacisniec guzika, zeby zliczac 3 proby

void setup() {
Serial.begin(9600); // uruchomienie transmisji z UART 
pinMode(diodac, OUTPUT); // konf pinu 8 jako wyjscie
pinMode(diodazo, OUTPUT); // konf pinu 9 jako wyjscie
pinMode(diodaz, OUTPUT); // konf pinu 10 jako wyjscie
pinMode(guzik, INPUT_PULLUP); // konf pinu 11 jako przycisku


digitalWrite(diodac, LOW); // wylaczenie diod
digitalWrite(diodazo, LOW);
digitalWrite(diodaz, LOW);
liczniknac=0; // ustawienie licznika nacisniec na 0
}

void loop() {
 
losowanie=analogRead(A4); // Odczytujemy losową liczbę na potencjometrze

while (digitalRead(guzik) == LOW) { // Jesli wcisniemy przycisk
  liczniknac = liczniknac + 1; // zwieksz licznik nac o 1
  delay(1000); // Czekamy 1 sek
  Serial.println("Podaj liczbe"); // Wyswietlamy Podaj Liczbę
}
if((liczniknac == 3) or (liczniknac < 3)) {  // Jesli licznik nac bedzie równy lub mniejszy 3 wtedy realizujemy ponizsze warunki
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
       liczba = Serial.readStringUntil('\n');  //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej liczba
       intliczba = liczba.toInt(); // konwersja slowa na liczbe
       if (losowanie > (intliczba - 50) and (losowanie < (intliczba + 50))) { // Jesli wpisana liczba spelnia podany warunek
        Serial.println("Wygrana!!");// Wyswietlany jest napis wygrana
        digitalWrite(diodaz, HIGH);// I zapalana zielona dioda
        digitalWrite(diodac, LOW);
        digitalWrite(diodazo, LOW);
       }
       if (losowanie < (intliczba - 50) or (losowanie > (intliczba + 50))) {// Jesli wpisana liczba nie miesci sie w przedziale
        Serial.println("Spróbuj jeszcze raz");// wyswietlany napis sprobuj jeszcze raz
        digitalWrite(diodazo, HIGH);// I zapala się dioda zolta
        digitalWrite(diodac, LOW);
        digitalWrite(diodaz, LOW);
       }
}
}
if(liczniknac >3) {// Jesli guzik jest już naciskany 4 raz 
  Serial.println("Koniec Gry");// wyswtielany ma byc napis Koniec gry
        digitalWrite(diodaz, LOW);
        digitalWrite(diodac, HIGH);// Zapalana jest czerwona dioda
        digitalWrite(diodazo, LOW);
        liczniknac=0;// licznik naciśnięć jest zerowany
        Serial.println("Nowa gra.");// wyswietlany jest napis nowa gra i mozna grać od nowa
}
}

 

Link to post
Share on other sites

Czy chodzi Ci o takie coś:

#define diodac 8 // dioda czerwona
#define diodazo 9 // dioda zolta
#define diodaz 10 // dioda zielona
#define guzik 11 // Przycisk
int losowanie = 0;// zdefiniowanie zmiennej losowanie
String liczba = ""; // Pusty ciag odebranych danych
int intliczba = 0;// konwersja podanej liczby na wartosc liczbowa, zaczerpnalem to z forum
int liczniknac = 0;// licznik nacisniec guzika, zeby zliczac 3 proby

void setup() {
Serial.begin(9600); // uruchomienie transmisji z UART 
pinMode(diodac, OUTPUT); // konf pinu 8 jako wyjscie
pinMode(diodazo, OUTPUT); // konf pinu 9 jako wyjscie
pinMode(diodaz, OUTPUT); // konf pinu 10 jako wyjscie
pinMode(guzik, INPUT_PULLUP); // konf pinu 11 jako przycisku


digitalWrite(diodac, LOW); // wylaczenie diod
digitalWrite(diodazo, LOW);
digitalWrite(diodaz, LOW);
liczniknac=0; // ustawienie licznika nacisniec na 0
}

void loop() {
 
losowanie=analogRead(A4); // Odczytujemy losową liczbę na potencjometrze

while (digitalRead(guzik) == LOW) { // Jesli wcisniemy przycisk
  liczniknac = liczniknac + 1; // zwieksz licznik nac o 1
  delay(1000); // Czekamy 1 sek
  Serial.println("Podaj liczbe"); // Wyswietlamy Podaj Liczbę
}
if((liczniknac == 3) or (liczniknac < 3)) {  // Jesli licznik nac bedzie równy lub mniejszy 3 wtedy realizujemy ponizsze warunki
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
       liczba = Serial.readStringUntil('\n');  //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej liczba
       intliczba = liczba.toInt(); // konwersja slowa na liczbe
       if (losowanie > (intliczba - 50) and (losowanie < (intliczba + 50))) { // Jesli wpisana liczba spelnia podany warunek
        Serial.println("Wygrana!!");// Wyswietlany jest napis wygrana
        digitalWrite(diodaz, HIGH);// I zapalana zielona dioda
        digitalWrite(diodac, LOW);
        digitalWrite(diodazo, LOW);
       }
       else  {// Jesli wpisana liczba nie miesci sie w przedziale
        Serial.println("Spróbuj jeszcze raz");// wyswietlany napis sprobuj jeszcze raz
        digitalWrite(diodazo, HIGH);// I zapala się dioda zolta
        digitalWrite(diodac, LOW);
        digitalWrite(diodaz, LOW);
       }
}
}
if(liczniknac >3) {// Jesli guzik jest już naciskany 4 raz 
  Serial.println("Koniec Gry");// wyswtielany ma byc napis Koniec gry
        digitalWrite(diodaz, LOW);
        digitalWrite(diodac, HIGH);// Zapalana jest czerwona dioda
        digitalWrite(diodazo, LOW);
        liczniknac=0;// licznik naciśnięć jest zerowany
        Serial.println("Nowa gra.");// wyswietlany jest napis nowa gra i mozna grać od nowa
}
}

 

Link to post
Share on other sites

@lleymann dobrze, dobrze, to teraz dalej 😉 Skróć to: "(liczniknac == 3) or (liczniknac < 3)" - znak mniejszy/większy to nie jedyne operatory porównania w Arduino. Do tego pozbądź się jeszcze tego warunku "if(liczniknac >3) {// Jesli guzik jest już naciskany 4 raz".

Link to post
Share on other sites

@Treker czy chodziło o takie poprawki?

#define diodac 8 // dioda czerwona
#define diodazo 9 // dioda zolta
#define diodaz 10 // dioda zielona
#define guzik 11 // Przycisk
int losowanie = 0;// zdefiniowanie zmiennej losowanie
String liczba = ""; // Pusty ciag odebranych danych
int intliczba = 0;// konwersja podanej liczby na wartosc liczbowa, zaczerpnalem to z forum
int liczniknac = 0;// licznik nacisniec guzika, zeby zliczac 3 proby

void setup() {
Serial.begin(9600); // uruchomienie transmisji z UART 
pinMode(diodac, OUTPUT); // konf pinu 8 jako wyjscie
pinMode(diodazo, OUTPUT); // konf pinu 9 jako wyjscie
pinMode(diodaz, OUTPUT); // konf pinu 10 jako wyjscie
pinMode(guzik, INPUT_PULLUP); // konf pinu 11 jako przycisku


digitalWrite(diodac, LOW); // wylaczenie diod
digitalWrite(diodazo, LOW);
digitalWrite(diodaz, LOW);
liczniknac=0; // ustawienie licznika nacisniec na 0
}

void loop() {
 
losowanie=analogRead(A4); // Odczytujemy losową liczbę na potencjometrze

while (digitalRead(guzik) == LOW) { // Jesli wcisniemy przycisk
  liczniknac = liczniknac + 1; // zwieksz licznik nac o 1
  delay(1000); // Czekamy 1 sek
  Serial.println("Podaj liczbe"); // Wyswietlamy Podaj Liczbę
}
if(liczniknac <= 3) {  // Jesli licznik nac bedzie równy lub mniejszy 3 wtedy realizujemy ponizsze warunki
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
       liczba = Serial.readStringUntil('\n');  //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej liczba
       intliczba = liczba.toInt(); // konwersja slowa na liczbe
       if (losowanie > (intliczba - 50) and (losowanie < (intliczba + 50))) { // Jesli wpisana liczba spelnia podany warunek
        Serial.println("Wygrana!!");// Wyswietlany jest napis wygrana
        digitalWrite(diodaz, HIGH);// I zapalana zielona dioda
        digitalWrite(diodac, LOW);
        digitalWrite(diodazo, LOW);
       }
       else  {// Jesli wpisana liczba nie miesci sie w przedziale
        Serial.println("Spróbuj jeszcze raz");// wyswietlany napis sprobuj jeszcze raz
        digitalWrite(diodazo, HIGH);// I zapala się dioda zolta
        digitalWrite(diodac, LOW);
        digitalWrite(diodaz, LOW);
       }
}
}
else {// Jesli guzik jest już naciskany 4 raz 
  Serial.println("Koniec Gry");// wyswtielany ma byc napis Koniec gry
        digitalWrite(diodaz, LOW);
        digitalWrite(diodac, HIGH);// Zapalana jest czerwona dioda
        digitalWrite(diodazo, LOW);
        liczniknac=0;// licznik naciśnięć jest zerowany
        Serial.println("Nowa gra.");// wyswietlany jest napis nowa gra i mozna grać od nowa
}
}

 

Link to post
Share on other sites

Przesyłam moje zadania

4.4

#define zielonaD 7

int wartoscFoto = 0;
int wartoscPot = 0;
boolean powiadomienie = false;

void setup() {
  pinMode(zielonaD, OUTPUT);

  digitalWrite(zielonaD, LOW);
  Serial.begin(9600);
}

void loop() {
  wartoscPot = analogRead(A4);
  wartoscFoto = analogRead(A5);
  

  if (wartoscFoto < wartoscPot) {
    digitalWrite(zielonaD, HIGH);
    if (powiadomienie == false) {
      Serial.println("wlaczono swiatlo!");
      powiadomienie = true;
    }
  } else {
    digitalWrite(zielonaD, LOW);
    if (powiadomienie == true) {
      Serial.println("wyłączono swiatlo!");
      powiadomienie = false;
    }
  }
  delay(50);
}

4.5

int wartoscPot = 0; //Zmienna potencjometru
int szukanaWartosc = 0; //Wartość która gracz próbuje zgadnac

String podanaLiczba = ""; //Pusty ciąg odebranych danych
int podanaLiczba_int = 0;

int proba = 0; //Ilosc prób 

boolean grawlaczona = false; //Zmienna określa stan gry

#define przycisk 7
#define zielonaD 8
#define pomaranczowaD1 9
#define pomaranczowaD2 10
#define czerwonaD 11

void setup() {
  pinMode(8, OUTPUT); //Konfiguracja wyjść pod diodę LED
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  
  pinMode (7, INPUT_PULLUP); //Konfiguracja wejścia przycisku

  Serial.begin(9600); //Rozpoczęto komunikacje z PC

  Serial.println("Zagrajmy w grę!");
  delay(2000);
  Serial.println("Przekręć potencjometr w wybrane przec Ciebie miejsce! \nNastępnie wciśnij przycisk aby zacząć gre!");

  digitalWrite(zielonaD, LOW); //Wyłączenie zielonej diody
  digitalWrite(pomaranczowaD1, LOW); //Wyłączenie 1 pomaranczowej diody
  digitalWrite(pomaranczowaD2, LOW); //Wyłączenie 2 pomaranczowej diody
  digitalWrite(czerwonaD, LOW); //Wyłączenie czerwonej diody

}
 
void loop() {
wartoscPot = analogRead(A4);//Odczytanie wartości z potencjometru  
  
if (digitalRead(przycisk) == LOW) {
  szukanaWartosc = wartoscPot;
  Serial.println("Teraz podaj szukaną wartość w zakresie 0-1023!");
  digitalWrite(zielonaD, LOW); //Wyłączenie zielonej diody
  digitalWrite(pomaranczowaD1, LOW); //Wyłączenie 1 pomaranczowej diody
  digitalWrite(pomaranczowaD2, LOW); //Wyłączenie 2 pomaranczowej diody
  digitalWrite(czerwonaD, LOW); //Wyłączenie czerwonej diody
  grawlaczona = true; //właczono gre
  delay(500);
  }
  
if (Serial.available() > 0 && grawlaczona == true) { //Czy arduino odebrało dane?
  podanaLiczba = Serial.readStringUntil('\n'); //Zapisujemy podana Liczbę
  podanaLiczba_int = podanaLiczba.toInt ();
  
    if (podanaLiczba_int < szukanaWartosc + 50 && podanaLiczba_int > szukanaWartosc - 50 && proba <= 3) { //Określenie przedzialu poprawnej odpowiedzi
      Serial.print("Brawo! Poprawna odpowiedź! A dokładna wartosć to:");
      Serial.println(szukanaWartosc);
      digitalWrite(zielonaD, HIGH);
      digitalWrite(pomaranczowaD1, LOW); //Wyłączenie 1 pomaranczowej diody
      digitalWrite(pomaranczowaD2, LOW); //Wyłączenie 2 pomaranczowej diody
      digitalWrite(czerwonaD, LOW); //Wyłączenie czerwonej diody
      delay(5000);
      digitalWrite(zielonaD, LOW);
      proba = 0;
      Serial.println("Przekręć potencjometr potem wcisnij przycisk aby zagrac ponownie!");
      grawlaczona = false; //Wylaczono gre
    } else if (proba <= 2) {
      Serial.println("Błędna wartość!!");
      digitalWrite(pomaranczowaD1, HIGH);
      if (proba == 1) {
        digitalWrite(pomaranczowaD2, HIGH);
      }
      proba ++;
    } 
    if (proba == 3) {
      Serial.print("Wykorzystałeś wszystkie próby! Naciśnij przycisk i spróbuj ponownie! \n Poprawna odpowiedz wynosiła: ");
      Serial.println(szukanaWartosc);
      digitalWrite(czerwonaD, HIGH);
      grawlaczona = false; //Wylaczono gre
      delay(5000);
      digitalWrite(pomaranczowaD1, LOW); //Wyłączenie 1 pomaranczowej diody
      digitalWrite(pomaranczowaD2, LOW); //Wyłączenie 2 pomaranczowej diody
      digitalWrite(czerwonaD, LOW); //Wyłączenie czerwonej diody
      proba = 0; 
    }
  }
}

Ja trochę inaczej zrozumiałem zadanie niż w poleceniu. U mnie po naciśnięciu przycisku zapisuje szukaną wartość z potencjometru i włącza gre.

Pozdrawiam :]

Edytowano przez Achtenbob
  • Lubię! 1
Link to post
Share on other sites

@lleymann tak, już dużo lepiej 🙂 Tylko dla formalności pamiętaj jeszcze, że zamiast:

}
else {// Jesli guzik jest już naciskany 4 raz 

Lepiej jest formatować ten fragment programu w taki sposób:

} else {// Jesli guzik jest już naciskany 4 raz 

To teraz jeszcze raz zobacz na cały swój kod i pomyśl czy wiesz jak rozwiązać swój pierwotny program, jak nie to daj znać - będzie myśleć razem 😉

Link to post
Share on other sites

@Treker wybacz, ale poddaje się, już od godziny próbuje. Nawet próbowałem na ślepo wklejać tą komendę w poszczególne miejsca, ale nic z tego. Wydaje mi się, że to nie jest kwestia miejsca, a jakiejś dodatkowej funkcji. Tylko pytanie, czy ma być to funkcja if, while, czy jeszcze jakaś inna, bo widzę, że niektórzy zastosowali u siebie jakieś wartości true/false.

Link to post
Share on other sites

Siemka,

Przesyłam zadanko 4.6 :]

#define DiodaCzerwonaLewa 9
#define DiodaZoltaLewa 8
#define DiodaZielona 7
#define DiodaZoltaPrawa 6
#define DiodaCzerwonaPrawa 5

int CzerwonaWl = 125; //wloczenie czerwonej diody
int ZoltaWl = 50; //wlaczenie zoltej diody

int WartoscFoto1 = 0; //Zmienna 1 fotorezystora
int WartoscFoto2 = 0; //Zmienna 2 fotorezystora


void setup() {
  Serial.begin(9600);
  
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

}

void loop() {
  WartoscFoto1 = analogRead (A5);
  WartoscFoto2 = analogRead (A4);

  Serial.print(WartoscFoto1); Serial.print("  "); Serial.println(WartoscFoto2);

  digitalWrite(DiodaCzerwonaLewa, LOW);
  digitalWrite(DiodaZoltaLewa, LOW);
  digitalWrite(DiodaZielona, LOW);
  digitalWrite(DiodaZoltaPrawa, LOW);
  digitalWrite(DiodaCzerwonaPrawa, LOW);
  
  if (WartoscFoto1 - WartoscFoto2 < -CzerwonaWl ) {
    digitalWrite(DiodaCzerwonaLewa, HIGH);
  } 
  if (WartoscFoto1 - WartoscFoto2 < -ZoltaWl) {
    digitalWrite(DiodaZoltaLewa, HIGH);
  }
  if (WartoscFoto1 >= WartoscFoto2 - ZoltaWl && WartoscFoto1 <= WartoscFoto2 + ZoltaWl) {
    digitalWrite(DiodaZielona, HIGH);
  }
  if (WartoscFoto1 - WartoscFoto2 > ZoltaWl) {
    digitalWrite(DiodaZoltaPrawa, HIGH);
  }
  if (WartoscFoto1 - WartoscFoto2 > CzerwonaWl) {
    digitalWrite(DiodaCzerwonaPrawa, HIGH);
  }
}

 

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.