Skocz do zawartości

Kurs Arduino - #4 - Przetwornik ADC


Pomocna odpowiedź

A sprawdzałeś, czy "digitalRead (8)" się zmienia? Tak jak pisałem, sprawdzasz stan wyjścia, nie jestem przekonany, czy to ma szanse działać w Arduino. Zweryfikuj to samodzielnie, to będzie łatwiej działać dalej 🙂

Link to post
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; 
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  
    Serial.println(napiecie);
 } else {
    digitalWrite(8, LOW);//Wyłączenie diody  

 }
 while(odczytanaWartosc < napiecie);
 delay(1000);

 ;
} 

Zmieniłem poprzedni kod na taki,jednak nie działa on poprawnie Teraz znowu gdy zasłonie ręką fotorezystor info jest przesyłana jest kilka razy.Nie wiem jak wymusić wysłanie info raz.No i zmieniłem warunek pętli while 🙂

Link to post
Share on other sites

PatrykOSK, nie chce rozwiązywać problemu za Ciebie. Jest już blisko. Zerknij na średniki. Podpowiem, że trzeba dwa usunąć i dodać parę nawiasów klamrowych w jednym miejscu 🙂

Link to post
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; 
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  
    Serial.println(napiecie);
 } else { 
    digitalWrite(8, LOW);//Wyłączenie diody  
 }     

 while(odczytanaWartosc < napiecie) 
 delay(1000) ;


}

Niestety nie. Usunięte dwa średniki przy While (wydaje mi się że o te chodziło) ,a z nawiasami kombinuje na różne sposoby i nie wychodzi.

Link to post
Share on other sites

PatrykOSK, wróć do części drugiej przeczytaj materiał o pętli while, zobacz jak jest ona zbudowana. Zmniejsz też opóźnienie, np.: do 20 ms.

Link to post
Share on other sites

Treker, o ile się nie mylę, Arduino IDE korzysta wewnętrznie z kompilatora z zestawu GCC... Więc do kodu stosują się zasady, określone w standardzie. Zgodnie ze standardem, pętla while nie musi mieć klamerek, jeśli jej ciało ma obejmować tylko jedną instrukcję. 😉

Link to post
Share on other sites

draghan, ćiiii, nie chciałem uczyć takich zachowań, bo później są takie kwiatki jak wcześniej (ze średnikiem po while). Dwa nawiasy nikomu nie szkodzą, a czytelność i bezpieczeństwo większe 🙂

Link to post
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
   wyslano=wyslano+1;
   Serial.println(napiecie);
 } else { 
    digitalWrite(8, LOW);//Wyłączenie diody  
 }
    while(wyslano==1){
     delay(50);
     wyslano=!wyslano;
   } 
   } 

Dobra zmieniłem troch swój kod dodając kolejną zmienną poprawiłem też nawiasy w while,program znów nie do końca działa ale przynajmniej zrozumiałem do końca co robi pętla while 🙂 Co teraz o tym sądzisz Treker, ?

Link to post
Share on other sites

PatrykOSK, dobry pomysł ze zmienną pomocniczą "wysłano". Powiedz tylko, co miałeś na myśli z tą pętlą while. Jak dokładnie miała ona działać, razem z tymi rzeczami w środku. Wytłumacz, co chciałeś uzyskać, a ja to "wyprostuję" 🙂

Link to post
Share on other sites

To będziesz musiał się wcielić w umysł laika a nie wiem czy na Twoim poziomie to już możliwe ha ha ha. No ale spróbujemy. Chciałem uzależnić od tej zmiennej pętle while miało to działać tak że jak wysłano==1 program miał iść do pętli while i w nim zostać do czasu kiedy wysłana znowu nie będzie równa 0.Brakuje mi tylko czegoś w tej pętli aby ona sobie tak po prostu nie negowała "wyslano" znowu od czegoś musiałbym to uzależnić.Jest to dość proste przynajmniej mi się tak wydaje więc uda Ci się to zrozumieć 🙂 Przy najmniej taką mam nadzieje 😃 .

Link to post
Share on other sites

PatrykOSK, ok, a co dokładnie miała robić ta negacja? To znaczy, po co ją tam umieściłeś? W takiej formie każdy obieg pętli neguje zawartość, więc pętla jest natychmiast opuszczana. Jeśli wejdziemy do niej z wysłano = 1, to natychmiast robi się tam 0 (przez negację) i opuszczamy pętle.

Link to post
Share on other sites

No właśnie to miało być zakończenie tej pętli przed tą negacją miałem dodać jakiś warunek (o ile można coś takiego wg zrobić) który jak zostanie spełniony przejdzie dalej do tej negacji.Nie wiem czy pętla while w kolejnej pętli będzie dobrym rozwiązaniem.I pytanie czy w ogóle dobrze myślę 🙂

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

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.