String einlesen und ausgeben (Fleury, mega64)

Gast #2053612
Lesenswert?
• ▲
▼
Hallo!

Ich möchte mit meinem Ultraschallsenor die Entfernung messen und 
anschließend auf mein Touchscreen (DG16080) ausgeben.

Das klappte mit einem mega32 und einer anderen uart-bibliothek bereits, 
doch mit dem neuen µC bin ich auch die Fleury library umgestiegen und 
jetzt mags nichtmehr :)

Der Sensor funktioniert ganz einfach.

"Der Sensor sendet immer 9 ASCII-Bytes. Jede Sendung beginnt mit den 
ASCII Steuercodes 0x0d (LF) und 0x0a (CR). Dann folgen die 5 ASCII-Bytes 
mit den Daten und am Ende der Übertragung kommen noch einmal 0x0d (LF) 
und 0x0a (CR)."

Ein Beispiel für die Ausgabe wäre dann:

„12000“ Sensor 1 soll die Entfernung messen und ausgeben
Ausgabe 1, leer, 1, 0, 7 107cm

Also ich sende ihm den String "12000" und er liefert dann eben den Wert 
zurück. Soweit sogut. Hier mal die Sende und Empfangsfunktion:
1
void Supersonic(void)  //ultrasonic distance measuring
2
{
3
//Senden
4
  uart1_puts("12000");
5
  
6
//Empfangen & Auswerten
7
  received=uart1_getc();
8
  while (i<=9)//Solange Empfangen bis die 9 Bytes angekommen sind
9
  { 
10
      rec[i++]=received; 
11
      received=uart1_getc();
12
  }  
13
  
14
  wert=(rec[5]-'0')*10+(rec[6]-'0')+((rec[4]!=0x20)?(rec[4]-'0'):0)*100;  // Empfangene Daten in Entfernung umrechnen
15

16
  char Buffer[20],f;
17

18
  itoa(wert,Buffer,10);
19
  f=g_draw_string(0,60,Buffer);
20
  g_draw_char(f,60,' ');
21
    
22
}

Das Problem ist, dass ich bei der Ausgabe immer -5328 als Entfernung 
angezeigt bekommen.
Ich hab versucht einzelne Zeichen auszugeben, jedoch bekam ich da immer 
nur [ auf dem Display angezeigt.
#2054017
Lesenswert?
• ▲
▼
Das uart getc vom Peter FLeury ist ein nicht wartendes getc.
Wenn noch kein Zeichen an der UART empfangen wurde, dann kommt die 
Funktion trotzdem zurück und meldet pflichtbewusst: keine Daten 
vorhanden.

 received=uart1_getc();

Du musst daher im received nachsehen, ob da überhaupt ein Zeichen 
empfangen wurde.
Im Demo-Beispiel, welches Peter mit ausliefert ist das alles sehr schön 
ausgeführt, wie man den Return-Wert seiner getc Funktion auswertet.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.