Forum: Mikrocontroller und Digitale Elektronik Arduino Anfänger braucht Starthilfe


von Mario G. (mariodo3)


Lesenswert?

Hallo,

Das ist mein erstes Post hier in diesem Forum. Ich hoffe mir kann hier 
jemand helfen. Im Arduino Forum komme ich leider nicht weiter oder man 
kann mir bei meinem Problem nicht helfen. Ich habe den Arduino Uno mit 
einem 2x16 Display gekauft. Ich möchte das Board gern dazu verwenden 
sogenannte $GPWPL-Daten aus einem APRS Tracker zu lesen. APRS ist eine 
Amateurfunkanwendung und erlaubt das verfolgen eines gefahrenen Weges 
mittels APRS. Diese Daten kann man sich auf aprs.fi ansehen. Der Tracker 
liefert Daten im $GPWPL Format die wie folgt aussehen.
$GPWPL,5029.19,N,00916.55,E,DB0WOF-10*6A Das ist allerdings nur ein 
Beispiel. Man kann theoretisch daraus die Position der empfangenen 
Station herauslesen und deren Rufzeichen. Für mich relevant ist 
allerdings im moment nur das Rufzeichen. Dieses kann mal mit Zahlen 
hinter dem Rufzeichen sein und auch ohne. Ich habe nun versucht mit dem 
Uno was zu machen aber ich komme nicht voran da ich leider wirklich von 
dessen Programmierung nichts verstehe. Ich möchte die Dinger aber 
verstehn lernen und hoffe nun hier als letzten Versuch auf Hilfe.
Ich hab praktisch ein Beispiel aus der Arduino Software genommen um die 
seriellen Daten einzulesen. Das ging auch, zumindest zeigt das Display 
$GPWPL.... Allerdings nicht das Rufzeichen. Ich müsste nun irgendwie die 
Daten speichern und dann wieder auslesen und anzeigen... nur wie.? Ich 
kann gut mit dem Lötkolben umgehen aber programmieren ist ein Buch mit 7 
Siegeln. Villeicht könnte mich jeamnd auf den rechten Weg bringen.
Anbei mal noch der Code den ich angefangen hab zu fummeln. Leider macht 
er natürlich nicht alles..
Den Code schreiben habe ich mit der Arduino Software versucht,

Lg Mario

Hier nun der Kauderwelsch den ich versucht habe, ja ich weiß das da wohl 
auch Mist bei ist :-)

#include <LiquidCrystal.h>


// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

void setup(){
    // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // initialize the serial communications:
  Serial.begin(4800);
  char input[40];
  char current;
  int incount = 0;
  bool lineComplete = false;
}

void loop()
{
  // when characters arrive over the serial port...
  if (Serial.available()) {
    // wait a bit for the entire message to arrive
    delay(100);
    // clear the screen
    lcd.clear();
    // read all the available characters
    while (Serial.available() > 0) {
      // display each character to the LCD
      lcd.write(Serial.read());
    }
  }
}

Nicht hauen, ich weiß wirklich nicht so recht weiter. Villeicht kann mir 
jemand auch ein gutes Buch zum Lernen empfehlen.

von Tom M. (Gast)


Lesenswert?

Mario G. schrieb:
> Das ging auch, zumindest zeigt das Display
> $GPWPL.... Allerdings nicht das Rufzeichen.

In der loop() Funktion gibst du alles, was auf der seriellen Leitung 
reinkommt, auf das LCD aus. Das lässt mich vermuten, dass du das 
Rufzeichen eben nicht empfängst.

Mario G. schrieb:
> Ich müsste nun irgendwie die
> Daten speichern und dann wieder auslesen und anzeigen... nur wie.?

Indem du Variablen benutzt (und die richten Datentypen und Operationen). 
Da hilft dir ein Tutorial zu C/C++ bzw. zu Arduino.

Hast du die Tutorials schon durchgeackert?
http://arduino.cc/en/Tutorial/HomePage

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Vergiss mal den ganzen Arduino Quatsch, da lernt man nix bei ;)
Kauf dirn C Buch und les das durch, danach lieste hier das AVR-GCC Tut 
und dann gehts los.

von Mario G. (mariodo3)


Lesenswert?

Hallo,

Na ich seh schon, das werd ich wohl so schnell nicht verstehen. Wird 
zwar nicht einfach, aber mir bleibt wohl nichts übrig als mich dort 
alleine durchzufuxxen.

Danke
Mario

von Karl-heinz W. (heinzel)


Lesenswert?

Hallo Mario,

eigentlich ganz einfach:

Zum Üben ist der Weg schon richtig, erstmal alle Zeichen die über die 
Schnittstelle reinkommen auf dem Display auszugeben um zu sehen ob man 
einen vollständigen String empfängt.

Im nächsten Schritt dann alle Zeichen zwischen '$' und CR/LF (das 
übliche Ende dieser Zeichenketten) in ein Array reinschreiben.

Dann die gespeicherte Zeichenkette zerlegen (das ',' ist der 
Feldtrenner).

Dann das gewünschte Feld ausgeben.

Allerdingst solltest du dich intensiv mit der Zeichenverarbeitung unter 
C bzw. Arduino auseinandersetzen.

Gruß
Heinzel

von Mario G. (mariodo3)


Lesenswert?

Hallo Heinzel

Danke für Deine Antwort. Na dann komme ich doch wenigstens mal zu was. 
Ich hab im moment irgendwie das Problem das ich zwar was im Display sehe 
aber eben nicht den kompletten String. Ich denke das er einfach zu lang 
ist um auf ein 2 Zeiliges Display zu passen. Es sind ja nur 2x 16 
Zeichen. Das Buch zum Arduino habe ich jedenfalls erst einmal bestellt. 
Für mich sind die Dinger völliges Neuland. Mit meinen Ü 40 begreift man 
auch manches nicht mehr so schnell, bin ich doch noch mit herkömmlichen 
Bauteilen groß geworden. Allerdings haben mich einige Internetseiten 
dazu animiert mal so ein Board zu kaufen und mit ihm was zu machen.
Ich melde mich nochmals wenn ich mein Buch bekommen habe. Ich bin mir 
eigentlich sicher das ich mit der Hilfe des Buches einiges besser 
verstehe.

Lg

von A.H. (Gast)


Lesenswert?

Neben dem Problem, dass du eine Nachricht mit mehr als 16 Zeichen 
selbst auf zwei Zeilen aufteilen musst, gibt es  evtl. noch ein 
Problem:

Während du mit
1
delay(100);
 auf die komplette Nachricht wartest, trudeln die Zeichen zwar ein und 
werden automatisch in einen Zwischenspeicher geschrieben. Wenn der aber 
zu klein ist, gehen auch Zeichen verloren. D.h. du musst eventuell 
weniger warten und dafür mit Teilnachrichten umgehen können.

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.