Probier mal dieses kleine Diagnose Programm aus. Das hab ich mir extra zum Testen meiner Line Sensoren gemacht. Anmerkung: Mit den beiden linken Tasten kannst Du die LED unten ein- und auszuschalten. Auf dem Bildschirm bekommst Du die Werte der Line Sensoren angezeigt und beim Drücken von Tasten, auch diese Werte angezeigt.
Dieses kleine Programm war mein erster Gehversuch mit dem Asuro. Ich hoffe, dass ich mit dem Ding noch warm werde.
Vielleicht hilft Dir das weiter
Gruß
Pit
Code:
#include "asuro.h"
unsigned int readSwitch (void)
{
unsigned int i;
DDRD |= SWITCHES; // Switches as Output
SWITCH_ON; // Output HIGH for measurement
ADMUX = (1 << REFS0) | SWITCH; // AVCC reference with external capacitor
Sleep(10);
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF)));// wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
i = ADCL + (ADCH << 8);
SWITCH_OFF;
return i;
}
void sekunden(int anzahl)
{
int i, j;
for(i = 1; i <= anzahl; i++)
{
for(j = 1; j <= 284; j++) {Sleep(255);}
}
}
void sendeZahl(unsigned int wert, unsigned int zahlenSystemAusg, unsigned int stellenAusg)
{
unsigned int restWert, stellenWert, i;
unsigned char zeichenAusg[stellenAusg];
i = 1;
stellenWert = 1;
while ((stellenWert * zahlenSystemAusg <= wert) || (i < stellenAusg)) {stellenWert *= zahlenSystemAusg;i++;}
restWert = wert;
for (i=0; i < stellenAusg; i++)
{
zeichenAusg[i] = (unsigned char) (restWert / stellenWert + 48);
restWert -= ((unsigned int) zeichenAusg[i] - 48) * stellenWert;
stellenWert /= zahlenSystemAusg;
}
SerWrite(zeichenAusg, stellenAusg);
}
unsigned int printTasten(unsigned int ui_taste0)
{
float f_taste;
unsigned int ui_AD_wert0, ui_AD_wert1, ui_taste1, ui_delta;
ui_AD_wert0 = 0;
ui_AD_wert1 = 10;
while (((ui_AD_wert0 + 5) <= ui_AD_wert1) && ((ui_AD_wert0 - 5) >= ui_AD_wert1))
{
ui_AD_wert0 = ui_AD_wert1;
ui_AD_wert1 = readSwitch();
}
f_taste = ((1024.0/(float) ui_AD_wert1 - 1.0) * 63.0);
ui_taste1 = (unsigned int) (f_taste + 0.5);
if (ui_taste0 != ui_taste1)
{
SerWrite("\n\r\n\r", 4);
SerWrite("AD-Wert: ", 9);
sendeZahl(ui_AD_wert1, 10, 4);
SerWrite(" Tastenwert bin: ", 20);
sendeZahl(ui_taste1, 2, 8);
SerWrite(" Tastenwert dez: ", 20);
sendeZahl(ui_taste1, 10, 3);
if (f_taste > (float) ui_taste1)
{
SerWrite(" +0,", 4);
ui_delta = (unsigned int) ((f_taste - (float) ui_taste1) * 100);
sendeZahl (ui_delta, 10, 2);
}
else
{
SerWrite(" -0,", 4);
ui_delta = (unsigned int) (((float) ui_taste1 - f_taste) * 100);
sendeZahl (ui_delta, 10, 2);
}
SerWrite("\n\r", 2);
}
return ui_taste1;
}
int main(void)
{
unsigned int ui_taste, ui_Line[2];
Init();
SerWrite("\n\r\n\r Asuro Line- und Switch-Test\n\r", 34);
StatusLED(OFF);
SerWrite("\n\rStatusLED(OFF)", 16);
ui_taste = 0;
Sleep(25);
while(1)
{
ui_taste = printTasten(ui_taste);
sekunden(1);
if (ui_taste == 32) {FrontLED(ON); SerWrite("\n\rFrontLED(ON)\n\r", 16);}
if (ui_taste == 16 || ui_taste == 8) {FrontLED(OFF); SerWrite("\n\rFrontLED(OFF)\n\r", 17);}
LineData(ui_Line);
SerWrite("\n\rLineData links: ", 23);
sendeZahl(ui_Line[0], 10, 3);
SerWrite(" rechts: ", 18);
sendeZahl(ui_Line[1], 10, 3);
}
return 0;
}
[Code-Tags eingefügt von Radbruch]
Lesezeichen