Stap 9: Verklaring van de code
int delayTime = 1; //The delay time between sub characters int charBreak = 2.1; //The delay between different characters
De bovenstaande 2 vertragingstijden moeten worden aangepast zoals vereist. Wijzig deze totdat u de gewenste weergave die u wilt, de breedte van elk gedeelte van de brief het verhogen van de delayTime zal toenemen, overwegende dat verhoging van de charBreak zullen vergroten de ruimte tussen 2 letters.
int LED1 = 0; //Defining which pins the LEDs are attached to int LED2 = 1; int LED3 = 2; int LED4 = 3; int LED5 = 4;
void setup() { pinMode(LED1, OUTPUT); //Setting LED1 as output pinMode(LED2, OUTPUT); //Setting LED2 as output pinMode(LED3, OUTPUT); //Setting LED3 as output pinMode(LED4, OUTPUT); //Setting LED4 as output pinMode(LED5, OUTPUT); //Setting LED5 as output }
int a[] = {1, 6, 26, 6, 1}; // These are the integers that help us display the letter A int b[] = {31, 21, 21, 10, 0}; int c2[] = {14, 17, 17, 10, 0}; int d[] = {31, 17, 17, 14, 0}; int e[] = {31, 21, 21, 17, 0}; int f[] = {31, 20, 20, 16, 0}; int g[] = {14, 17, 19, 10, 0}; int h[] = {31, 4, 4, 4, 31}; int i[] = {0, 17, 31, 17, 0}; int j[] = {0, 17, 30, 16, 0}; int k[] = {31, 4, 10, 17, 0}; int l[] = {31, 1, 1, 1, 0}; int m[] = {31, 12, 3, 12, 31}; int n[] = {31, 12, 3, 31, 0}; int o[] = {14, 17, 17, 14, 0}; int p[] = {31, 20, 20, 8, 0}; int q[] = {14, 17, 19, 14, 2}; int r[] = {31, 20, 22, 9, 0}; int s[] = {8, 21, 21, 2, 0}; int t[] = {16, 16, 31, 16, 16}; int u[] = {30, 1, 1, 30, 0}; int v[] = {24, 6, 1, 6, 24}; int w[] = {28, 3, 12, 3, 28}; int x[] = {17, 10, 4, 10, 17}; int y[] = {17, 10, 4, 8, 16}; int z[] = {19, 21, 21, 25, 0};
De 5 verschillende gehele getallen komen overeen met de 5 termijnen die deel van elke letter uitmaken.
(In de 2e stap van dit instructable ik gebruikte 3 termijnen te halen met de letter E, hier gebruiken we 5 termijnen)
int eos[] = {0, 1, 0, 0, 0}; int excl[] = {0, 29, 0, 0, 0}; int ques[] = {8, 19, 20, 8, 0};
void displayLine(int line) { int myline; myline = line; if (myline>=16) {digitalWrite(LED1, HIGH); myline-=16;} else {digitalWrite(LED1, LOW);} if (myline>=8) {digitalWrite(LED2, HIGH); myline-=8;} else {digitalWrite(LED2, LOW);} if (myline>=4) {digitalWrite(LED3, HIGH); myline-=4;} else {digitalWrite(LED3, LOW);} if (myline>=2) {digitalWrite(LED4, HIGH); myline-=2;} else {digitalWrite(LED4, LOW);} if (myline>=1) {digitalWrite(LED5, HIGH); myline-=1;} else {digitalWrite(LED5, LOW);} }
Dit is het belangrijkste deel van de code waarin wordt uitgelegd welke alle het nummer vermeldden wij boven gemiddelde,
Bijvoorbeeld laat x een geheel getal zijn. Als x groter dan is of gelijk zijn aan 16, dan LED1 draait op en we 16 van x aftrekken, nu blijkt als (x-16) groter dan of gelijk is aan 8, LED2 draait op zo goed samen met LED1 is en wij 8 aftrekken, nu als (x-24) groter dan of gelijk aan 4 is, LED3 op samen met LED1 en LED2, enzovoort...
Als op een willekeurig exemplaar kleiner dan het opgegeven aantal is, dan dat LED is uitgeschakeld en gaan we over tot de volgende stap zonder af te trekken van een willekeurig getal.
Ex: Laat nemen 18, nu is het groter is dan 16, daarom LED1 is ingeschakeld, nu op 16 we hebben aftrekken 2, 2 is minder dan 8 dus LED2 uitstaat, nu 2 minder dan 4 is dus LED3 uitstaat, nu 2 groter dan is of gelijk is aan 2, dus LED4 brandt, en op 2 af te trekken hebben wij 0 die kleiner dan 1 is , dus LED5 is uitgeschakeld.
Op deze wijze kunnen we verschillende gehele getallen om te zetten in- en uitschakelen verschillende LEDs als wij vereisen toewijzen.
Laat Neem bijvoorbeeld de letter H, de gehele getallen zijn 31,4,4,4,31;
Dus eerste 31, het draait op alle LEDs-1 tot 5, volgende 4 draait op alleen LED3, vervolgens 4 draait weer op LED3 en 4 opnieuw ingeschakeld LED3 dan 31 op alle LEDs 1 tot 5 draait. Op deze manier wanneer we deze naast elkaar zetten zoals aangegeven in stap 2 van dit instructable, zien we de letter H.
void displayChar(char c) { if (c == 'a'){for (int i = 0; i <5; i++){displayLine(a[i]);delay(delayTime);}displayLine(0);} if (c == 'b'){for (int i = 0; i <5; i++){displayLine(b[i]);delay(delayTime);}displayLine(0);} if (c == 'c2'){for (int i = 0; i <5; i++){displayLine(c2[i]);delay(delayTime);}displayLine(0);} if (c == 'd'){for (int i = 0; i <5; i++){displayLine(d[i]);delay(delayTime);}displayLine(0);} if (c == 'e'){for (int i = 0; i <5; i++){displayLine(e[i]);delay(delayTime);}displayLine(0);} if (c == 'f'){for (int i = 0; i <5; i++){displayLine(f[i]);delay(delayTime);}displayLine(0);} if (c == 'g'){for (int i = 0; i <5; i++){displayLine(g[i]);delay(delayTime);}displayLine(0);} if (c == 'h'){for (int i = 0; i <5; i++){displayLine(h[i]);delay(delayTime);}displayLine(0);} if (c == 'i'){for (int it = 0; it <5; it++){displayLine(i[it]);delay(delayTime);}displayLine(0);} if (c == 'j'){for (int i = 0; i <5; i++){displayLine(j[i]);delay(delayTime);}displayLine(0);} if (c == 'k'){for (int i = 0; i <5; i++){displayLine(k[i]);delay(delayTime);}displayLine(0);} if (c == 'l'){for (int i = 0; i <5; i++){displayLine(l[i]);delay(delayTime);}displayLine(0);} if (c == 'm'){for (int i = 0; i <5; i++){displayLine(m[i]);delay(delayTime);}displayLine(0);} if (c == 'n'){for (int i = 0; i <5; i++){displayLine(n[i]);delay(delayTime);}displayLine(0);} if (c == 'o'){for (int i = 0; i <5; i++){displayLine(o[i]);delay(delayTime);}displayLine(0);} if (c == 'p'){for (int i = 0; i <5; i++){displayLine(p[i]);delay(delayTime);}displayLine(0);} if (c == 'q'){for (int i = 0; i <5; i++){displayLine(q[i]);delay(delayTime);}displayLine(0);} if (c == 'r'){for (int i = 0; i <5; i++){displayLine(r[i]);delay(delayTime);}displayLine(0);} if (c == 's'){for (int i = 0; i <5; i++){displayLine(s[i]);delay(delayTime);}displayLine(0);} if (c == 't'){for (int i = 0; i <5; i++){displayLine(t[i]);delay(delayTime);}displayLine(0);} if (c == 'u'){for (int i = 0; i <5; i++){displayLine(u[i]);delay(delayTime);}displayLine(0);} if (c == 'v'){for (int i = 0; i <5; i++){displayLine(v[i]);delay(delayTime);}displayLine(0);} if (c == 'w'){for (int i = 0; i <5; i++){displayLine(w[i]);delay(delayTime);}displayLine(0);} if (c == 'x'){for (int i = 0; i <5; i++){displayLine(x[i]);delay(delayTime);}displayLine(0);} if (c == 'y'){for (int i = 0; i <5; i++){displayLine(y[i]);delay(delayTime);}displayLine(0);} if (c == 'z'){for (int i = 0; i <5; i++){displayLine(z[i]);delay(delayTime);}displayLine(0);} if (c == '!'){for (int i = 0; i <5; i++){displayLine(excl[i]);delay(delayTime);}displayLine(0);} if (c == '?'){for (int i = 0; i <5; i++){displayLine(ques[i]);delay(delayTime);}displayLine(0);} if (c == '.'){for (int i = 0; i <5; i++){displayLine(eos[i]);delay(delayTime);}displayLine(0);} delay(charBreak); }
Dit deel van de code vertelt de arduino te verplaatsen door middel van een tijdsbestek na de andere met de vertraging van de delayTime en het cycli van i = 0 (periode 1) tot en met i = 4 (tijd frame 5) elke geheel getal weer te geven als het beweegt op.
void displayString(char* s) { for (int i = 0; i<=strlen(s); i++) { displayChar(s[i]); } }
Dit vertelt de arduino om weer te geven van alle tekens die we willen achter elkaar vanaf ik = 0 tot i = lengte van de tekenreeks (aantal tekens).
void loop() { displayString("hello world"); }
"Hallo wereld" is wat momenteel wordt weergegeven, kunt u het naar wat je wilt. Zorg enkel ervoor dat er niet te veel tekens die de POV is niet kundig voor weergave met een bepaalde snelheid van de motor. Als u de motor snelheid verhogen en de vertraging tijdsinstellingen verminderen kunt u meer aantal tekens weergeven. Met mijn motor en met de vertraging tijden die ik gebruikte, was ik kundig voor weergave van 12 karakters in totaal, inclusief de spaties, dus Hallo wereld perfect was.