• 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
Sterownik oświetlenia schodów (tlc5940)
#1
Witam, 

Jestem nowy na tym forum i w związku z tym pozdrawiam wszystkich serdecznie! :Smile
Mój problem polega na tym ze nie potrafię dostosować kodu który znalazłem w internecie pod mój hardware.
Pierwszy raz próbuje coś pozmieniać w kodzie i wcale mi to nie wychodzi.
chciałbym uruchamiać diody czujnikiem ruchu a nie jak jest w tym kodzie przyciskami. 
Proszę o pomoc!
Kod:
#include <Tlc5940.h>
#include "ClickButton.h"
const int downButtonPin = 8;
const int upButtonPin = 6;
const int midButtonPin = 7;
int ledCount = 18; //liczba aktywnych wyjść (taśm led)
int brightness = 4095; //maksymalna jasność
int delayTime = 1;
int midStep = 13;
int outs[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}; //wyjścia do których podpinane są taśmy
int outState[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
// Nr. of buttons in the array
const int buttons = 3;
ClickButton button[3] = {
 ClickButton (downButtonPin, LOW, CLICKBTN_PULLUP),
 ClickButton (upButtonPin, LOW, CLICKBTN_PULLUP),
 ClickButton (midButtonPin, LOW, CLICKBTN_PULLUP),
};
int LEDfunction[buttons]  = { 0, 0, 0 };
const int DOWN_BUTTON = 0;
const int UP_BUTTON = 1;
const int MID_BUTTON = 2;
const int STAN_WYLACZONY = 0;
const int STAN_ROZJASNIANIE_OD_DOLU = 1;
const int STAN_SCIEMNIANIE_OD_DOLU = 2;
const int STAN_ROZJASNIANIE_OD_GORY = 3;
const int STAN_SCIEMNIANIE_OD_GORY = 4;
const int STAN_ROZJASNIANIE_OD_SRODKA = 5;
const int STAN_SCIEMNIANIE_OD_SRODKA = 6;
const int STAN_ROZJASNIANIE_CALOSCI = 7;
const int STAN_SCIEMNIANIE_CALOSCI = 8;
const int STAN_WLACZONY = 9;

const int SCIEMNIANIE_POJEDYNCZE_STEP = 5;
const int SCIEMNIANIE_CALOSCI_STEP = 10;
const int ROZJASNIANIE_POJEDYNCZE_STEP = 25;
const int ROZJASNIANIE_CALOSCI_STEP = 10;
int STAN = STAN_WYLACZONY;
void setup()
{

 Tlc.init();
 for (int i=0; i<buttons; i++)
 {
   // Setup button timers (all in milliseconds / ms)
   // (These are default if not set, but changeable for convenience)
   button[i].debounceTime   = 20;   // Debounce timer in ms
   button[i].multiclickTime = 250;  // Time limit for multi clicks
   button[i].longClickTime  = 800; // Time until long clicks register
 }    
  updateLed();

}


void loop()
{
 
for (int i=0; i<buttons; i++) {
   // Update state of all buitton
   button[i].Update();
 
   // Save click codes in LEDfunction, as clicks counts are reset at next Update()
   if (button[i].clicks != 0) LEDfunction[i] = button[i].clicks;
 
     // Simply toggle LED on single clicks
   // (Cant use LEDfunction like the others here,
   //  as it would toggle on and off all the time)
   if(button[i].clicks == 1) {
     wlaczPianino(i);
   }

   // slow blink (must hold down button. 1 second long blinks)
   if(LEDfunction[i] == -1) {
     ustawStanStaly(i);
     LEDfunction[i] = 0;
   }
 }  
 
 updateCircuitState();
 updateLed();
  delay(delayTime);  
}

void updateLed() {
  for (byte diode = 0; diode<ledCount;diode++) {
    Tlc.set(outs[diode], brightness-outState[diode]);
   }
   Tlc.update();
}

void updateCircuitState() {
 if (STAN == STAN_ROZJASNIANIE_OD_DOLU) {
   rozjasnianieOdDolu();
 }
 if (STAN == STAN_SCIEMNIANIE_OD_DOLU) {
   sciemnianieOdDolu();
 }

 if (STAN == STAN_ROZJASNIANIE_OD_GORY) {
   rozjasnianieOdGory();
 }
 if (STAN == STAN_SCIEMNIANIE_OD_GORY) {
   sciemnianieOdGory();
 }
 if (STAN == STAN_ROZJASNIANIE_CALOSCI) {
   rozjasnianieCalosci();
 }
 if (STAN == STAN_SCIEMNIANIE_CALOSCI) {
   sciemnianieCalosci();
 }

 if (STAN == STAN_ROZJASNIANIE_OD_SRODKA) {
   rozjasnianieOdSrodka();
 }
 if (STAN == STAN_SCIEMNIANIE_OD_SRODKA) {
   sciemnianieOdSrodka();
 }

}

void rozjasnianieOdSrodka() {
 bool changed = false;

 for (int diode = midStep; diode<ledCount;diode++) {  
   if (outState[diode] < brightness) {
     int newState = outState[diode];
     newState = newState + ROZJASNIANIE_POJEDYNCZE_STEP;
     if (newState > brightness) {
       newState = brightness;
     }
     outState[diode] = newState;
     changed = true;
     break;
   }
 }
 for (int diode = midStep-1; diode>=0;diode--) {  
   if (outState[diode] < brightness) {
     int newState = outState[diode];
     newState = newState + ROZJASNIANIE_POJEDYNCZE_STEP;
     if (newState > brightness) {
       newState = brightness;
     }
     outState[diode] = newState;
     changed = true;
     break;
   }
   
 }
     if (!changed) {
     STAN = STAN_SCIEMNIANIE_OD_SRODKA;
   }    

}

void sciemnianieOdSrodka() {
bool changed = false;

 for (int diode = midStep; diode<ledCount;diode++) {  
   if (outState[diode] > 0) {
     int newState = outState[diode];
     newState = newState - SCIEMNIANIE_POJEDYNCZE_STEP;
     if (newState < 0 ) {
       newState = 0;
     }
     outState[diode] = newState;
     changed = true;
     break;
   }
 }
 for (int diode = midStep-1; diode>=0;diode--) {  
   if (outState[diode] > 0) {
     int newState = outState[diode];
     newState = newState - SCIEMNIANIE_POJEDYNCZE_STEP;
     if (newState < 0) {
       newState = 0;
     }
     outState[diode] = newState;
     changed = true;
     break;
   }
   
   
 }
  if (!changed) {
     STAN = STAN_WYLACZONY;
   }  
}

void rozjasnianieCalosci() {
 bool changed = false;
 for (int diode = 0; diode<ledCount;diode++) {  
   if (outState[diode] < brightness) {
     int newState = outState[diode];
     newState = newState + ROZJASNIANIE_CALOSCI_STEP;
     if (newState > brightness) {
       newState = brightness;
     }
     outState[diode] = newState;
     changed = true;
   }
   
   
 }
  if (!changed) {
     STAN = STAN_WLACZONY;
   }  
}

void sciemnianieCalosci() {
 bool changed = false;
 for (int diode = 0; diode<ledCount;diode++) {  
   if (outState[diode] > 0) {
     int newState = outState[diode];
     newState = newState - SCIEMNIANIE_CALOSCI_STEP;
     if (newState < 0) {
       newState = 0;
     }
     outState[diode] = newState;
     changed = true;

   }
   
 
 }
  if (!changed) {
     STAN = STAN_WYLACZONY;
   }    
}

void rozjasnianieOdDolu() {
 bool changed = false;
 for (int diode = 0; diode<ledCount;diode++) {  
   if (outState[diode] < brightness) {
     int newState = outState[diode];
     newState = newState + ROZJASNIANIE_POJEDYNCZE_STEP;
     if (newState > brightness) {
       newState = brightness;
     
     }
     outState[diode] = newState;
     changed = true;
     break;
   }    
 }
   if (!changed) {
     STAN = STAN_SCIEMNIANIE_OD_DOLU;
   }    

}

void sciemnianieOdDolu() {
 bool changed = false;
 for (int diode = 0; diode<ledCount;diode++) {  
   if (outState[diode] > 0) {
     int newState = outState[diode];
     newState = newState - SCIEMNIANIE_POJEDYNCZE_STEP;
     if (newState < 0) {
       newState = 0;
     }
     outState[diode] = newState;
     changed = true;
     break;
   }
   
  }
   if (!changed) {
     STAN = STAN_WYLACZONY;
   }    

}

void rozjasnianieOdGory() {
 bool changed = false;
 for (int diode = ledCount-1; diode>=0;diode--) {  
   if (outState[diode] < brightness) {
     int newState = outState[diode];
     newState = newState + ROZJASNIANIE_POJEDYNCZE_STEP;
     if (newState > brightness) {
       newState = brightness;
     }
     outState[diode] = newState;
     changed = true;
     break;
   }
   
       
 }
 if (!changed) {
     STAN = STAN_SCIEMNIANIE_OD_GORY;
   }
}

void sciemnianieOdGory() {
 bool changed = false;
 for (int diode = ledCount-1; diode>=0;diode--) {  
   if (outState[diode] > 0) {
     int newState = outState[diode];
     newState = newState - SCIEMNIANIE_POJEDYNCZE_STEP;
     if (newState < 0) {
       newState = 0;
     }
     outState[diode] = newState;
     changed = true;
     break;
   }
   
 }
    if (!changed) {
     STAN = STAN_WYLACZONY;
   }    

}

void wlaczPianino(int button) {
 /*
 jesli swiatla byly wlaczone, tylko plynnie wylaczamy
 */
 if (STAN == STAN_WLACZONY) {
     if (button == DOWN_BUTTON) {
       STAN = STAN_SCIEMNIANIE_OD_DOLU;
     }
     if (button == UP_BUTTON) {
       STAN = STAN_SCIEMNIANIE_OD_GORY;
     }
     if (button == MID_BUTTON) {
       STAN = STAN_SCIEMNIANIE_OD_SRODKA;
     }
 }
 
 /*
 jesli swiatla byly wylaczone, wtedy plynnie wlaczamy
 */
   if (STAN == STAN_WYLACZONY) {
     if (button == DOWN_BUTTON) {
       STAN = STAN_ROZJASNIANIE_OD_DOLU;
     }
     if (button == UP_BUTTON) {
       STAN = STAN_ROZJASNIANIE_OD_GORY;
     }
     if (button == MID_BUTTON) {
       STAN = STAN_ROZJASNIANIE_OD_SRODKA;
     }
 }

}

void ustawStanStaly(int button) {
   Serial.print("ustawStanStaly ");
 Serial.print(button);
 Serial.print(" ");
 Serial.println(STAN);
 if (
     STAN == STAN_WLACZONY ||
     STAN == STAN_SCIEMNIANIE_OD_DOLU ||      
     STAN == STAN_SCIEMNIANIE_OD_GORY ||            
     STAN == STAN_SCIEMNIANIE_OD_SRODKA            
     ) {
   STAN = STAN_SCIEMNIANIE_CALOSCI;
 }
 
 if (
     STAN == STAN_WYLACZONY ||
     STAN == STAN_ROZJASNIANIE_OD_DOLU ||      
     STAN == STAN_ROZJASNIANIE_OD_GORY ||            
     STAN == STAN_ROZJASNIANIE_OD_SRODKA            
    ) {
   STAN = STAN_ROZJASNIANIE_CALOSCI;
 }
}
 
Odpowiedź
#2
kolego czujnik ruchu możesz ustwić żeby się włączał na określony czas po wykryciu więc myślę że obejdzie się bez scalaka. Smile daj jeszcze rodzaj czujnika ruchu i model
Smile
 
Odpowiedź
#3
(15-05-2016, 11:56)Lata napisał(a): kolego czujnik ruchu możesz ustwić żeby się włączał na określony czas po wykryciu więc myślę że obejdzie się bez scalaka. Smile daj jeszcze rodzaj czujnika ruchu i model
Smile

bez scalaka się nie obejdzie bo chce żeby schody zapalały się jeden po drugim i dodatkowo rozświetlały się powoli a do tego potrzebne są wyjścia pwm.


PIR HC-SR501
 
Odpowiedź
#4
Ech chłopaki wystarczy ten pir i ze 2x lm3914 kilka oporniczków i tranzystory jak to są paski led ale jak chcecie się bawić temat poruszany był tutaj .

http://forum.arduinopolska.com/watek-o%C...hod%C3%B3w
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#5
ten temat to do kosza moim zdaniem to powielanie tych samych watków
(15-05-2016, 13:20)chemix napisał(a): bez scalaka się nie obejdzie

PIR HC-SR501
nieprawda można to zrobić na bramkach na kilkunastu przekaźnikach i układzie rc i kilku innych rozwiązaniach.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości