Forum: Mikrocontroller und Digitale Elektronik String einlesen und ausgeben (Fleury, mega64)


von pauerpaul123 (Gast)


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.

von Karl H. (kbuchegg)


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.

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.