Guten Tag zusammen,
von Weihnachten hab ich noch eine Lichterkette übrig, die soll jetzt als Nachtlicht im Bus dienen.
Die LIchterkette:
100 low Power Led's, alle warmweiß, parallel geschaltet wobei jede 2. revers angeschlossen ist.
Die Versorgungsspannung war per Batterien 2,75V 20mA bei 100 Hz AC !!
Die Betriebsspannung war rechteckförmig, also immer ein pin an + und der andere an - und das im Wechsel.
Jetzt wollte ich das mit einem Nano nachbilden, das ging gut in die Hose.
Mehr als ~50 Hz kommen nicht raus, obwohl ich die Impulslänge auf 10 ms gesetzt habe und der Nano sonst nichts zu tun hat.
Das ist nicht mein erstes Arduino-Projekt, aber in 15 Jahren das erste das an der Geschwindigkeit scheitert (50Hz sind für LED's zu langsam, die "flimmern", das gibt Augenkrebs).
Hat jemand von Euch eine Idee (und evtl. Vorgehensweise) wie ich da auf 100 Hz komme?
Vielen Dank für etwaige Hilfe
Rainer
```cpp
const int BUTTON = 12; // Taster gegen GND
const int LEDa = 10; // Ausgang "positive" Spannung
const int LEDb = 11; // Ausgang "negative" Spannung
// Taster entprellen
unsigned long TastMillis; // Variable für die Startzeit
unsigned long PrellMillis; // Entprellzeit
//Schaltfrequenz erzeugen
unsigned long StartMillis; // Variable für die Startzeit
unsigned long OnMillis; // Tastzeit
int ACein; // Variable für die Schaltfrequenz
int LEDstep; // Schrittkette LED steuern
int entstep; // Schrittkette entprellen
int Taster; // !Taster entprellt
void setup() {
// Serial.begin(9600);
// pinMode(LED, OUTPUT);
pinMode(LEDa, OUTPUT);
pinMode(LEDb, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
// pinMode(ACaus, OUTPUT);
entstep = 0; // Schrittkette löschen
LEDstep = 0;
StartMillis = 0;
OnMillis = 10; // Impulslänge der "Wechselspannung"
TastMillis = 0;
PrellMillis = 10;
// Serial.println("Gestartet");
}
void loop() {
Frequenz(); // "Wechselspannung" erzeugen
Entprellen();
LEDsteuern();
// Serial.println("Schrittkette " + String(entstep) + " Zeit " + String(TastMillis) + " Taster " + String(Taster) + " AC " + String(ACein) );
// digitalWrite(LED, Taster);
}
void LEDsteuern(){ //LED steuern
switch (LEDstep) {
case 0: //Init
digitalWrite(LEDa, LOW);
digitalWrite(LEDb, LOW);
if (Taster){
LEDstep = 10;
}
break;
case 10: // LED Ein
if (!Taster){
LEDstep = 20;
}
break;
case 20:
digitalWrite(LEDa, ACein);
digitalWrite(LEDb, !ACein);
if (Taster){
LEDstep = 30;
}
break;
case 30:
if (!Taster){
LEDstep = 0;
}
break;
}
}
void Entprellen(){
switch (entstep) {
case 0: //Start
if (digitalRead(BUTTON)){ //Button schaltet gegen ground
TastMillis = millis();
entstep = 10;
}
break;
case 10: // Taster losgelassen
if ((digitalRead(BUTTON)) && (millis() - TastMillis >= PrellMillis)){
Taster = LOW;
entstep = 20;
}
break;
case 20: // Taster frei
if (!digitalRead(BUTTON)){ //Button schaltet gegen ground
TastMillis = millis();
entstep = 30;
}
break;
case 30: // Taster gedrückt
if ((!digitalRead(BUTTON)) && (millis() - TastMillis >= PrellMillis)){
Taster = HIGH;
entstep = 40;
}
break;
case 40: // Taster losgelassen
if (digitalRead(BUTTON)){
Taster = LOW;
entstep = 00;
}
break;
}
}
void Frequenz(){ // "Wechselspannung" erzeugen
if (!ACein &&(millis() - StartMillis >= OnMillis)){
StartMillis = millis();
ACein = HIGH ;
}
else if (ACein &&(millis() - StartMillis >= OnMillis)){
StartMillis = millis();
ACein = LOW ;
}
// digitalWrite(ACaus, ACein);
}