Hallo, ich möchte über die Serielle Schnittstelle bestimmte Sachen steuern. Dazu schicken ich Zeichen über Putty an den AVR. Die gesendeten Zeichen sind von 0 bis 4097. Jeweils 255 Werte gehören zu einem Befehl.
1 | void read_commands(void) |
2 | {
|
3 | if(uart_str_complete) |
4 | {
|
5 | uart_str_complete = 0; |
6 | |
7 | int16_t incoming = atoi(uart_string); |
8 | uint8_t command = incoming / 255; |
9 | uint8_t value = incoming % 255; |
10 | uart_puti(incoming); |
11 | uart_puts(uart_string); |
12 | |
13 | uart_puts_P("\r\nBefehl : "); |
14 | uart_puti_formatted(command); |
15 | |
16 | uart_puts_P("\tWert : "); |
17 | uart_puti_formatted(value); |
18 | |
19 | uart_puts_P("\r\n"); |
20 | }
|
21 | }
|
1 | ISR(USART0_RX_vect) |
2 | {
|
3 | unsigned char nextChar; |
4 | // Daten aus dem Puffer lesen
|
5 | nextChar = UDR0; |
6 | |
7 | // wenn uart_string gerade in Verwendung ist, neues Zeichen verwerfen
|
8 | if( uart_str_complete == 0 ) { |
9 | |
10 | // Daten werden erst in uart_string geschrieben, wenn nicht String-Ende/max Zeichenlänge erreicht ist/string gerade verarbeitet wird
|
11 | if( nextChar != '\n' && nextChar != '\r' && uart_str_count < UART_MAXSTRLEN ) |
12 | {
|
13 | uart_string[uart_str_count] = nextChar; |
14 | uart_str_count++; |
15 | }
|
16 | else { |
17 | uart_string[uart_str_count] = '\0'; |
18 | uart_str_count = 0; |
19 | uart_str_complete = 1; |
20 | }
|
21 | }
|
22 | }
|
Mein Output sieht auf der Konsole aber nicht komplett richtig aus, ich habe der Reihe nach folgende Werte eingegeben und mit Enter bestätigt. 15, 255, 256,
1 | 05
|
2 | Befehl : 0 Wert : 0 |
3 | 0▒55 |
4 | Befehl : 0 Wert : 0 |
5 | 0"56 |
6 | Befehl : 0 Wert : 0
|