Skocz do zawartości

Kurs Arduino - #4 - Przetwornik ADC


Pomocna odpowiedź

6 godzin temu, spider_pajak napisał:

jaka jest różnica w stosowaniu i w jakim przypadku by to nie zadziałało

To są dwie zupełnie różne rzeczy i trudno mówić o różnicach - to tak jakbyś zapytał jaka jest różnica między mlekiem a olejem napędowym i kiedy z oleju nie będzie można zrobić twarożku.

Inaczej: 2 * 2 to 4, prawda? 2 + 2 to też 4, prawda? Czy więc pytanie, w jakim przypadku nie zadziała dodawanie zamiast mnożenia ma jakikolwiek sens?

A tak w ogóle to użycie & zamiast && (o ile pozwoli na to kompilator) zadziała, jeśli co najmniej jedna ze stron jest zerem. W pozostałych przypadkach zadziała albo nie zadziała.

Edytowano przez ethanak
Link do komentarza
Share on other sites

@ethanak skoro są to dwie zupełnie różne rzeczy to bym chciał wiedzieć jaka jest różnica i dlaczego nie powinienem tego stosować, a nie na zasadzie "nie bo nie".

 

12 godzin temu, ethanak napisał:

Inaczej: 2 * 2 to 4, prawda? 2 + 2 to też 4, prawda? Czy więc pytanie, w jakim przypadku nie zadziała dodawanie zamiast mnożenia ma jakikolwiek sens?

Ma sens, ponieważ tu jest jasne że w innym przypadku, np. 2*3 jest różne od 2+3. Jeśli & i && się czymś różni to bym chciał wiedzieć czym i kiedy które stosować 😉 Jeśli trzeba stosować && to ok, ale czy & też się stosuje w takim programowaniu? Jeśli tak to proszę o przykład 😉

Link do komentarza
Share on other sites

8 godzin temu, spider_pajak napisał:

to dwie zupełnie różne rzeczy to bym chciał wiedzieć jaka jest różnica i dlaczego nie powinienem tego stosować, a nie na zasadzie "nie bo nie".

@spider_pajak to dość skomplikowane do wytłumaczenia na tym etapie nauki, bo to są naprawdę zupełnie różne rzeczy, które mają tylko "przypadkowo" zbieżny zapis. A co najgorsze operacje na bitach to temat, który jest dla wielu początkujących chyba najtrudniejszy do zrozumienia. W praktyce ten operator "&" mógłby mieć zupełnie inny zapis typu "$^%^%" i wtedy raczej nie miałbyś żadnej wątpliwości, że to nie jest to samo co "&&" 😉

Zapis "&&" jest operatorem, który stosuje się przy warunkach i za jego pomocą możesz sprawdzić czy warunek po prawej i po lewej jest jednocześnie spełniony. Pojedynczy "&" to operator matematyczny (taki jaki plus, minus czy znak mnożenia). W tym przypadku wykonujesz jednak sumę logiczną na bitach liczb. Nie sprawdzasz więc czy warunek po prawej i lewej jest spełniony tylko obliczasz nową liczbę na zasadzie "warunek A" & "warunek B". Przykład działania tego operatora (na liczbach binarnych): 1010 & 1100 = 1000. Czyli, w zapisie dziesiętnym, w wyniku działania 10 & 12 otrzymujemy 8. Operatory bitowe znajdziesz nawet w kalkulatorze w Windowsie:

5b593-2020-02-03_06-34-05-7875.png

Reasumując, "&&" to operator logiczny do warunków, a "&" to operator bitowy do wykonywania koniunkcji na bitach dwóch (lub więcej liczb). To co mogę polecić do poczytania to (szczególnie pierwszy link):

Naprawdę na ten moment najlepiej byłoby uwierzyć, że w warunkach trzeba używać "&&" i przejść dalej, bo nawet w ramach odpowiedzi nie możemy pokazać jakiegoś bardziej rozbudowanego przykładu, bo nie znasz jeszcze wielu innych innych aspektów programowania. Do tego, "co gorsze" później okaże się, że pojedynczy & ma inne, jeszcze bardziej zawiłe zastosowanie. To trochę tak jak z rozwiązywaniem równań kwadratowych. W szkole uczymy się, że jak delta wychodzi ujemna to nie ma rozwiązania równania, a później na studiach dowiadujemy się, że to nie jest prawdą, ale nikt tego od razu nie wprowadza, aby nie było zbyt trudno 😉

  • Lubię! 1
Link do komentarza
Share on other sites

1 godzinę temu, Treker napisał:

@spider_pajak to dość skomplikowane do wytłumaczenia na tym etapie nauki, bo to są naprawdę zupełnie różne rzeczy, które mają tylko "przypadkowo" zbieżny zapis. A co najgorsze operacje na bitach to temat, który jest dla wielu początkujących chyba najtrudniejszy do zrozumienia. W praktyce ten operator "&" mógłby mieć zupełnie inny zapis typu "$^%^%" i wtedy raczej nie miałbyś żadnej wątpliwości, że to nie jest to samo co "&&" 😉

Naprawdę na ten moment najlepiej byłoby uwierzyć, że w warunkach trzeba używać "&&" i przejść dalej, bo nawet w ramach odpowiedzi nie możemy pokazać jakiegoś bardziej rozbudowanego przykładu, bo nie znasz jeszcze wielu innych innych aspektów programowania. 

 

Skąd założenie, że nie znam operacji bitowych i dopiero zaczynam przygodę z programowaniem? 😉 Tak się składa, że na studiach miałem programowanie i dużo rzeczy co jest z tym związane, znam podstawy, jednak nie Arduino. Obecnie zajmuje się też programowaniem sterowników PLC gdzie operacje na bitach to podstawa 😉 

1 godzinę temu, Treker napisał:

Zapis "&&" jest operatorem, który stosuje się przy warunkach i za jego pomocą możesz sprawdzić czy warunek po prawej i po lewej jest jednocześnie spełniony. Pojedynczy "&" to operator matematyczny (taki jaki plus, minus czy znak mnożenia). W tym przypadku wykonujesz jednak sumę logiczną na bitach liczb. Nie sprawdzasz więc czy warunek po prawej i lewej jest spełniony tylko obliczasz nową liczbę na zasadzie "warunek A" & "warunek B". Przykład działania tego operatora (na liczbach binarnych): 1010 & 1100 = 1000. Czyli, w zapisie dziesiętnym, w wyniku działania 10 & 12 otrzymujemy 8.

Myślę, że to dla mnie dobre i wystarczające wytłumaczenie. Dziwne tylko, że kompilator pozwala na zapis & w przypadku gdy nie operujemy na bitach, tylko np na matematycznych porównaniach.

Link do komentarza
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

17 minut temu, spider_pajak napisał:

Dziwne tylko, że kompilator pozwala na zapis & w przypadku gdy nie operujemy na bitach, tylko np na matematycznych porównaniach.

Kompilator pozwala na takie zagranie, bo myśli, że chcesz sprawdzić czy wynik operacji A & B jest prawdziwy, a za prawdę uznaje wszystko co jest równe lub większe od 1. Mógłbyś też np. specjalnie użyć warunku typu "if (losowa & 0b00000001)", który sprawdzałby czy wylosowana wartość jest nieparzysta, bo warunek byłby prawdziwy, jeśli "losowa" byłaby liczbą, która ma najmniej znaczący bit równy 1. Nie ma to jednak żadnego związku z operatorem && 🙂

Link do komentarza
Share on other sites

Bo dla kompilatora wszystko co jest liczbą całkowitą lub na taką da się bezpośrednio przekształcić jest po prostu paczką bitów. Co ciekawsze: odróżnienie "prawda" i "fałsz" polega na tym, że prawdą jest wszystko co nie jest zerem. Dlatego wyrażenie '0b10 && 0b01' będzie prawdą (bo po obu stronach mamy prawdę czyli liczby różne od zera) a '0b10 & 0b01' da w wyniku 0 (co doskonale wiesz, bo jak sam stwierdziłeś znasz podstawy operacji na bitach).

Poza tym naprawdę warto zajrzeć sobie choćby z ciekawości do wykazu operatorów w C++ (nie, nie ma takiego języka jak Arduino). I nie uwierzę, że ktoś kto na studiach miał choćby podstawy programowania w dowolnym języku (C/C++, PHP, Python, Java, JavaScript) nie odróżniał operatorów bitowych od logicznych. [Ciach, zdanie usunięte na podstawie PPF].

 

Edytowano przez Treker
PPF
Link do komentarza
Share on other sites

Poprawiona wersja 4.4. Musiałem podejrzeć na forum inne rozwiązania, bo miałem problem z ciągłym wyświetlaniem wartości odczytanych, kiedy dioda świeciła. Myślałem że i tutaj zadziała "pusta pętla" do oczekiwania na włączenie diody... 

int odczytanaWartosc = 0; //Zmienna do przechowywania odczytu ADC
int prog = 0; //Próg włączenia światła - ustawiany potencjometrem
float napiecie = 0;// Warotsc przeliczona na napiecie

void setup() {
  Serial.begin(9600);
  pinMode(8, OUTPUT); //Konfiguracja wyjść pod diodę LED
}

void loop() {
  odczytanaWartosc = analogRead(A5);//Odczytanie wartości z ADC
  prog = analogRead(A4);//Odczytanie wartości z ADC
  if (odczytanaWartosc < prog) { //Czy jest ciemniej od ustawionego progu?
    digitalWrite(8, HIGH);//Włączenie diody
    napiecie = analogRead(A5);//Odczytanie wartosci
    napiecie = napiecie * (5.0 / 1024.0); //Przeliczenie wartości na napięcie
    Serial.println(napiecie);//Wysyłamy zmierzone napięcie
    while (odczytanaWartosc < prog) {//Zatrzymujemy sie w petli aby wysłac zmierzone napiecie tylko raz
      odczytanaWartosc = analogRead(A5);//Odczytanie wartości z ADC
      prog = analogRead(A4);//Odczytanie wartości z ADC
      delay(50);//Opóźnienie
    }
  }
  else {
    digitalWrite(8, LOW);//Wyłączenie diody
  }

  delay(50);//Opóźnienie
}

 

Edytowano przez Vova
  • Lubię! 1
Link do komentarza
Share on other sites

#define przycisk 7
#define zielona 8
#define pomaranczowa 9
#define czerwona 10

int pozycja = 0;//Pozycja potencjometru odczytana z ADC
int gra = 3;// Ilosc mozliwosci
String liczba = ""; // Drukuj tekst w ""
int liczba_int = 0; // Konwersacja liczby
void setup() {
  Serial.begin(9600);//Nawiazanie komunikacji
  pinMode(7, INPUT_PULLUP); //Konfiguracja wyjsc
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(A5, INPUT);
}

void loop() {
  if (digitalRead(przycisk) == LOW) { //Gdy przycisk wcisniety
    pozycja = analogRead(A5); //Sprawdzamy pozycje potencjometra
    Serial.println("PODAJ LICZBE");//Drukuj tekst
    digitalWrite(zielona, LOW); //Diody nie swieca
    digitalWrite(pomaranczowa, LOW);
    digitalWrite(czerwona, LOW);
    delay(200);//Opoznienie
    Serial.println(pozycja);//Drukuj pozycjre potencjometra
  }
  if (Serial.available() > 0) { //Gdy wpisano liczbe
    liczba = Serial.readStringUntil('\n');
    liczba_int = liczba.toInt();//Konwersacja tekstu
    pozycja = analogRead(A5); //Sprawdzamy pozycje potencjometra
    if (liczba_int - pozycja <= 50 && liczba_int - pozycja >= -50) { //Gdy odczytane wartosci misccza sie w zakresie
      digitalWrite(zielona, HIGH); //Wlaczamy diode zelona
      delay(2000);//Opoznienie
      digitalWrite(zielona, LOW);
      gra = gra - 1; //O jedna mozliwosc mniej
      Serial.println("pozstalo"   +   String (gra)  +  " prob ");//Drukuj tekst
      
    }else{
      digitalWrite(czerwona, HIGH); //Wlacza sie dioda czerwona
      gra = gra - 1; //O jedna mozliwosc mniej
      delay(2000);//Opoznienie
      digitalWrite(czerwona, LOW); //Wylacza sie dioda czerwona
      Serial.println("pozstalo"   +   String (gra)  +  " prob ");//Drukuj tekst
 
    }else if (gra = 1) {//Gdy zostala 1 mozliwosc
      digitalWrite(pomaranczowa, HIGH);//Wlacz dide pomaranczowa
      Serial.println("pozstalo"   +   String (gra)  +  " prob ");//Drukuj tekst
      delay(1000);//Opoznienie
      digitalWrite(pomaranczowa, LOW);//Wylacz diode pomaranczowa
      
    }else if (gra = 0) {//Gdy wyczerpano wszystkie mozliwosci
      digitalWrite(pomaranczowa, HIGH);//Wlacz diode pomaranczowa i czerwona
      digitalWrite(czerwona, HIGH);
      Serial.println("Koniec gry, wcisnij przycisk");//Drukuj tekst
      
      while (digitalRead(przycisk) == HIGH) {//czekaj na wcisniecie przycisku
        delay(25);
      }
    }
  }
}

Witam. Pomóżcie znaleźć problem. Nie kompiluje mi się powyższy kod . Podświetlony jest pierwszy     else if     i wyskakuje błąd       exit status 1        expected '}' before 'else'. 

Link do komentarza
Share on other sites

Sprawdź else przed tym else ifem, a właściwie całą konstrukcję tego ifa i pewnie się zorientujesz o co chodzi 😉 czyt. brakuje pewnie jakiegoś znaczka, ale sprawdź, czy konstrukcja jest poprawna

 

+ jak już dajesz pustą nieskończoną pętle while to delay tam jest zbędny

Edytowano przez BananWszyscy
Link do komentarza
Share on other sites

6 godzin temu, Vova napisał:

Nie kompiluje mi się powyższy kod .

Nic dziwnego. Co ma znaczyć taka konstrukcja:
 

if (cośtam) {
	coś rób();
}
else {
	rób coś innego();
}
else {
	rób jeszcze cos innego();
}

Albo faktycznie jakiegoś nawiasu zapomniałeś (to już Ty musisz wiedzieć gdzie), albo uważasz ją za poprawną. Jeśli to drugie, to wyjaśnij jak to ma działać.

 

Link do komentarza
Share on other sites

4.5

Co myślicie o tym? + dodałem przycisk reset, żeby można było grać wiele razy

#define czerwona 4
#define zolta 5
#define zielona 6
#define przycisk 7
#define reset 8

int i=1;
int odczytana_wartosc = 0;
String dane_uzytkownika = "";
int wartosc_uzytkownika = 0; //wartosc wpisywana przez uzytkownika

void setup() {
  Serial.begin(9600);
  pinMode(czerwona, OUTPUT); //Konfiguracja wyjść pod diodę LED
  pinMode(zolta, OUTPUT); //Konfiguracja wyjść pod diodę LED
  pinMode(zielona, OUTPUT); //Konfiguracja wyjść pod diodę LED
  pinMode(przycisk, INPUT_PULLUP); //Konfiguracja przycisku
  pinMode(reset, INPUT_PULLUP); //Konfiguracja przycisku reset
  digitalWrite(czerwona,LOW);
  digitalWrite(zolta,LOW);
  digitalWrite(zielona,LOW);
}
 
void loop() {
while(digitalRead(przycisk)==HIGH) {delay(25);}
while(i<=3)
{
Serial.println("Podaj liczbę: ");
while(dane_uzytkownika==""){dane_uzytkownika=Serial.readStringUntil('\n');}
wartosc_uzytkownika=dane_uzytkownika.toInt();
Serial.println(wartosc_uzytkownika);
odczytana_wartosc=analogRead(A4);
if(i==1 || i==2)
{
   if((wartosc_uzytkownika > (odczytana_wartosc -50)) && (wartosc_uzytkownika <(odczytana_wartosc+50)))
   {
    digitalWrite(zielona,HIGH);
    delay(4000);
    Serial.println("Udało się! Wygrałeś!");
    break;
   }
   else
   {
    digitalWrite(zolta,HIGH);
    delay(4000);
   }
}
else
{
  if((wartosc_uzytkownika > (odczytana_wartosc -50)) && (wartosc_uzytkownika <(odczytana_wartosc+50)))
  {
    digitalWrite(zielona,HIGH);
    delay(4000);
    Serial.println("Udało się! Wygrałeś!");
    break;
  }
  else
  {
    digitalWrite(czerwona,HIGH);
    delay(4000);
  }
}
digitalWrite(zolta,LOW);
dane_uzytkownika="";
i++;
}
//Serial.println(analogRead(A4)); 

while(digitalRead(reset)==HIGH) {delay(25);}
digitalWrite(czerwona,LOW);
digitalWrite(zielona,LOW);
dane_uzytkownika="";

}

 

Edytowano przez Gieneq
Zachęcam do używania bloku kodu
Link do komentarza
Share on other sites

Zadanie 4.5 mój kod 🙂

#define button 8
#define red 3
#define green 5
#define yellow 7
#define adc 0

String odebraneDane = "";
int odebraneDaneInt = 0;
int odczytADC = 0;
int wieksza = 0; // odczyt ADC + 50
int mniejsza = 0; // odczyt ADC - 50
int wynik = 0; // jeżeli wpisana liczba mieści się w zakresie
int licznikProb = 0;
int start = 0;
int val = "";

void setup() {
pinMode(red,OUTPUT);
pinMode(green,OUTPUT);
pinMode(yellow,OUTPUT);
pinMode(button,INPUT_PULLUP);
Serial.begin(9600);
Serial.println("Witaj! Zapraszam do prostej gry, naciśnij guzik aby zacząć");}

void loop(){
odczytADC = analogRead(adc); // odczyt z ADC
wieksza = odczytADC + 50; // odczyt ADC + 50
mniejsza = odczytADC - 50; // odczyt ADC - 50


while (digitalRead (button) == LOW) { // jeżeli przycisk jest wciśnie daje informacje o starcie gry 
czyszczeniebuforu(); // czyści bufor z danych wpisanych ponad 3 próby
digitalWrite (green, LOW); // czerwonaLed wyłączona
digitalWrite (red, LOW); // zielonaLed wyłączona
przycisk (); // Wyświetla informacje o zasadach gry
start = 1; // pozwala uruchomić grę od nowa po wpisaniu 3 prób, ulazeżniając zasady od wciśniecia przycisku
delay (500);}

if(Serial.available () >0){ // uruchamia pobieranie danych
if(Serial.available () >3){licznikProb = 0;} // kasuje licznik gry dla większej ilości niż 3, bufor czyści zapisane wyniki ale licznik wzrasta po każdym wpisaniu danych wiec też trzeba go wyzerować. 

if (licznikProb <= 3 && start == 1) { // 
licznikProb = licznikProb + 1; // po wpisaniu danych zwiększa licznik gry o jeden, maksymalnie do 3

if (licznikProb ==1) {
Dane ();
Serial.println ("");
Serial.println ("podałeś: " + odebraneDane);
if (odebraneDaneInt > mniejsza && odebraneDaneInt < wieksza) {wynik = 1;}
else {wynik = 0;}
if (wynik == 1){wygrana();}
if (wynik != 1){szansa();}
}

if (licznikProb ==2){
Dane ();
Serial.println(licznikProb);
Serial.println ("");
Serial.println ("podałeś: " + odebraneDane);
if (odebraneDaneInt > mniejsza && odebraneDaneInt < wieksza) {wynik = 1;}
else {wynik = 0;}
if (wynik == 1){wygrana();}
if (wynik != 1){szansa2();}
}
                    
if (licznikProb == 3){
  Dane ();
  Serial.println(licznikProb);
  Serial.println ("");
  Serial.println ("podałeś: " + odebraneDane);
  koniec();}
}
 }
  }


void Dane() {
odebraneDane = Serial.readStringUntil ('\n');
odebraneDaneInt = odebraneDane.toInt();}

void przycisk() {
Serial.println ("");
Serial.println ("Twoim zadaniem jest zgadnąć z dokładnościa +/- 50 odczyt z potenciometru");
Serial.println ("Ustaw potenciometr w dowolne miejsce");
Serial.println ("Podaj liczbę od 1 do 1022");
delay(1000);}

void wygrana() {
Serial.println ("Wygrałeś");
Serial.println ("");
digitalWrite (green,HIGH);
digitalWrite (yellow,LOW);
digitalWrite (red,LOW);
delay (1000);
Serial.println ("Naciśni guzik by zacząć od nowa");
start = 0;}

void szansa () {
Serial.println ("Niesty, nie trafiłeś ");
Serial.println ("Spróbuj jeszcze raz, masz dwie próby ");
digitalWrite (yellow,HIGH);
digitalWrite (green,LOW);}

void szansa2 () {
Serial.println ("Niesty, nie trafiłeś ");
Serial.println ("Spróbuj jeszcze raz, masz jedną próbę ");
digitalWrite (yellow,HIGH);
digitalWrite (green,LOW);}

void koniec () {
Serial.println ("Koniec gry, nasiśnij przycisk by zacząc raz jeszcze ");
digitalWrite (yellow,LOW);
digitalWrite (green,LOW);
digitalWrite (red,HIGH);
start = 0;}

void czyszczeniebuforu() {
while(Serial.available()){
       Serial.read();
}
}  

 

Edytowano przez Gieneq
Link do komentarza
Share on other sites

@BananWszyscy @ethanak Diękuję za naprowadzenie na błedy. 

Oto nowy kod zadania 4.5

#define przycisk 7
#define zielona 8
#define pomaranczowa 9
#define czerwona 10

int pozycja = 0;//Pozycja potencjometru odczytana z ADC
int gra = 3;// Ilosc zsans
String liczba = ""; // Drukuj tekst w ""
int liczba_int = 0; // Konwersacja liczby
void setup() {
  Serial.begin(9600);//Nawiazanie komunikacji
  pinMode(7, INPUT_PULLUP); //Konfiguracja wyjsc
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(A5, INPUT);
}

void loop() {
  if (digitalRead(przycisk) == LOW) { //Gdy przycisk wcisniety
    delay(200);//Opoznienie
    pozycja = analogRead(A5); //Sprawdzamy pozycje potencjometra
    Serial.println("PODAJ LICZBE");//Drukuj tekst
    digitalWrite(zielona, LOW); //Diody nie swieca
    digitalWrite(pomaranczowa, LOW);
    digitalWrite(czerwona, LOW);
    delay(200);//Opoznienie

  } if (Serial.available() > 0) { //Gdy wpisano liczbe
    liczba = Serial.readStringUntil('\n');
    liczba_int = liczba.toInt();//Konwersacja tekstu
    pozycja = analogRead(A5); //Sprawdzamy pozycje potencjometra
    if (liczba_int - pozycja <= 50 && liczba_int - pozycja >= -50) { //Gdy odczytane wartosci misccza sie w zakresie
      digitalWrite(zielona, HIGH); //Wlaczamy diode zelona
      delay(2000);//Opoznienie
      digitalWrite(zielona, LOW);//Wylaczamy diode
      Serial.println("Pozstalo "   +   String  (gra)  +  " szanse ");//Drukuj tekst
      delay(100);//Opoznienie

    } else {
      digitalWrite(czerwona, HIGH); //Wlacza sie dioda czerwona
      delay(2000);//Opoznienie
      digitalWrite(czerwona, LOW); //Wylacza sie dioda czerwona
      gra = gra - 1;//O jedna szansa mniej
      delay(100);//Opoznienie
      Serial.println("Pozstalo "   +   String  (gra)  +  " szanse ");//Drukuj tekst


    } while (Serial.available() > 0) {} // Oczekiwanie na wpisanie liczby

    if (gra < 2) { //Gdy zostala 1 szansa
      digitalWrite(pomaranczowa, HIGH);//Wlacz dide pomaranczowa
      delay(1000);//Opoznienie
      digitalWrite(pomaranczowa, LOW);//Wylacz diode pomaranczowa

    } while (Serial.available() > 0) {}// Oczekiwaine na wpisanie liczby

  } if (gra < 1) { //Gdy wyczerpano wszystkie szanse
    digitalWrite(pomaranczowa, HIGH);//Wlacz diode pomaranczowa i czerwona
    digitalWrite(czerwona, HIGH);
    Serial.println("Koniec gry, wcisnij przycisk");//Drukuj tekst

    while (digitalRead(przycisk) == HIGH) {}//Czekaj na wcisniecie przycisku
    gra = 3;
  }
}

 

  • Lubię! 1
Link do komentarza
Share on other sites

Hej, mam pytanie odnośnie zadania 4.6. Zrobiłem zadanie, diody pokazują kierunek gdzie jest więcej światła, dodałem opóźnienie delay(100) gdyż ładnie to wygląda jak LED-y reagują dość szybko na zachodzące zmiany, ale za to źle się odczytuje wartości fotorezystorów w monitorze portu. Czy jest jakaś komenda która kasuje dane w monitorze? Coś w stylu Serial.clear().

  • Lubię! 1
Link do komentarza
Share on other sites

@Wojtas002424 możesz zrobić to sprytnie i wypisywać jedynie przejścia z pewną strefą nieczułości. Np jeżeli stan się zmienił i minęło 200ms to ustaw nowy i wyświetl wterminalu.

13 godzin temu, Wojtas002424 napisał:

Czy jest jakaś komenda która kasuje dane w monitorze?

Wątpię, bo Arduino nie steruje komputerem. Ale możesz wyłączyć autoscroll i podejrzeć co się działo.

Link do komentarza
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.