Ich habe das Herauskommen der neuen lib 2.7.1 zum Anlass und Übung genommen um damit Henks Programm mal als Quellcode nach zu vollziehen.
Code:
#include "asuro.h"
#define MAX 50
#define SPEED 10*reg[0]
#define DIST 10*reg[1]
void readLine(char *cmd, int max) {
unsigned char len=0;
char data;
while(len<max-1) {
SerRead(&data, 1, 0);
switch (data){
case 'k': // end of command sequence but first wait for any asuro key (change)
StatusLED(YELLOW);
PollSwitch();
max=PollSwitch();
while (PollSwitch()==max); // LOOP
// FALL THRU
case 'x': // end of command sequence
cmd[len++]=data;
max=len;
break;
case 'q': // kills the entire input buffer
StatusLED(RED);
len=0;
break;
default:
cmd[len++]=data;
break;
}
}
cmd[len]=0;
StatusLED(GREEN);
}
void turtle(void) {
int reg[]={10, 20};
unsigned char i, r=0;
char cmd[MAX];
EncoderInit();
while(1) {
readLine(cmd, MAX);
for(i=0; cmd[i]; i++) {
switch(cmd[i]) {
case 's': r=0; reg[0]=0; break;
case 'd': r=1; reg[1]=0; break;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
reg[r]=10*reg[r]+cmd[i]-'0';
break;
case 'l': Turn( -90, SPEED); break;
case 'r': Turn( 90, SPEED); break;
case 'L': Turn( -45, SPEED); break;
case 'R': Turn( 45, SPEED); break;
case 'e': Turn(-180, SPEED); break;
case 'i': Turn( 180, SPEED); break;
case 'f': Go( DIST, SPEED); break;
case 'b': Go(-DIST, SPEED); break;
}
}
}
}
int main(void) {
Init();
turtle();
return 0;
}
Ich hoffe, ich habe es damit im Wesentlichen getroffen Henk?
Lesezeichen