Stap 8: Hardwarebestanden
- Schematische en lay-out voor LED plaat in EagleCAD-indeling
De LEDs zijn gebruikt oorspronkelijk CREE Xlamp 7090 maar geen 1 +-Watt LEDs werk OK. De tegenrekening weerstanden zijn ongeveer 1 ohm, maar kunnen worden aangepast. 2 sets van 6 LEDs voor volledige tri-color (veelzijdiger) gebruiken. Of 3 sets van 6 LEDs voor groen/blauw alleen (effectiever)
De arduino (of compatibele) is aangesloten op de LEDs via logic-niveau N-kanaal FETs. Het diagram toont 2 groepen van 3 kleuren maar gemakkelijk voor 2 kleuren kan worden gewijzigd. Als rode LEDs worden gebruikt, moeten een 0.5 ohm, 5W led in serie met de draad aan de LED plaat worden geplaatst.
Code:
Bedazzler! Een goede meerdere LED PWM project, door Limor Fried
Public domain 2009
#include < util/delay.h >
int waarde;
int redpin1 = 5, redpin2 = 6;
int greenpin1 = 3, greenpin2 = 11;
int bluepin1 = 9, bluepin2 = 10;
int ledmax;
#define GLITTER 0
#define SWIRL 1
#define DAZZLE 2
vluchtige int modus = DAZZLE;
We gebruiken een knop op pin 2 (interrupt pin) om modus wijzigingen te herkennen
VOID modechange(void)
{
het debounce
Als (digitalRead(2) == LOW) {}
_delay_ms(10);
Als (digitalRead(2)! = laag)
terugkeer;
Serial.println("button");
modus ++;
Als (modus > 2)
modus = 0;
Serial.Print ("nieuwe modus!");
Serial.println (mode, DEC);
}
}
VOID Setup
{
pinMode (2, ingang);
digitalWrite (2, HIGH); pullup op mode-knop
attachInterrupt (0, modechange, verandering);
Serial.begin(9600);
randomSeed(analogRead(0));
niets voor setup
analogWrite (redpin1, 0);
analogWrite (redpin2, 0);
analogWrite (greenpin1, 0);
analogWrite (greenpin2, 0);
analogWrite (bluepin1, 0);
analogWrite (bluepin2, 0);
ledmax = 250; Deze waarde om de maximale helderheid wijzigen
}
void loop
{
switch(mode) {}
Case SWIRL:
Serial.println("swirl");
ckswirl (ledmax, 10);
breken;
Case GLITTER:
Serial.println("glimmer");
glimmertest (ledmax, ledmax/10, 30);
breken;
Case DAZZLE:
Serial.println("Dazzle");
betoveren (ledmax, 7, 10, 11);
breken;
}
}
void (int ledmax, int pulselensec, int freqmin, int freqmax) betoveren {}
lange peulvruchten;
analogWrite (redpin1, 0);
analogWrite (redpin2, 0);
analogWrite (greenpin1, 0);
analogWrite (greenpin2, 0);
analogWrite (bluepin1, 0);
analogWrite (bluepin2, 0);
Opmerking dat wij rode LEDs niet gebruiken in dit
int freq = willekeurige (freqmin, freqmax + 1);
int pulsedelay = 1000/freq;
pulsedelay / = 2;
pulsen = pulselensec;
pulsen * = 1000;
pulsen / = 2 * pulsedelay;
/*
Serial.Print ("pulserende op");
Serial.Print (freq, DEC);
Serial.Print ("Hz (");
Serial.Print (pulsedelay, DEC);
Serial.println ("ms on/off)");
Serial.Print(Pulses);
Serial.println ("pulsen");
*/
terwijl (pulsen--) {}
analogWrite (greenpin1, ledmax);
analogWrite (greenpin2, ledmax);
analogWrite (bluepin1, ledmax);
analogWrite (bluepin2, ledmax);
_delay_ms(pulsedelay);
analogWrite (greenpin1, 0);
analogWrite (greenpin2, 0);
analogWrite (bluepin1, 0);
analogWrite (bluepin2, 0);
_delay_ms(pulsedelay);
Als (modus! = DAZZLE) keren;
}
}
VOID ckswirl (int ledmax, uint8_t z) {}
int r, g, b;
verkleuren van rood naar oranje naar geel tot groen
voor (g = 0; g / / rood omlaag
analogWrite (redpin1, ledmax-g);
analogWrite (redpin2, ledmax-g);
analogWrite (greenpin1, g); Hiermee stelt u de waarde (bereik van 0 tot 255)
analogWrite (greenpin2, g); Hiermee stelt u de waarde (bereik van 0 tot 255)
delay(z);
Als (modus! = SWIRL) keren;
}
verkleuren van groen naar blauw
voor (b = 0; b / / rood omlaag
analogWrite (bluepin1, b);
analogWrite (bluepin2, b);
analogWrite (greenpin1, ledmax-b); Hiermee stelt u de waarde (bereik van 0 tot 255)
analogWrite (greenpin2, ledmax-b); Hiermee stelt u de waarde (bereik van 0 tot 255)
delay(z);
Als (modus! = SWIRL) keren;
}
van blauw naar rood
voor (r = 0; r / / rood omlaag
analogWrite (redpin1, r);
analogWrite (redpin2, r);
analogWrite (bluepin1, ledmax-r); Hiermee stelt u de waarde (bereik van 0 tot 255)
analogWrite (bluepin2, ledmax-r); Hiermee stelt u de waarde (bereik van 0 tot 255)
delay(z);
Als (modus! = SWIRL) keren;
}
}
VOID glimmertest (int maxwaarde, int incr, int z) {}
voor (waarde = 0; waarde < = maxwaarde; waarde += incr)
{
analogWrite (greenpin1, waarde); Hiermee stelt u de waarde (bereik van 0 tot 255)
analogWrite (greenpin2, maxwaarde-waarde); Hiermee stelt u de waarde (bereik van 0 tot 255)
analogWrite (bluepin1, waarde);
analogWrite (bluepin2, maxwaarde-waarde); Hiermee stelt u de waarde (bereik van 0 tot 255)
analogWrite (redpin1, waarde);
analogWrite (redpin2, maxwaarde-waarde); Hiermee stelt u de waarde (bereik van 0 tot 255)
delay(z); wacht 30 milli-seconden om te zien het dimmen effect
Als (modus! = GLITTER) keren;
}
voor (waarde = maxwaarde; waarde > = 0; waarde-= incr) / / uitfaden (van max naar de min)
{
analogWrite (greenpin1, waarde);
analogWrite (greenpin2, maxwaarde-waarde); Hiermee stelt u de waarde (bereik van 0 tot 255)
analogWrite (bluepin1, waarde);
analogWrite (bluepin2, maxwaarde-waarde); Hiermee stelt u de waarde (bereik van 0 tot 255)
analogWrite (redpin1, waarde);
analogWrite (redpin2, maxwaarde-waarde); Hiermee stelt u de waarde (bereik van 0 tot 255)
delay(z);
Als (modus! = GLITTER) keren;
}
}