Hallo
Hier zuerst mal dein etwas umformatierter Code:
PHP-Code:
#include "stdlib.h"
#include "asuro.h"
#include "lcd.h"
#include "i2c.h"
int o = 1;
void start(int speed)
{
int keys;
int i = 1;
int zaehler = 0 ;
while(i >0)
{
keys = PollSwitchLCD();
if (keys & LCD_KEY_YELLOW) //schwarzer Taster
{
while ( zaehler == 0)
{
if(speed < 355) //Geschwindigkeit erhöhen
{
speed = speed +10;
ClearLCD();
PrintSetLCD(0,0,"Geschwindigkeit");
SetCursorLCD(0, 1);
zaehler = zaehler +1;
PrintIntLCD(speed);
}
zaehler = zaehler +1;
}
}
else if (keys & LCD_KEY_RED ) //roter Taster
{ //wechseln von der Geschwindigkeiseinstellung
i = 0; //in den Messbetrieb
}
else if (keys & LCD_KEY_BLUE ) //Blauer Taster
{
while ( zaehler == 0)
{
if(speed >0)
{
speed = speed -10; //Geschwindigkeit vermindern
ClearLCD();
PrintSetLCD(0,0,"Geschwindigkeit");
SetCursorLCD(0, 1);
PrintIntLCD(speed);
zaehler = zaehler +1;
}
zaehler = zaehler +1;
}
}
if(!keys) // für das einmalige hochzählen beim drücken eines knopfes
{
Msleep(100);
zaehler = 0;
}
}
o--;
}
//Hauptprogramm
int main(void)
{
//Geschwindigkeit
//void int speed = 100;
int speed = 100;
Init();
InitI2C();
InitLCD();
GREEN_LED_ON;
while(o > 0)
{
PrintSetLCD(0,0,"Geschwindigkeit");
SetCursorLCD(0, 1);
PrintIntLCD(speed);
start(speed);
}
MotorDir(FWD,FWD);
MotorSpeed(speed,speed);
return 0;
}
Was mir als Wichtigstes erscheint: Eigentlich dürftest du nur einmal eine Ausgabe von speed erhalten, denn nach dem ersten Aufruf von start() wird o (sehr schlechter Variablenname!) zu 0 und das Programm verläßt nach MotorSpeed(); den asuro (und verschwindet im Nirwana!):
PHP-Code:
while(o > 0)
{
...
PrintIntLCD(speed);
start(speed);
}
MotorDir(FWD,FWD);
MotorSpeed(speed,speed);
return 0;
}
Zur besseren Übersichtlichkeit würde ich die if/else-Verschachtelungen in Start() durch switch/case ersetzen. Dann würde ich das Hauptprogramm in eine Endlosschleife packen und dann einen neuen Versuch starten.
"Würde", denn ohne LCD mit seiner Lib und der I2C-Lib kann ich nun überhaupt nichts mehr selbst testen, ich kann's nun nicht mal mehr übersetzen. :(
Aber egal, mach mal weiter.
Gruß
mic
Edit: Anstelle von while(o > 0) ein while(1) wäre ein schneller Test für die start()-Funktion ohne Motorbewegung. ;)
Lesezeichen