Stap 6: Code. Tot slot.
Oke, nu zijn we eindelijk klaar om te laden van de eigenlijke code. Kopieer en plak deze code in de IDE. Vervolgens, ga naar de 13e regel, waar pgt is ingesteld op 250000. Verandering de 250000 naar 1000000 / (12 / afstand) waar de afstand is de afstand tussen de gaten van de laatste stap. Gebruik geen decimalen, door op het dichtstbijzijnde gehele getal.
Booleaanse ts;
int value01 = 0; de waarde van de //the in de tiende plaats
byte value10 = 0; //value in de tientallen plaatsen
unsigned long anaval; //value in de plaats
byte-waarde = 0; / / test waarde moet worden weergegeven
Const int val = 40; de vertraging
lange temp;
Booleaanse extra10; //these zijn net waar we willen het decimaalteken
Booleaanse extra1;
Boolean extra;
niet-ondertekende lang; //the micros() waarde op het moment van onderbreken
unsigned long lasttime;
unsigned int pgt = 250000; het nummer van de 3 duim tussen photogates. Als dit aantal wordt weergegeven, betekent dit er is een fout opgetreden, en geen tijdsinterval werd opgenomen.
berekend als 1000000/(12/distanceininches). geeft uitvoer in ft/sec
geen drijvers gebruiken om ruimte te besparen (theres heel weinig over de 2313)
VOID Setup {}
DDRB = B11111111; //sets poort B naar uitvoer (de meeste pinnen aan de linkerzijde)
DDRD = B1110000; //sets de 3-pins die de cijfers naar buiten, alle anderen in te schakelen.
DDRA = B000; Als met behulp van een externe oscilator, Don't mess with poort A, reset en oscillator.
PORTD = B0001111;
PORTA = B000;
attachInterrupt (1, stv, stijgt); //we alleen wilt onderbreken op de eerste poort, we don't care over de tweede nog.
}
void loop {}
istobig (); //these drie output alleen het nummer. De timing is gedaan in de interrupts
divide();
sendout();
}
VOID stv() {//starts timing en hecht de juiste onderbreken
tijd = micros (); //if u de code, dit altijd wijzigen moeten in dezelfde volgorde staan als stopv(). Anders zal het verschil tussen het breken van de poort en het opnemen van de tijd anders, en dus verknoeien het resultaat.
attachInterrupt (0, stopv, RISING); //set een voor de andere interrupt-pin
detachInterrupt (1); //and uitschakelen deze, tot de andere interrpt is struikelde
}
ongeldig stopv() {}
lastTime = micros (); //this moet dezelfde bewerking, en in dezelfde plaats als time=micros() hierboven.
anaval = pgt / (abs(lasttime-time)/10); //do de wiskunde om ft/sec
attachInterrupt (1, stv, stijgt); //reattach de interrupt start de timer,
detachInterrupt(0); en deze te verbreken.
}
VOID istobig() {//checks als het getal te groot is. Als het is, vermindert het het dienovereenkomstig. (met een factor 10);
Temp = anaval;
Als (temp > 1000) {}
extra = 1;
temp = temp/10;
} else {}
extra = 0;
}
Als (temp > 1000) {}
extra1 = 1;
temp = temp/10;
} else {}
extra1 = 0;
}
Als (temp > 1000) {}
extra10 = 1;
temp = temp/10;
} else {}
extra10 = 0;
}}
ongeldig divide() {}
value01 = temp; //sets tienden tussen 0 en 900
waarde = temp/10; //sets degenen tussen 0 en 90
value10 = temp/100; //sets tientallen tussen 0 en 9
waarde = int (waarde); //rounds de variabelen
value10 = int(value10);
value01 = int(value01);
value01 = value01 - (waarde * 10); //removes alles behalve de tienden-plaats-cijfer
waarde = waarde - (value10 * 10); //removes alles behalve het degenen-plaats-cijfer
}
ongeldig sendout() {}
extra * = 4;
PORTD = B0001111;
Temp = value01;
output();
PORTD = B1001111;
delayMicroseconds(val);
extra = extra1 * 4;
PORTD = B0001111;
temp = waarde;
output();
PORTD = B0101111;
delayMicroseconds(val);
extra = extra10 * 4;
PORTD = B0001111;
Temp = value10;
output();
PORTD = B0011111;
delayMicroseconds(val2);
geen vertraging nodig, de wiskunde duurt lang genoeg
}
VOID output() {//sets portB gebaseerd op het nummer moet worden weergegeven
switch(temp) {}
Case 0:
PORTB = B00000101 - extra; extra voegt een decimaalteken.
breken;
Case 1:
PORTB = B11011101 - extra;
breken;
Case 2:
PORTB = B01000110 - extra;
breken;
Case 3:
PORTB = B01010100 - extra;
breken;
Case 4:
PORTB = B10011100 - extra;
breken;
Case 5:
PORTB = B00110100 - extra;
breken;
Case 6:
PORTB = B00100100 - extra;
breken;
Case 7:
PORTB = B01011101 - extra;
breken;
zaak 8:
PORTB = B00000100 - extra;
breken;
Case 9:
PORTB = B00011100 - extra;
breken;
}}