/*************************************************** * Arduino Uno, Board PCA9685, 4 LEDs, Verdrahtungsmaterial und Steckboard das Programm soll mal für 5 PCA9685 mit je 16 LEDs funktionieren, deswegen habe ich es schon dafür vorbereitet. ****************************************************/
#define AnzMod 5 //Wie viele I2C Module (PCA9685)bool soll[AnzMod][16] = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};bool soll_alt[AnzMod][16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};long zeit[AnzMod][16];uint16_t helligkeit[AnzMod][16];
#include <Wire.h>#include <Adafruit_PWMServoDriver.h>
// called this way, it uses the default address 0x40Adafruit_PWMServoDriver pwm0 = Adafruit_PWMServoDriver();
void setup() { Serial.begin(115200); Serial.println("Signalsteuerung!");
pwm0.begin(); pwm0.setPWMFreq(1400); // Set to whatever you like, we don't use it in this demo!
Wire.setClock(400000);}
void loop() {
for(int i = 0; i<AnzMod; i++){ for(int j = 0; j<16;j++) { Lichtsteuerung(i,j); }}
test();}
int State;long zeit_test = 0;void test(){ if(millis() - zeit_test > 3000) { zeit_test = millis(); switch(State) { case 0: soll[0][0] = 1;soll[0][1] = 0;soll[0][2] = 0;soll[0][3] = 0;State = 1;break; case 1: soll[0][0] = 0;soll[0][1] = 1;soll[0][2] = 0;soll[0][3] = 0;State = 2;break; case 2: soll[0][0] = 1;soll[0][1] = 0;soll[0][2] = 1;soll[0][3] = 0;State = 3;break; case 3: soll[0][0] = 0;soll[0][1] = 1;soll[0][2] = 0;soll[0][3] = 1;State = 0;break; } }}
void Lichtsteuerung(int dev,int nr){ if(soll[dev][nr] != soll_alt[dev][nr]) { zeit[dev][nr] = millis(); soll_alt[dev][nr] = soll[dev][nr]; } if(soll[dev][nr] == 0) { if(helligkeit[dev][nr] > 15) { helligkeit[dev][nr]-=16; } else { helligkeit[dev][nr] = 0; } } else if(soll[dev][nr] == 1 && millis()- zeit[dev][nr] > 1000) { if(helligkeit[dev][nr] < 4080) { helligkeit[dev][nr]+=16; } else { helligkeit[dev][nr] = 4095; } } if(dev == 0) { pwm0.setPWM(nr, 0, helligkeit[dev][nr]); }
}