Den Svævende Kugle, Dokumentation [pdf - sorenr.dk
Den Svævende Kugle, Dokumentation [pdf - sorenr.dk
Den Svævende Kugle, Dokumentation [pdf - sorenr.dk
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Den</strong> svævende kugle<br />
6.4 Software<br />
{<br />
}<br />
Ingeniørhøjskolen ˚Arhus 2005<br />
Gruppe 3<br />
// Undersøger om der er en kugle under spolen.<br />
// Det fortolker vi som: hvis føleren tror at kuglen er mindre end 0,5mm eller fjernet fra spolen.<br />
if( aktuelAfstand 200 * 200 = 40000<br />
// (Short er 16 bit)<br />
unsigned short returvaerdi=0;<br />
unsigned char afrunding=0;<br />
}<br />
// Flytter værdierne i gennemsnits bufferen<br />
unsigned char gennemsnitLaengde;<br />
for(gennemsnitLaengde=gennemsnitAntal-1; gennemsnitLaengde>=1; --gennemsnitLaengde)<br />
{<br />
// Flytter data’erne i gennemsnits bufferen<br />
gennemsnit[gennemsnitLaengde]=gennemsnit[gennemsnitLaengde-1];<br />
// Summer returværdien op<br />
returvaerdi += gennemsnit[gennemsnitLaengde];<br />
}<br />
// ADMUX er AD Multiplexer Selection der bestemmer hvordan og hvilken type.<br />
// Signalet der skal digitaliseres.<br />
// 0x00 = ADC reference spændings type.<br />
ADMUX=adc_input|ADC_VREF_TYPE;<br />
// ADC Control and Status Register A (Starter konverteringen).<br />
ADCSRA|=0x40;<br />
// Venter p˚a at konverteren bliver færdig.<br />
while((ADCSRA & 0x10)==0);<br />
// Færdiggøre konverteringen og resetter de brugte registre, undtagen ADCW(ADCH og ADCL).<br />
ADCSRA|=0x10 ;<br />
// Tilføjer den nye indlæsning til gennemsnits bufferen, i 100 dele mm<br />
gennemsnit[0]=(ADCW*200.0)/1023.0;<br />
returvaerdi+=gennemsnit[0];<br />
// Afrunding, undersøger om der skal rundes op.<br />
afrunding=((returvaerdi%(gennemsnitAntal))>=(0.5*gennemsnitAntal));<br />
// Returnere et signal ved at tage divider summen af de gemte værdier og divider med antallet<br />
// Der svare til 0-20mm.<br />
return (returvaerdi/gennemsnitAntal)+afrunding;<br />
// Afstanden skaleres til 10 dele mm og afrunding lægges til<br />
//return (returvaerdi/10)+afrunding;<br />
// Via interrupt timeren, vil den præsentere fejlmeddelsen i aktuelLCD med et interval p˚a 20.<br />
// (20x256/4 kHz = 1,3s).<br />
void skriveFejl(char tekst[])<br />
{<br />
if( time>=0 && time