Skocz do zawartości

Kurs Arduino - #4 - Przetwornik ADC


Pomocna odpowiedź

PatrykOSK, wróćmy do mojego działającego przykładu, z części 3 tego kursu. Przeanalizuj, co i gdzie jest ustawiane oraz jaki jest warunek pętli:

void loop() {

 if (digitalRead(czujnikOkna) == LOW) { //Jeśli przycisk jest wciśnięty
   digitalWrite(diodaZielona, HIGH); //Włączenie diody zielonej
   digitalWrite(diodaCzerwona, LOW); //Wyłączenie diody czerwonej
 } else { //Jeśli przycisk nie jest wciśnięty
   digitalWrite(diodaZielona, LOW); //Wyłączenie diody zielonej
   digitalWrite(diodaCzerwona, HIGH); //Włączenie diody czerwonej
   Serial.println("Uwaga! Alarm! Okno nie jest zamkniete!");

   while (digitalRead(czujnikOkna) == HIGH) {
     //Zatrzymuyjemy się w pustej pętli do ponownego zamknięcia okna
     delay(25); //W pętli wprowadzamy małe opóźnienie 25ms, aby niwelować zakłócenia
   }

 }
}

Spróbuj dostosować go do swoich potrzeb. Inaczej zabrniemy już chyba zbyt daleko od celu 😉

Link do komentarza
Share on other sites

Ehhh... już powoli chyba zaczynam się w tym gubić :/ Z Twojego przykładu jasno wszystko wynika i bez problemu go rozumiem ale nie wiem czego bym mógł użyć u siebie jako warunku w pętli while.

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

Może to Cie nakieruje, pisane w pseudokodzie (jedna z metod):

  if (odczytanaWartosc < prog) {
    Włącz diodę;

	 (Czy wysłano == 0 ?) {
		wyślij komunikat;
		wysłano = 1;	
	 }

 } else { 
    wyłacz diodę;   
	 wysłano = 0;
 } 
  • Lubię! 1
Link do komentarza
Share on other sites

int odczytanaWartosc = 0; //Zmienna do przechowywania odczytu ADC 
int prog = 0; //Próg włączenia światła - ustawiany potencjometrem 
float napiecie = 0; 
int wyslano = 0; 
void setup() { 
 pinMode(8, OUTPUT); //Konfiguracja wyjść pod diodę LED 
 Serial.begin(9600); 
} 

void loop() { 
 odczytanaWartosc = analogRead(A5);//Odczytanie wartości z ADC 
 prog = analogRead(A4);//Odczytanie wartości z ADC  
 napiecie = odczytanaWartosc * (5.0/1023.0); //Przeliczenie wartości na napięcie 

 if (odczytanaWartosc < prog) { //Czy jest ciemniej od ustawionego progu? 
    digitalWrite(8, HIGH);//Włączenie diody 
     if (wyslano == 0)
   Serial.println(napiecie); 
   wyslano=1;
 } else { 
    digitalWrite(8, LOW);//Wyłączenie diody 
    wyslano=0; 
 } 


   } 

Treker, W końcu się udało... już myślałem że nie podołam 🙂 Nie wiem dlaczego uparłem się n pętle while skoro można to było rozwazać poprostu dodatkowym if'em..

Mógłbyś mi jeszcze wytłumaczyć (ew. podać link) czym różni się "=" od "==" ?.

Biore się za kolejne zad.dom. może nie pójdzie tak topornie 😃

Link do komentarza
Share on other sites

PatrykOSK, cieszę się, że teraz działa. Jeśli chodzi o znaki równości, to sprawdź artykuł wskazany przez Mechano. Moja uwaga, co do kodu jest jeszcze taka, abyś dodał nawiasy klamrowe przy tym nowym if'ie. Nie są one niezbędne, ale dopiszesz coś później, zapomnisz o ich dodaniu i będą niepotrzebne problemy. Z nawiasami jest lepsza czytelność kodu 🙂

Link do komentarza
Share on other sites

Właściwie to nie wiem skąd się to bierze juz, na pocztaku wyskakiwalo powyzej 50 linijek kodu, a teraz dalo rade, czasami wyskakuje jeszcze przy funkcji delay, jak jej nie ma jest ok, wpisze cos i pada.

[ Dodano: 24-01-2016, 21:04 ]

#define przycisk 8
#define czerwona 9
#define zolta 10
#define zielona 11

int odczyt = 0;
String podanaliczba = "";
int podanaliczba_int = 0;
int proby = 3;
int nowakolejka = 0;


void setup() {
 Serial.begin(9600);
 pinMode(przycisk, INPUT_PULLUP);
 pinMode(czerwona, OUTPUT);
 pinMode(zolta, OUTPUT);
 pinMode(zielona, OUTPUT);

 digitalWrite(czerwona, LOW);
 digitalWrite(zolta, LOW);
 digitalWrite(zielona, LOW);

}

void loop() {
 if(nowakolejka == 0){
   Serial.println("Witaj w mojej grze");
   Serial.println("zgadnij jaka jest wartosc odczytana przez procesor");
   Serial.println("masz 3 proby, granica bledu +-200\n powdodzenia");
   Serial.println("Przekrec potencjometr i wcsinij przycisk");
  ++nowakolejka;}


 else{
    if(digitalRead(przycisk) == LOW){
   Serial.println("Zaczynamy!");  
   Serial.println("podaj liczbe od 1 do 1021:");
   while (digitalRead(przycisk) == LOW){delay(25);}
 }
      if(Serial.available()>0){
        odczyt = analogRead(A5);
        podanaliczba = Serial.readStringUntil('\n'); 
        podanaliczba_int=podanaliczba.toInt(); 
        Serial.println("twoja liczba TO:");
        Serial.println(podanaliczba_int);

        if(odczyt-200<=podanaliczba_int && odczyt+200>=podanaliczba_int){
          digitalWrite(zielona, HIGH);
          digitalWrite(zolta, LOW);
          digitalWrite(czerwona, LOW);
          Serial.println("Brawo wygraleś");
          Serial.println("Wcisnij przycisk RESET, aby zaczac od nowa");
          }
        else{

          proby--;

          digitalWrite(czerwona, LOW);
          digitalWrite(zolta, HIGH);
          digitalWrite(zielona, LOW);

         Serial.println("Nie udalo sie"); 
         Serial.println("pozostaly: "); Serial.println(proby);Serial.println("proby");
           }
           if(proby==0){
           digitalWrite(czerwona, HIGH);
           digitalWrite(zielona, LOW);
           digitalWrite(zolta, LOW);
           Serial.println("Przegrales! Sprobj jeszcze raz!");
           Serial.println("nacisnij RESET");
      }
      }    
}
}

A tak przy okazji, jest ok?

W gre grał moj tata, wiec zrobilem +-200 pkt 😃

Link do komentarza
Share on other sites

qbeczek, to, że program działa, to częściowy sukces. Pamiętaj o poprawnym formatowaniu kodu oraz komentarzach. W kilku miejscach dość dziwnie umieściłeś nawiasy np. tu:

 ++nowakolejka;} 


 else{ 
    if(digitalRead(przycisk) == LOW){ 

Zapis ten jest mylący, zrób to ładnie, tak jak było w artykułach 🙂

Link do komentarza
Share on other sites

Mówią, że ile programistów tyle róznych kodów, wiem wszyscy mi mowia, że moje kody są nieczytelne, ale dla mnie są, tak się przyzwyczaiłem 😃

edit

rezcywiscie w niektorcyh miejscach juz sam sie nie lapie

Link do komentarza
Share on other sites

qbeczek, może i tak. Ale nie widziałem jeszcze kogokolwiek używającego zamykających nawiasów po średniku.

Poza tym wcięcia tutaj:

  else{
    if(digitalRead(przycisk) == LOW){
   Serial.println("Zaczynamy!"); 
   Serial.println("podaj liczbe od 1 do 1021:");
   while (digitalRead(przycisk) == LOW){delay(25);}
 }

Masz chyba losowo.

To formatowanie to jakaś katastrofa, tego się nie da czytać.

Link do komentarza
Share on other sites

Cześć!

Potrzebuje pomocy do zadania 4.6, otóż nie wiem czy idę w dobrym kierunku... Z góry dzięki za odpowiedź!

int FotorezLewy = 0;
int FotorezPrawy = 0;
float NapiecieLewy = 0;
float NapieciePrawy = 0;

void setup() {
 Serial.begin(9600);

 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);

 digitalWrite(8, LOW);
 digitalWrite(9, LOW);
 digitalWrite(10, LOW);
 digitalWrite(11, LOW);
 digitalWrite(12, LOW);


}

void loop() {

 FotorezLewy = analogRead(A4);
 FotorezPrawy = analogRead(A5);

 FotorezLewy = map(FotorezLewy, 0, 1023, 1, 3);
 FotorezPrawy = map(FotorezPrawy, 0, 1023, 1, 3);

 Serial.println(FotorezLewy);
 Serial.println(FotorezPrawy);

 if (NapiecieLewy == 2) {
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  digitalWrite(12, LOW);
} else if (NapiecieLewy == 3) {
   digitalWrite(8, LOW);
   digitalWrite(9, LOW);
   digitalWrite(10, LOW);
   digitalWrite(11, LOW);
   digitalWrite(12, HIGH);
 } else if (NapieciePrawy == 2) {
   digitalWrite(8, LOW);
   digitalWrite(9, HIGH);
   digitalWrite(10, LOW);
   digitalWrite(11, LOW);
   digitalWrite(12, LOW);
 } else if (NapieciePrawy == 3) {
   digitalWrite(8, HIGH);
   digitalWrite(9, LOW);
   digitalWrite(10, LOW);
   digitalWrite(11, LOW);
   digitalWrite(12, LOW);
 } else {
   digitalWrite(8, LOW);
   digitalWrite(9, LOW);
   digitalWrite(10, HIGH);
   digitalWrite(11, LOW);
   digitalWrite(12, LOW);
 }
 delay(500);
}
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.