Treker (Damian Szymański) Styczeń 4, 2016 Udostępnij Styczeń 4, 2016 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
PatrykOSK Styczeń 4, 2016 Udostępnij Styczeń 4, 2016 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
Treker (Damian Szymański) Styczeń 4, 2016 Udostępnij Styczeń 4, 2016 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
PatrykOSK Styczeń 4, 2016 Udostępnij Styczeń 4, 2016 Bardzo dobrze że nie rozwiązujesz go za mnie !!! Podpowiedzi wystarczą
Treker (Damian Szymański) Styczeń 4, 2016 Udostępnij Styczeń 4, 2016 PatrykOSK, mam rozumieć, że już działa?
PatrykOSK Styczeń 5, 2016 Udostępnij Styczeń 5, 2016 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.
Treker (Damian Szymański) Styczeń 5, 2016 Udostępnij Styczeń 5, 2016 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.
draghan Styczeń 5, 2016 Udostępnij Styczeń 5, 2016 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ę.
Treker (Damian Szymański) Styczeń 5, 2016 Udostępnij Styczeń 5, 2016 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
PatrykOSK Styczeń 5, 2016 Udostępnij Styczeń 5, 2016 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, ?
Treker (Damian Szymański) Styczeń 5, 2016 Udostępnij Styczeń 5, 2016 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ę"
PatrykOSK Styczeń 6, 2016 Udostępnij Styczeń 6, 2016 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 .
Treker (Damian Szymański) Styczeń 6, 2016 Udostępnij Styczeń 6, 2016 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.
PatrykOSK Styczeń 6, 2016 Udostępnij Styczeń 6, 2016 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ę
Pomocna odpowiedź
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ę »