Liten bärbar LED kit - 12 PWM lysdioder från en reprogramable ATtiny85 (7 / 8 steg)

Steg 7: kod



jag har bifogat den Arduino "pde" källkod fil nedan i formuläret passar på ATtiny85.

Om du vill använda det på en 16 MHz Arduino sedan helt enkelt ändra den "Loop" konstanten högst upp till 128 i stället för 8. Denna konstant gör helt enkelt koden upprepa allt ett visst antal gånger. Vi kör vår ATtiny på 8 MHz men jag tror inre klocka delaren måste ställas in som standard eftersom det beter sig som om den körs på 1MHz.

För att få lämplig hastighet, multiplicera denna Loop konstant upp med hastigheten på din klocka (t.ex. göra det 64 för en "328 kör på 8MHz intern oscillator) etc. Se till att det är alltid en mångfaldig 8 eller koden sannolikt kommer att ha problem.

Den bifogade uppförandekoden är ganska enkel och har endast 4 lägen:

1 - udda & även omväxlande
2 - scanner medurs
3 - scanner moturs
4 - "Larsen" typ alternerande scanner.

Du kan enkelt lägga till många fler lägen och här kärna koden tar bara runt 1.6K, så att du har en annan 6K + att spela med.

Samma kod bör sammanställa mycket väl för en Arduino utan ändringsförslag. På en Arduino, PB0 till PB4 är digital "pins" 8 till 12 respektive. Det är 14-18 stift på den faktiska ATmega328 eller "168 chip. Detta är ganska användbart för testning eller om du kodar medan du väntar på delar att anländer.

Detta är min kod:

Test skiss
Slå på varje LED i sin tur
MIT License
Ugi 2012

Detta är min standard multiplikator så att jag kan justera skissen för olika timing och klockfrekvenser. 128 för Arduino
Gör det en multipel av 8!

CONST unsigned int Loop = 8.

Stift 8 till 12 karta till relevanta bitar av PORTB på 328. Eftersom vi kommer att använda direkta PORTB kommandon bör detta arbete på "328 och ATtiny85

Här används PORTB direkt tillgång - som är stift D0 att D4 på Tiny Arduino eller D8 till D12 på normala Arduino
Första set är nuvarande pin layout.
Andra set är gamla versionen:
//
Aktuell version:
byte DirMatrix [12] = {B10001, B10001, B10010, B10010, B10100, B10100, B01001, B01001, B01010, B01010, B01100, B01100}; Vilket stift är utgång och som är hög impedence
byte PolMatrix [12] = {B10000, B00001, B10000, B00010, B10000, B00100, B01000, B00001, B01000, B00010, B01000, B00100}; Vilket stift är hög och låg för varje LED
//
Gamla versionen:
byte DirMatrix [12] = {B00110, B00110, B01010, B01010, B10010, B10010, B00101, B00101, B01001, B01001, B10001, B10001}; Vilket stift är utgång och som är hög impedence
byte PolMatrix [12] = {B00010, B00100, B00010, B01000, B00010, B10000, B00001, B00100, B00001, B01000, B00001, B10000}; Vilket stift är hög och låg för varje LED

byte läge = 0; numrerade från noll
CONST byte MaxModes = 4; Verkliga antalet lägen (så 1 om bara läge 0 definieras). Om större än 12 kommer att behöva ändra ChangeMode()
booleska SwitchMode = false;
booleska ButtonPress = false; Detta kan nu vara överflödig.

void setup() {

Serial.BEGIN(9600); Det finns vissa felsökning seriell kommandon återstående men bortkommenterad. De arbetar på Ardu "men inte tiny85
Serial.println ("tiny85 test").
Serial.println ("Ugi 2012");

DDRB & = B11100000; Ange alla stift till höga impedence

}

void loop() {
Växla (läge) {
fall 0:
OddEvenFlash();
bryta;
fall 1:
Progressive(8,0);
bryta;
fall 2:
Progressive(8,1);
bryta;
fall 3:
Larsen(8);
bryta;
}
om (SwitchMode) {SwitchMode = false; ChangeMode();}

}

Detta är den centrala rutinen som lyser en LED.
Tar bara LED nummer (0 till 11)
använder direkt tillträde till hamn för lätthet och snabbhet
void LightLED(byte LEDno) {
DDRB & = B11100000; Ställa in alla stift ingång
PORTB & = B11100000; Lågt satt alla stift
PORTB| = PolMatrix [LEDno]; Ange relevanta pins hög & låg
DDRB| = DirMatrix [LEDno]; Ange två relevanta stift att produktionen
}

Kontrollerar status på knappen.
Inte kalla det alltför ofta ' cos det avfall tid.
booleska CheckButton() {
DDRB & = B11100000; Ställa in alla stift ingång
PORTB & = B11100000; Lågt satt alla stift
PORTB| = B00000100; Ställa in PB2 hög - set inre pullup
delayMicroseconds(100); Behovet av att låta sedimentera ökning om problem med knappen trycker
Serial.println (PINB & B00000100);
flyktiga booleska tryck = PINB & B00000100;
IF(!press) {/ / om drog ner av switch
medan (! tryck) {/ / vänta tills switch släppt
Serial.Print ("debounce"); Serial.println (PINB & B00000100);
Delay(20);
Tryck = PINB & B00000100;
}
return true;
}
returnera false;
}

Förskott variabeln "Mode".
void ChangeMode() {
Läge ++;
om (läge > = MaxModes) läge = 0;
Serial.println(mode);
för (byte flash = 0; flash < = läge, flash ++) {
LightLED(Mode);
Delay(5);
DDRB & = B11100000;
Delay(15);
}
}

Funktioner definieras nedan...

OddEvenFlash - utformad som standardfunktionen. Detta blinkar växelvis udda och jämna LED.
Bör vara användbart för felsökning hårdvara som ser OK.
void OddEvenFlash() {
CONST unsigned int Timer = 300;
ButtonPress = 0;
booleska udda = false;
tag (!. ButtonPress) {
för (unsigned int tid = 0; tid <(Loop*Timer); tid ++) {
för (byte LED = 0; LED < 12; LED + = 2) {
LightLED(LED+Odd);
}
}
Udda =! Udda;
SwitchMode=CheckButton();
om (SwitchMode) {
Serial.println ("SwitchMode uppsättning");
hemkomst.
}
}
}

Progressiv Looping
Skickar ett "öga" av 4 lysdioder runt loopen av tonar in och ut sekventiellt.
Andra funktionen - igen till stöd hårdvara felsökning & också ser cool!

void progressiv (byte mellanskillnad, booleska Reverse) {
byte EyePos [4] = {3,2,1,0}.
om (bakåt) {
EyePos [0] = 8.
EyePos [1] = 9.
EyePos [2] = 10;
EyePos [3] = 11;
}
byte EyeInt[4]={64,192,(192-Increment),(64-Increment)};
tag (!. ButtonPress) {
för (byte hastighet = 0; Speed < slinga; Snabba += 8) {/ / detta ska utjämna hastighet för klocka freq
för (byte Pos = 0; POS < 4; POS++) {/ / ljus 4 lysdioder enligt deras ljusstyrka
LightLED(EyePos[Pos]);
Serial.Print (EyePos [Pos], DEC); Serial.Print("="); Serial.Print(EyeInt[POS],dec); Serial.Print("");
byte skrot;
för (byte Count = 0; Greve < EyeInt [Pos]; Count++) {PORTB & = B11111111;}
}
Serial.println("");

EyeInt [0] += ökning;
EyeInt [1] += ökning;
EyeInt [2]-= Increment;
EyeInt [3]-= Increment;

om (EyeInt [3] < Increment) {
EyeInt [3] = EyeInt [2].
EyeInt [2] = EyeInt [1].
EyeInt [1] = EyeInt [0];
EyeInt [0] = 0;
EyePos [3] = EyePos [2].
EyePos [2] = EyePos [1].
EyePos [1] = EyePos [0];

IF(reverse) {
EyePos [0]--;
om (EyePos [0] > 200) {EyePos [0] = 11.}
}
annat {
EyePos [0] ++;
om (EyePos [0] > 11) {EyePos [0] = 0;}
}
SwitchMode=CheckButton();
IF(SwitchMode) {återvänder;}
}
}
}
}

Larsen scanner typ våg
Skulle kunna göra detta som en del av progressiv. Jag kunde inte göra det effektivt.
void Larsen(byte Increment) {
byte EyePos [4] = {3,2,1,0}.
byte EyeInt[4]={64,192,(192-Increment),(64-Increment)};
booleska bakåt = false;
tag (!. ButtonPress) {
för (byte hastighet = 0; Speed < slinga; Snabba += 8) {/ / detta ska utjämna hastighet för klocka freq
för (byte Pos = 0; POS < 4; POS++) {/ / ljus 4 lysdioder enligt deras ljusstyrka
LightLED(EyePos[Pos]);
Serial.Print (EyePos [Pos], DEC); Serial.Print("="); Serial.Print(EyeInt[POS],dec); Serial.Print("");
för (byte Count = 0; Greve < EyeInt [Pos]; Count++) {PORTB & = B11111111;} / / Håll lampan tänd i taget beroende på ögat intensitet
}
Serial.println("");
}
EyeInt [0] += ökning;
EyeInt [1] += ökning;
EyeInt [2]-= Increment;
EyeInt [3]-= Increment;

om (EyeInt [3] < Increment) {
EyeInt [3] = EyeInt [2].
EyeInt [2] = EyeInt [1].
EyeInt [1] = EyeInt [0];
EyeInt [0] = 0;
EyePos [3] = EyePos [2].
EyePos [2] = EyePos [1].
EyePos [1] = EyePos [0];

IF(reverse) {
EyePos [0]--;
om (EyePos [0] > 200) {EyePos [0] = 1; Omvänd = false;}
}
annat {
EyePos [0] ++;
om (EyePos [0] > 11) {EyePos [0] = 10; Omvänd = sant;}
}
SwitchMode=CheckButton();
IF(SwitchMode) {återvänder;}
}
}
}

Se Steg
Relaterade Ämnen

Ändra en RGB LED-kit för att driva mer lysdioder

Svaret är: "Ja" och "Nej".Det är faktiskt möjligt att ändra en RGB LED-kit för att rymma en längre längd av RGB remsan. Det finns dock två typer av begränsningar:en a begränsning av strömförsörjningen ligger inne i den befintliga RGB d...

Dimbara bärbara Led strålkastare.

jag ville ha en lätt och bärbar led strålkastare med en dimmer. Här är hur jag gjorde detta mini projekt.Steg 1: Fallet. Med hjälp av en gammal solenergi lampa ärende, jag gick på att göra min strålkastare.Steg 2: Lysdioderna.Varje matris av 3528 smd...

Hur du sätter samman en kille Manuel LED Kit.

Detta är en steg för steg guide om hur man gör en fullt ut arbetande kille Manuel LED kit.Dessa anvisningar omfattar endast elektronik, montering av faktiska husen visas inte här.Slutresultatet är detta:http://youtu.be/eiaxZPle4vsLäs över denna guide...

Bärbar Paracord Kit

i detta instructable jag kommer att visa dig hur man gör en bärbar Paracord kit. I detta kit är tillräckligt leveranser att göra 2 armband eller 2 nyckelringar.Steg 1: Samla ditt material Behöver du:2 nyckel ringar2 små spännen1 Bic lättare2 nio fot...

DIY bärbara LED belysning Panel

En bärbar LED belysning panel kan verkligen komma till hands för fotografi och video arbete, så idag ska vi göra en DIY version som ännu är super bra, lätt att göra. Så jag ständigt tar bilder och video från saker arbetar jag på, projekt, mat, av mig...

Oförstörbara LED lyktor

efter att ha sett artikeln "eternal flame" i MAKE: Magazine, min första tanke upos ser projektet var att det inte är riktigt "eviga" eftersom du inte kan ändra batteriet om det är limmad stänga! Efter behandlingen såg jag att det bruka...

Ultra ljusa bärbara LED lampa

Hej , detta är min första instructable hoppas ni alla njuta med detta...Detta är en mycket användbar bärbara led lampa med justerbar arm, det får ström från batteriet så att vi kan använda denna lampa som akut lampa när power stänger.att göra detta b...

Denna Etsy säljarens bärbara fotografering Kit

Jag har en butik på Etsy... faktiskt, jag har två. Jag etch mässing, koppar och några andra metaller för att göra saker. De flesta av de saker jag gör är nyckelringar, hängen och andra små bitar. Min etsning arbetar i omgångar, så när jag har något a...

Bärbar LED spel

i detta instructible jag kommer att visa dig hur man gör en bärbar LED spel från Arduino.Steg 1: leveranser Du behöver1 set av brödunderläggen4 330 ohm motstånd1 10 k ohm motstånd4 lysdioderStartkablarArduino ombord UNOKraftkällaMac eller windowsSteg...

Battery Powered bärbar LED lampor

detta är en enkel krets "Bärbara LED belysning" som kan hantera oväntade och oönskade mörkret i vårt hem eller kontor. Det ger betydande mängd ljusstyrka krävs för att göra våra vardagssysslor. Denna krets använder IC 555 timer i astable läge. F...

LED lampa 11 × 11 lysdioder

detta instructable handlar om hur man gör en LED lampa med 121 lysdioder med bara 4 enkla steg och ljuset är mycket effektivt att lätta ett rum och bara med ett batteri av 6v - 9v.Sak du "ll behöver-:1. PCB med hål2. 121 lysdioder3. 9v batteri4. 330...

Liten bärbar kamerastativ

de flesta människor har svårt att ta en bild utan att skaka sin hand som de tar bilden.Detta Instructable visar hur man gör en liten bärbar kamerastativ som gör att du kan ta bilder utan skakar!Disclaimer: Detta stativ inte kommer att hålla upp en ka...

Bärbara högtalare med synkroniserad lysdioder

Hej. Idag ska jag visa dig hur du gör din egen bärbara högtalare med synkroniserad lysdioder. Dess mycket enkelt och du behöver inte någon micro controller att göra det. Kan komma igång.Steg 1: Steg 1: ta tag i objekt Jag köpte några USB-drivna högta...

Enkla Buck LED Driver med PWM ingång

High-power ljusdioder över 1W är nu ganska billiga. Jag är säker många av er håller på att integrera lysdioder som ljuskällor i dina projekt.Men jag inser att konstaterandet och konfigurera strömförsörjningen är fortfarande inte så enkelt som det kan...

Bärbar LED spårning ljuslåda (upcycled från LCD TFT))

Ljusbord är en av de löjligt prissatta objekt att de samtidigt är så lätt att göra, och det är en anledning instructables är full av sådana projekt.Det finns också många sätt att göra dem, så det finns många sätt att slutmålet. Här vi så exaplain vår...

DIY bärbara LED strobe

jag och mina vänner gillar att ha kul i sommar. Vi vilja lura runt med musik när vi campar. För att dessa parter mer benägna till professionella som har jag gjort bärbara 9V LED strobe. Till min förvåning ger det verkligen en stor effekt. Jag hoppas...

Bärbar LED handskfacket illuminator

Här är en liten batteridriven bärbar handskfacket ljus. Du kan placera den på insidan av din handskfacket med kardborrband eller andra varumärke krok och ögla, så när du öppnar handskfacket, växeln dörren kommer att slå på ljuset, och när du stänger...

LED Infinity spegel, 32 lysdioder, valbar mönster, kvalitet ram

detta Instructable har uppdaterats med bättre information och bättre konstruktion, vänligen se de 10 "x 10" LED Infinity spegel InstructableDetta Instructable omfattar bygga min tillgänglig Full 8 "x 8" 32 LED Infinity spegel Kit eller...

Precis i tid för semester - hacka dig själv en god liten uppsättning LED julbelysningen

nu när semestern närmar sig snabbt--och en sträng av LED-lampor går för bara fyra eller fem spänn--det är hög tid att få ut din avbitare och plast slangar och göra en uppsättning av flashiga lampor som du kan styra från din Arduino!I detta instructab...