ja ok hab ich sofort entfernt^^
doch weswegen hat er unten denn immernoch speed = 100 obwohl ich den wert oben durch tastereingabe verändert habe?
Werbung
ja ok hab ich sofort entfernt^^
doch weswegen hat er unten denn immernoch speed = 100 obwohl ich den wert oben durch tastereingabe verändert habe?
Geändert von Hermann Wessel (31.03.2011 um 16:22 Uhr) Grund: rechtschreibung^^
emm wie gesagt ich hab das ja mit dem lcd-display programmiert und dieser besitzt 3 taster
und dann hab ich halt ne funktion geschrieben, die von der main aufgerufen wird, die dann bei tasterdrücken die vaiable speed 10 höher oder niedriger setzt
aber der wert bleibt in der funktion und geht nich mit rüber ins hauptporgramm
glasskügel?
Einer Magische Glasskügel:
Externes Bild anzeigen
Na ja, dass das LCD-display Taster hat ist mir schon bekannt. Aber in welcher Folge sind sie an geprellt.
Hallo
Hier zuerst mal dein etwas umformatierter Code:
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:#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;
}
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.PHP-Code:while(o > 0)
{
...
PrintIntLCD(speed);
start(speed);
}
MotorDir(FWD,FWD);
MotorSpeed(speed,speed);
return 0;
}
"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. ;)
Geändert von radbruch (31.03.2011 um 19:56 Uhr)
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
hm ich glaube wir reden an einander vorbei![]()
![]()
in dem programm gebe ich ja die variable speed zur funktion start und dort kann ich das ja mithilfe der taster rauf oder runter setzen
das problem ist lediglich das er den wert speed nicht wieder zur main gibt, sondern nur mit dem definierten wert 100 nimmt.
im internet habe ich gelesen das (int &speed) helfen sollte funktioniert aber nicht.
das ist garnicht das fertige programm doch das problem ist mir beim schreiben des programmes aufgefallen das das nich funktioniert.
bei bedarf kann ich hier das fertige programm poste
mfg
Hermann
Upps, du hast recht, wir reden aneinander vorbei. Versuche es mal so:
void start()
{
....
start() sollte dann die Variable speed von main() übenehmen. Wenn's dann immer noch nicht funzt:
//Hauptprogramm
int speed = 100;
int main(void)
{
Init();
...
So ist speed auf jeden Fall global
Oder start() als Funktion mit Rückgabewert:
int start(int speed)
{
...
}
o--;
return(speed);
}
und Aufruf mit Zuweisung:
...
PrintIntLCD(speed);
speed = start(speed);
}
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen