29.07.2013 Views

Den Svævende Kugle, Dokumentation [pdf - sorenr.dk

Den Svævende Kugle, Dokumentation [pdf - sorenr.dk

Den Svævende Kugle, Dokumentation [pdf - sorenr.dk

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!