Hallo Leute,
in meiner Verzweiflung wende ich mich wieder mal an euch und hoffe ihr
könnt mir helfen.
Das Endziel ist es, per UART RGB Werte zu empfangen und die dann per PWM
zu verwenden. Momentan möchte ich einmal den Wert einer Farbe empfangen
und weiterverarbeiten.
Entscheidend was mit dem String passiert soll die erste Stelle sein, ich
kontrolliere also ob diese ein 'c' ist. Falls ja, so wird eine LED an
Pin B5 getoggelt und es sollen die nächsten 3 Stellen in einem String
zwischengespeichert und anschließend an den PC zurückgesendet werden.
Wenn ich nun zB c125 per PC an den uC schicke, wird zwar die LED
getoggelt aber ich bekomme keine Rückmeldung an den PC.
Wäre top wenn mir mal wieder jemand meinen Fehler aufzeigen könnte.
1 | #include <stdlib.h>
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <avr/pgmspace.h>
|
5 |
|
6 | #include "uart.h"
|
7 |
|
8 | #define F_CPU 16000000UL
|
9 | /* 9600 baud */
|
10 | #define UART_BAUD_RATE 9600UL
|
11 |
|
12 | void uart_gets(uint8_t readVar, char* Buffer, uint8_t MaxLen )
|
13 | {
|
14 | uint8_t NextChar;
|
15 | uint8_t StringLen = 0;
|
16 |
|
17 | NextChar = readVar; // Warte auf und empfange das nächste Zeichen
|
18 |
|
19 | // Sammle solange Zeichen, bis:
|
20 | // * entweder das String Ende Zeichen kam
|
21 | // * oder das aufnehmende Array voll ist
|
22 | while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
|
23 | *Buffer++ = NextChar;
|
24 | StringLen++;
|
25 | NextChar = uart_getc();
|
26 | }
|
27 |
|
28 | // Noch ein '\0' anhängen um einen Standard C-String daraus zu machen
|
29 | *Buffer = '\0';
|
30 | }
|
31 |
|
32 | int main(void)
|
33 | {
|
34 | DDRB=(1<<PB5);
|
35 | PORTB=(1<<PB5);
|
36 |
|
37 |
|
38 | unsigned int d;
|
39 | char input[5];
|
40 | char red[4];
|
41 | uint8_t out;
|
42 |
|
43 |
|
44 | uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
|
45 | sei();
|
46 |
|
47 | uart_puts("Input value");
|
48 | uart_putc('\n');
|
49 |
|
50 |
|
51 | while(1)
|
52 | {
|
53 | d = uart_getc();
|
54 |
|
55 | if ( d & UART_NO_DATA )
|
56 | {
|
57 | /*
|
58 | * no data available from UART
|
59 | */
|
60 | }
|
61 | else
|
62 | {
|
63 | uart_gets(d, input, sizeof(input)) ;
|
64 |
|
65 | if(input[0]=='c'){ //Android app sendet ein c um den Beginn von RGB Werten anzukündigen
|
66 |
|
67 | PORTB ^= (1<<PB5); //LED togglen wenn ein c empfangen wird
|
68 |
|
69 | for(int i=0; i<3; i++){
|
70 | red[i]=input[i+1]; }
|
71 | red[3]='\0'; }
|
72 |
|
73 | uart_puts(red);
|
74 | }
|
75 | }
|
76 | }
|