Forum: Mikrocontroller und Digitale Elektronik Stringverarbeitung mit Fleury Lib


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Thomas (Gast)


Bewertung
0 lesenswert
nicht 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.

#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

#include "uart.h"

#define F_CPU 16000000UL
/* 9600 baud */
#define UART_BAUD_RATE      9600UL      

void uart_gets(uint8_t readVar, char* Buffer, uint8_t MaxLen )
{
  uint8_t NextChar;
  uint8_t StringLen = 0;
  
  NextChar = readVar;         // Warte auf und empfange das nächste Zeichen
  
  // Sammle solange Zeichen, bis:
  // * entweder das String Ende Zeichen kam
  // * oder das aufnehmende Array voll ist
  while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
    *Buffer++ = NextChar;
    StringLen++;
    NextChar = uart_getc();
  }
  
  // Noch ein '\0' anhängen um einen Standard C-String daraus zu machen
  *Buffer = '\0';
}

int main(void)
{
    DDRB=(1<<PB5);
  PORTB=(1<<PB5);
  
  
  unsigned int d;
  char input[5];
  char red[4];
  uint8_t out;


    uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
    sei();
  
  uart_puts("Input value");
  uart_putc('\n');

  
    while(1)
    {
        d = uart_getc();
    
        if ( d & UART_NO_DATA )
        {
            /* 
             * no data available from UART 
             */
        }
        else
        {
      uart_gets(d, input, sizeof(input))  ;
              
      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';  }
        
      uart_puts(red);
    }
    }  
}

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
eventuell mal noch ein \n nachsenden.

von Tabtöter (Gast)


Bewertung
0 lesenswert
nicht 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 ....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.