Forum: Mikrocontroller und Digitale Elektronik Stringverarbeitung mit Fleury Lib


von Thomas (Gast)


Lesenswert?

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
}

von Peter II (Gast)


Lesenswert?

eventuell mal noch ein \n nachsenden.

von Tabtöter (Gast)


Lesenswert?

Thomas schrieb:
> if(input[0]=='c'){    //Android app sendet ein c um den Beginn von
> RGB Werten anzukündigen
>
>         PORTB ^= (1<<PB5);  //LED togglen wenn ein c empfangen wird
>
>         for(int i=0; i<3; i++){
>         red[i]=input[i+1];  }
>         red[3]='\0';  }

Bei solch einer Klammerung wird es einem schwindelig und
übel. Wenn das so chaotisch ist dann können die Gedanken
im Kopf nicht klarer sein ....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.