Skocz do zawartości
Komentator

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 🙂

Udostępnij ten post


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 🙂

Udostępnij ten post


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 🙂

Udostępnij ten post


Link to post
Share on other sites

Bardzo dobrze że nie rozwiązujesz go za mnie !!! Podpowiedzi wystarczą 🙂

Udostępnij ten post


Link to post
Share on other sites

PatrykOSK, mam rozumieć, że już działa?

Udostępnij ten post


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.

Udostępnij ten post


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.

Udostępnij ten post


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ę. 😉

Udostępnij ten post


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 🙂

Udostępnij ten post


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, ?

Udostępnij ten post


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ę" 🙂

Udostępnij ten post


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 😃 .

Udostępnij ten post


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.

Udostępnij ten post


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ę 🙂

Udostępnij ten post


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!

Gość
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...