-
so
tut mir echt leid für die verspätete antwort hatte letzen tage bissl stress^^
das hier ist mein volles programm
ich gehe mal von aus das ihr das dann versteht was o auf sich hat
Code:
#include "stdlib.h"
#include "asuro.h"
#include "lcd.h"
#include "i2c.h"
int speed = 100;
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 < 350) //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--;
}
void berechnung(int zeit)
{
int keys;
int reifen = 120; //Reifenumfang in mm
int wegaenderung = 0;
int inszeit = 0;
int geschwindigkeit = 0;
int durchschnitt = 0;
int zaehler = 1 ;
while(1)
{
int odometrie = encoder[0];
wegaenderung = odometrie + reifen / 8 / 10;
inszeit = Gettime() /1000;
geschwindigkeit = wegaenderung / inszeit;
durchschnitt = wegaenderung / inszeit;
keys = PollSwitchLCD();
if(keys) // für das ständige aktuallisieren der Daten
{
zaehler = 0;
}
if ((keys & LCD_KEY_YELLOW) || (zaehler == 1) ) // Geschwindigkeit
{
ClearLCD();
PrintSetLCD(0,0,"CM pro S");
SetCursorLCD(0, 1);
PrintIntLCD(geschwindigkeit);
zaehler = 1;
}
else if ((keys & LCD_KEY_RED) || (zaehler == 2)) //Zurückgelegter Weg
{
ClearLCD();
PrintSetLCD(0,0,"Weg in CM");
SetCursorLCD(0, 1);
PrintIntLCD(wegaenderung);
zaehler = 2;
}
else if ((keys & LCD_KEY_BLUE) || (zaehler == 3)) // Durchschnittsgeschwindigkeit
{
ClearLCD();
PrintSetLCD(0,0,"CM pro S");
SetCursorLCD(0, 1);
PrintIntLCD(durchschnitt);
zaehler = 3;
}
Msleep(100);
}
}
//Hauptprogramm
int main(void)
{
//Geschwindigkeit
//void int speed = 100;
Init();
InitI2C();
InitLCD();
EncoderInit();
EncoderSet(780,790);
EncoderStart();
GREEN_LED_ON;
while(o > 0)
{
PrintSetLCD(0,0,"Geschwindigkeit");
SetCursorLCD(0, 1);
PrintIntLCD(speed);
start(speed);
}
MotorDir(FWD,FWD);
MotorSpeed(speed,speed);
int zeit = Gettime() / 1000; //zeit in Sekunden
ClearLCD();
PrintIntLCD(zeit);
berechnung(zeit);
}
das einzigste problem ist einfach das speed mit start zwar verändert werden kann aber nicht weiter übernommen wird
-
Wenn du die Funktion mit "void start(int speed)" definierst, wird beim Aufruf eine für diese Funktion lokale Variable "speed" erzeugt. Diese ist nicht identisch mit der beim Programmstart global definierten gleichnamigen Variablen. Wenn du aber mit "void start(void)" keine Parameterübergabe festlegst, verwendet start() die selbe Variable wie main(). Dann wird die Änderung an der globalen Variablen durchgeführt.
-
Oder mit Zeiger und Referenzen. Im Bericht 13 war er schon ganz in die nähe mit (int &speed) :
http://www.rn-wissen.de/index.php/C-...r.C3.BCbergabe
-
alles kla valen und radbruch mein programm funktioniert jetzt außer einigen macken die zwischendurch mal wieder auftreten, die aber nach dem neutstart wieder weg sind ^^
ok ich kann dieses forum nur weiterempfehlen
vielen dank
mfg Hermann (: