Hallo
also ich möchte einen Befehl empfangen, diesen dann auf Richtigkeit
prüfen und dadurch meinen Kanal ändern.
1 | int main()
|
2 | {
|
3 | char udata;
|
4 | char buffer[40];
|
5 | int8_t u;
|
6 |
|
7 | uart_init(); // init uart interface
|
8 | stdout_init(); // init stdout interface to use DEBUG_PRINT_P and DEBUG_PRINT
|
9 | ADC_Init();
|
10 | TIMER_Init();
|
11 | u=0;
|
12 | sei(); // Interrupts Global zulassen
|
13 |
|
14 | while(1)
|
15 | {
|
16 | udata=uart_getchar(); // empfangene Zeichen in udata speichern
|
17 | if(udata!=0xff) // Zeichen ungleich 0?
|
18 | {
|
19 |
|
20 | buffer[u]=udata; // udata in buffer schreiben
|
21 | u++; // Zähler
|
22 | if (udata=='\r') // Eingabe beendet
|
23 | {
|
24 | if(strncmp("<Kanal",buffer+(u-9),6)==0) // Eingabe prüfen
|
25 | {
|
26 | if(buffer[u-2]=='>') // Endzeichen
|
27 | {
|
28 | k=buffer[u-3]-'0'; // ASCII umwandeln
|
29 | k+=3;
|
30 | ADMUX = (ADMUX & ~(0x1f))|(k & 0x1F); // Kanal ändern
|
31 | }else
|
32 | {
|
33 | printf("Fehler! Falsches Endzeichen.");
|
34 | u=0;
|
35 | }
|
36 | }else
|
37 | {
|
38 | printf("Fehler! Falsche Eingabe.");
|
39 | u=0;
|
40 | }
|
41 | }
|
42 | if(u==33) // Zähler zuruecksetzen
|
43 | {
|
44 | u=0;
|
45 | }
|
46 |
|
47 | }
|
48 | }
|
49 | }
|
Das Problem ist nun das nach jeder 4ten Eingabe "Fehler! Falsche
Eingabe." kommt. Das bedeutet das der String falsch gelesen wird. Ich
weiß einfach nicht warum. Ich hat die Buffergröße von 32 auf 33 dann auf
40 geändert aber immer derselbe Fehler. Den Zähler zuruecksetzen habe
ich auch vorher und nachher probiert und immernoch falsch.
Irgendjemand eine Idee?
Gruß