Hans Z
08.01.2007, 23:36
Hallo,
ich habe ein kleines Programm – eigentlich ursprünglich als Funktion – geschrieben, welches mit dem Asuro kommunizieren soll. Leider kann man nur einmal unter den Punkten 1 bis 7 Daten eingeben. Wenn man z.B. dann wieder eine 2 für dMotGTol eingibt, dann kommt man nicht mehr zur Eingaberoutine, sondern das Menü läuft wieder durch. Irgend etwas ist falsch…
Kann mir einer weiterhelfen?
Grüße, Hans
#include "asuro.h"
int main(unsigned int *PCDaten)
{
unsigned char cmd, cmd2;
unsigned int tmpDaten[8];
int i;
Init();
for(i=0;i <= 6; i++)
{ StatusLED(RED);
Msleep (50);
StatusLED(GREEN);
Msleep (50);
tmpDaten[i] = PCDaten[i];
}
cmd = cmd2 = 255;
while ((cmd != 'q') && (cmd != 's')) // ************************************** !!!!!!!!!!!!!!!!!
{
SerWrite("\n\r PC-Menue",17);
SerWrite("\n\r ====================== ",26);
SerWrite("\n\r SollMotGeschw.........1: ",28); PrintInt(tmpDaten[0]);
SerWrite("\n\r dMotGTol..............2: ",28); PrintInt(tmpDaten[1]);
SerWrite("\n\r MotGeschStep..........3: ",28); PrintInt(tmpDaten[2]);
SerWrite("\n\r StartWeg..............4: ",28); PrintInt(tmpDaten[3]);
SerWrite("\n\r dWegZul...............5: ",28); PrintInt(tmpDaten[4]);
SerWrite("\n\r RegelintZeit..........6: ",28); PrintInt(tmpDaten[5]);
SerWrite("\n\r ZuFahrendeStrecke.....7: ",28); PrintInt(tmpDaten[6]);
SerWrite("\n\r Quit ohne speichern...q ",28);
SerWrite("\n\r Ende mit speichern....s ",28);
SerWrite("\n\r Eingabe ---> ",28);
cmd = 255;
SerRead(&cmd,1,0); // Daten einlesen
switch (cmd)
{
case '1':
while (cmd2 != 's')
{
SerWrite("\n\r SollMotGeschw (",18); PrintInt(tmpDaten[0]);
SerWrite(") --->: ",8);
cmd2 = 255;
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[0] = tmpDaten[0] + 10;
break;
case '2': tmpDaten[0] = tmpDaten[0] - 10;
break;
}
}
break;
case '2':
while (cmd2 != 's')
{
SerWrite("\n\r dMotGTol (",13); PrintInt(tmpDaten[1]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[1]++;
break;
case '2': tmpDaten[1]--;
break;
}
}
break;
case '3':
while (cmd2 != 's')
{
SerWrite("\n\r MotGeschStep (",16); PrintInt(tmpDaten[2]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[2]++;
break;
case '2': tmpDaten[2]--;
break;
}
}
break;
case '4':
while (cmd2 != 's')
{
SerWrite("\n\r StartWeg (",13); PrintInt(tmpDaten[3]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[3]++;
break;
case '2': tmpDaten[3]--;
break;
}
}
break;
case '5':
while (cmd2 != 's')
{
SerWrite("\n\r dWegZul (",12); PrintInt(tmpDaten[4]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[4]++;
break;
case '2': tmpDaten[4]--;
break;
}
}
break;
case '6':
while (cmd2 != 's')
{
SerWrite("\n\r RegelintZeit (",17); PrintInt(tmpDaten[5]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[5] = tmpDaten[5] + 10;
break;
case '2': tmpDaten[5] = tmpDaten[5] - 10;
break;
}
}
break;
case '7':
while (cmd2 != 's')
{
SerWrite("\n\r ZuFahrendeStrecke (",22); PrintInt(tmpDaten[6]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[6] = tmpDaten[6] +100;
break;
case '2': tmpDaten[6] = tmpDaten[6] -100;
break;
}
}
break;
//default: SerWrite("\n\r Eingabe unzulaessig.",24);;
} // End SWITCH
} // End WHILE
if (cmd == 's') // Werte speichern
{ SerWrite("\n\r Asuro speichert die Daten...",31);
for(i=0;i <= 6; i++)
{
PCDaten[i] = tmpDaten[i];
StatusLED(GREEN);
Msleep (100);
StatusLED(OFF);
Msleep (100);
}
StatusLED(GREEN);
}
SerWrite("\n\r",2);
while(1);
}
ich habe ein kleines Programm – eigentlich ursprünglich als Funktion – geschrieben, welches mit dem Asuro kommunizieren soll. Leider kann man nur einmal unter den Punkten 1 bis 7 Daten eingeben. Wenn man z.B. dann wieder eine 2 für dMotGTol eingibt, dann kommt man nicht mehr zur Eingaberoutine, sondern das Menü läuft wieder durch. Irgend etwas ist falsch…
Kann mir einer weiterhelfen?
Grüße, Hans
#include "asuro.h"
int main(unsigned int *PCDaten)
{
unsigned char cmd, cmd2;
unsigned int tmpDaten[8];
int i;
Init();
for(i=0;i <= 6; i++)
{ StatusLED(RED);
Msleep (50);
StatusLED(GREEN);
Msleep (50);
tmpDaten[i] = PCDaten[i];
}
cmd = cmd2 = 255;
while ((cmd != 'q') && (cmd != 's')) // ************************************** !!!!!!!!!!!!!!!!!
{
SerWrite("\n\r PC-Menue",17);
SerWrite("\n\r ====================== ",26);
SerWrite("\n\r SollMotGeschw.........1: ",28); PrintInt(tmpDaten[0]);
SerWrite("\n\r dMotGTol..............2: ",28); PrintInt(tmpDaten[1]);
SerWrite("\n\r MotGeschStep..........3: ",28); PrintInt(tmpDaten[2]);
SerWrite("\n\r StartWeg..............4: ",28); PrintInt(tmpDaten[3]);
SerWrite("\n\r dWegZul...............5: ",28); PrintInt(tmpDaten[4]);
SerWrite("\n\r RegelintZeit..........6: ",28); PrintInt(tmpDaten[5]);
SerWrite("\n\r ZuFahrendeStrecke.....7: ",28); PrintInt(tmpDaten[6]);
SerWrite("\n\r Quit ohne speichern...q ",28);
SerWrite("\n\r Ende mit speichern....s ",28);
SerWrite("\n\r Eingabe ---> ",28);
cmd = 255;
SerRead(&cmd,1,0); // Daten einlesen
switch (cmd)
{
case '1':
while (cmd2 != 's')
{
SerWrite("\n\r SollMotGeschw (",18); PrintInt(tmpDaten[0]);
SerWrite(") --->: ",8);
cmd2 = 255;
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[0] = tmpDaten[0] + 10;
break;
case '2': tmpDaten[0] = tmpDaten[0] - 10;
break;
}
}
break;
case '2':
while (cmd2 != 's')
{
SerWrite("\n\r dMotGTol (",13); PrintInt(tmpDaten[1]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[1]++;
break;
case '2': tmpDaten[1]--;
break;
}
}
break;
case '3':
while (cmd2 != 's')
{
SerWrite("\n\r MotGeschStep (",16); PrintInt(tmpDaten[2]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[2]++;
break;
case '2': tmpDaten[2]--;
break;
}
}
break;
case '4':
while (cmd2 != 's')
{
SerWrite("\n\r StartWeg (",13); PrintInt(tmpDaten[3]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[3]++;
break;
case '2': tmpDaten[3]--;
break;
}
}
break;
case '5':
while (cmd2 != 's')
{
SerWrite("\n\r dWegZul (",12); PrintInt(tmpDaten[4]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[4]++;
break;
case '2': tmpDaten[4]--;
break;
}
}
break;
case '6':
while (cmd2 != 's')
{
SerWrite("\n\r RegelintZeit (",17); PrintInt(tmpDaten[5]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[5] = tmpDaten[5] + 10;
break;
case '2': tmpDaten[5] = tmpDaten[5] - 10;
break;
}
}
break;
case '7':
while (cmd2 != 's')
{
SerWrite("\n\r ZuFahrendeStrecke (",22); PrintInt(tmpDaten[6]);
SerWrite(") --->: ",8);
SerRead(&cmd2,1,0); // Daten einlesen
switch (cmd2)
{
case '8': tmpDaten[6] = tmpDaten[6] +100;
break;
case '2': tmpDaten[6] = tmpDaten[6] -100;
break;
}
}
break;
//default: SerWrite("\n\r Eingabe unzulaessig.",24);;
} // End SWITCH
} // End WHILE
if (cmd == 's') // Werte speichern
{ SerWrite("\n\r Asuro speichert die Daten...",31);
for(i=0;i <= 6; i++)
{
PCDaten[i] = tmpDaten[i];
StatusLED(GREEN);
Msleep (100);
StatusLED(OFF);
Msleep (100);
}
StatusLED(GREEN);
}
SerWrite("\n\r",2);
while(1);
}