3D tryckt Microcontroller Dice Roller (3 / 10 steg)
Steg 3: Programmera mikrokontroller
Jag skrev min kod i MPIDE. MPIDE är helt gratis och kan laddas ner här. Obs: MPIDE kan programmera bara om någon mikrokontroller, inklusive alla chipKIT och Arduino styrelser. Om du använder en Arduino ombord och har redan Arduino's IDE som fungerar lika bra för.
Om du är helt ny till mikrokontroller och programmering i en IDE, här är en snabb tutorial som förklarar hur du installerar MPIDE och använda den för att kommunicera med din styrelse: Intro till MPIDE.
Jag skrev för mikrokontroller koden kan ses nedan. Det finns tre huvudsakliga delar till denna "skiss":
- Roll() funktion som gör det ser ut som om dör faktiskt rullar. Detta är en funktion jag skapat själv och det ingår i koden nedan.
- Generera ett slumptal mellan 1 och 6 med rand() funktion. (Funktionen är fördefinierade i huvudfilen stdlib.h.)
- Och en serie om uttalanden att lysa upp rätt lysdioderna baserat på den slumpmässiga värde som genereras.
Denna kod kan kopieras direkt från rutan nedan och klistras in i din IDE. Sedan kan du överföra den direkt till din styrelse därifrån. Om du är osäker på hur man laddar upp skissen, kolla "Intro till MPIDE" tutorial länkade ovan.
Obs: Ledsen för mycket utrymmeskrävande formatering för koden. Det används för att visa i en fin liten låda du kan bläddra igenom, men Instructables gjort vissa ändringar i deras redigeringsgränssnitt och jag inte kan göra det längre.
#include / / för att använda funktionen rand()
Initierar PIN-koden för knappen input
CONST int btnPin = 26.
Initierar stift att kontrollera varje LED
CONST int led_left_top = 33. LED i övre vänstra hörnet av die
CONST int led_left_center = 32. LED i till vänster i die i raden center
CONST int led_left_bottom = 31; LED i det nedre vänstra hörnet i die
CONST int led_right_top = 30. LED i det övre högra hörnet i die
CONST int led_right_center = 29. LEDDE till höger i die i raden center
CONST int led_right_bottom = 28; LED i det nedre högra hörnet i die
CONST int led_center = 27. LED i mitten i die
Skapa en funktion för att simulera effekten av en dö rullande
Funktionen kommer att göra LED flimrar genom nummer 1-6
void roll()
{
int jag = 0; Räkna variabel för loop
för (jag = 0; jag < 5; i ++) / / cykla 5 gånger
{
Display 1
digitalWrite (led_left_top, låg);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, låg);
digitalWrite (led_right_top, låg);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, låg);
digitalWrite (led_center, hög);
Delay(50); vänta 50 ms innan visas nästa värde
Skärm 2
digitalWrite (led_left_top, hög);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, låg);
digitalWrite (led_right_top, låg);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, hög);
digitalWrite (led_center, låg);
Delay(50);
Skärm 3
digitalWrite (led_left_top, hög);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, låg);
digitalWrite (led_right_top, låg);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, hög);
digitalWrite (led_center, hög);
Delay(50);
Display 4
digitalWrite (led_left_top, hög);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, hög);
digitalWrite (led_right_top, hög);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, hög);
digitalWrite (led_center, låg);
Delay(50);
Skärm 5
digitalWrite (led_left_top, hög);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, hög);
digitalWrite (led_right_top, hög);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, hög);
digitalWrite (led_center, hög);
Delay(50);
Display 6
digitalWrite (led_left_top, hög);
digitalWrite (led_left_center, hög);
digitalWrite (led_left_bottom, hög);
digitalWrite (led_right_top, hög);
digitalWrite (led_right_center, hög);
digitalWrite (led_right_bottom, hög);
digitalWrite (led_center, låg);
Delay(50);
}
} / / End av rulle funktion
Initiliazing variabel som representerar die värde
int die_value = 0;
Annullerasetup () / / configure microcontroller pins
{
SET-knappen pin för input
pinMode (btnPin, ingång);
Set LED stift till utgång
pinMode (led_left_top, produktionen);
pinMode (led_left_center, produktionen);
pinMode (led_left_bottom, produktionen);
pinMode (led_right_top, produktionen);
pinMode (led_right_center, produktionen);
pinMode (led_right_bottom, produktionen);
pinMode (led_center, produktionen);
}
Ogiltigloop )
{
Kontrollera om du trycker på knappen
om (digitalRead(btnPin) == hög) / / om knappen trycktes
{
roll(); Simulera die rulle
die_value = (rand() % 6) + 1; Välja slumpmässigt die värde, denna kod kommer att generera ett tal mellan 1 och 6
om (die_value == 1) / / bara centrum LED lyser
{
digitalWrite (led_left_top, låg);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, låg);
digitalWrite (led_right_top, låg);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, låg);
digitalWrite (led_center, hög);
}
ElseIf (die_value == 2) / / endast övre vänstra och nedre höger lysdioder lyser
{
digitalWrite (led_left_top, hög);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, låg);
digitalWrite (led_right_top, låg);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, hög);
digitalWrite (led_center, låg);
}
ElseIf (die_value == 3) / / övre vänstra, nedre höger och center lysdioder lyser
{
digitalWrite (led_left_top, hög);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, låg);
digitalWrite (led_right_top, låg);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, hög);
digitalWrite (led_center, hög);
}
ElseIf (die_value == 4) / / de fyra lysdioderna på hörnen lyser
{
digitalWrite (led_left_top, hög);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, hög);
digitalWrite (led_right_top, hög);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, hög);
digitalWrite (led_center, låg);
}
ElseIf (die_value == 5) / / 4 hörn lysdioderna och stadens LED lyser
{
digitalWrite (led_left_top, hög);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, hög);
digitalWrite (led_right_top, hög);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, hög);
digitalWrite (led_center, hög);
}
annat / / die_value == 6 och alla lysdioder lyser utom centrum en
{
digitalWrite (led_left_top, hög);
digitalWrite (led_left_center, hög);
digitalWrite (led_left_bottom, hög);
digitalWrite (led_right_top, hög);
digitalWrite (led_right_center, hög);
digitalWrite (led_right_bottom, hög);
digitalWrite (led_center, låg);
}
Delay(4000); visar dö värde för 4000ms eller 4 sekunder
}
annat / / lysdioder stanna utanför om knappen inte har tryckts
{
digitalWrite (led_left_top, låg);
digitalWrite (led_left_center, låg);
digitalWrite (led_left_bottom, låg);
digitalWrite (led_right_top, låg);
digitalWrite (led_right_center, låg);
digitalWrite (led_right_bottom, låg);
digitalWrite (led_center, låg);
}
}