• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Podświetlenie szuflad, LED fade
#1
Witam.

Męczę się z prostym zadaniem w kwestii sketcha. Oświetlenie szuflad paskami LED. Kontaktron jako załącznik, chciałbym żeby ledy włączyły się płynnie oraz płynnie wyłączyły. Z kontaktronu przy otwartej szufladzie będzie oczywiście cały czas input low a przy zamkniętej input high. Proszę tylko o naprowadzenie na właściwy tor Smile
 
Odpowiedź
#2
musisz użyć pwm które będzie instrumentowali if kotarkron=0 {pwm=pwm+10 -lub w pętle for to wrzucasz
dodatkowa musi uzależnić to od flagi by się tylko 1 raz wykonało

}
if kotarkron=1 {pwm=pwm-10 -lub w petle for to wrzucasz

dodatkowa musi uzależnić to od flagi by się tylko 1 raz wykonało}
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
Dzięki,
obecnie jestem w pracy, w domu będę próbował. Właśnie nie mogę dojść do tego jak to zrobić, żeby się tylko raz wykonało.
Mam tak:
Kod:
if(digitalRead(0) == HIGH) //kontaktron
{
delay(1);
{
 for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 5) {
   analogWrite(13, fadeValue);
   delay(30);
 }

działa, tylko że w kółko się rozjaśnia.
 
Odpowiedź
#4
bool stan;
Kod:
if(kon==1){
if(stan==1){stan=0;}}
if kon(==0){
if(stan==1){stan=0;}}
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#5
Z tym boolean pewnie też by było dobrze ale w międzyczasie wymyśliłem inaczej:

Kod:
int fadeValue = 0;

void setup() {

pinMode(0, INPUT);

}

void loop() {

if(digitalRead(0) == LOW){
 while(fadeValue < 255){
   analogWrite(13, fadeValue);
   fadeValue = fadeValue + 5 ;
   delay(30);
 
 }
}

else

while(fadeValue >= 0){
   analogWrite(13, fadeValue);
   fadeValue = fadeValue - 5 ;
   delay(30);
}
}

Działa idealnie, zobaczymy czy tak zostanie w dalszych fazach całego projektu.
Dzięki.

Proszę używać "code"
 
Odpowiedź
#6
Jednak nie działa dobrze.

Jest tak:

Kod:
void loop() {

if(digitalRead(0) == LOW){
 while(fadeValue < 255){
   analogWrite(13, fadeValue);
   fadeValue = fadeValue + 5 ;
   delay(30);
 }

}

else

while(fadeValue > 0){
   analogWrite(13, fadeValue);
   fadeValue = fadeValue - 5 ;
   delay(30);
}
}

Na pinie 0 jest kontaktron, kiedy jest zamknięty (HIGH) dioda ma nie świecić.
I tak po starcie, dioda nie świeci. Kiedy otwieram kontaktron dioda się rozświetla. Kiedy zamykam, przygasa, jednak nie do końca. Na porcie szeregowym odczytuję
fadeValue = 0 - czyli nie powinna świecić
analogRead z diody wygląda mniej więcej tak: 0,0,0,0,0,0,0,0,1023,0,0,0,0,0,0,1023 itd.
Dlaczego?

Próbowałem zmieniać na ślepo

while(fadeValue > 0){

na

while(fadeValue >= 0){

Wtedy przygasa do końca, fadeValue jest -5 ale pojawia się jeszcze inny problem. Włączając diodę ta rozbłyska na ułamek sekundy pełnym światłem i dopiero potem rozjaśnia się od zera.

Proszę używać "code"
 
Odpowiedź
#7
Kod:
int fadeValue = 0;
const int button = 0;
const int led =  13;
int State = 0;  
void setup() {

pinMode(button, INPUT);
pinMode(button, OUTPUT);
digitalWrite(button, LOW);
}

void loop() {
State = digitalRead(button);
if(State == LOW){
while(fadeValue < 255){
analogWrite(led, fadeValue);
fadeValue = fadeValue + 5 ;
delay(30);
}

}

else

while(fadeValue > 0){
analogWrite(led, fadeValue);
fadeValue = fadeValue - 5 ;
delay(30);
}
}
Poprawiony by był przejrzysty to raz , dwa wyeliminowany hazard
i trzy w elsie wykonujesz do bólu mówiłem powiąż jedno z drugim bo nie potrzebnie miele ci ten procek bez przerwy.
Przeanalizuj kod jak procesor zauważysz to oczy mówię.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#8
Dzięki za poprawki oraz gotowca. Na jego podstawie postaram się zrozumieć o co chodzi z tym mieleniem.
Odpowiedziałbym wcześniej gdybym dostał powiadomienie o odpowiedzi.
Wgrałem Twój kod, niestety jeśli chodzi o efekt nic to nie zmieniło, dioda nie wygasa do końca..
Mimo, iż po fade out fadeValue jest 0 to na pinie 13 pojawia się słaba modulacja.
Dziś nie mam czasu ale w nocy albo jutro będę dalej kombinował. A wydawało się to takie proste..
 
Odpowiedź
#9
Kolego ale pin 13 nie jest pod pwm tylko po digital wiec ściemniała się nie będzie jak nie dasz rady to napisze ci kod bo jest banalny.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#10
Skorzystałem z pomocy na innym forum, wszyscy kombinowali, wgrywałem różne kody bez przesady chyba ze 100 razy. Problem był w tym, że z kodu:


Kod:
int ledPin = 13;
int fadeValue = 0;

void setup() {

pinMode(0, INPUT);

}

void loop() {

if(digitalRead(0) == LOW){
 delay(500);
 while(fadeValue < 255){
   analogWrite(13, fadeValue);
   fadeValue = fadeValue + 5 ;
   delay(30);
 
 }
}

else {

while(fadeValue > 0){
   analogWrite(13, fadeValue);
   fadeValue = fadeValue - 5 ;
   delay(30);
 }
 analogWrite(13, fadeValue);
}
}


Przy wygaszaniu, wartość fadeValue spadała do 0 (wiem z monitora portu szeregeowego) jednak dioda nie wygasała do końca. Po wgraniu kilkunastu różnych kombinacjach oraz powrocie do wersji początkowej (tej powyższej) wszystko zaczęło działać. 

Adix, pin 13 w Leonardo jest PWM, wszystko teraz działa.
Niestety dalej nie wiem, gdzie poprawiłeś hazard oraz o co chodzi z tym mieleniem procka w kółko.

Wydaje mi się, że Twoja wersja różni się tylko dodaniem zmiennej state, moim zdaniem zbędnej jeśli chodzi o funkcjonalnośc, może przydatnej w dalszej perspektywie przy rozbudowaniu kodu ale nie mającej wpływ na działanie skryptu.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości