Skocz do zawartości

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 🙂

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 🙂

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 🙂

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.

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.

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

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 🙂

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

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

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

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.

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...