Go Down

Topic: Probleme mit Morsecodegenerator (Read 1 time) previous topic - next topic

Atalanttore

Jun 25, 2011, 02:02 pm Last Edit: Jun 26, 2011, 12:33 am by Atalanttore Reason: 1
Hi

Ich bastel mir gerade einen einfachen Morsecodegenerater in Arduino.
Da das Morsealphabet keine Groß- oder Kleinschreibung kennt, wollte ich vorher alle eingegebenen Buchstaben mit der Funktion toLowerCase() in Kleinbuchstaben umwandeln lassen und anschließend jedem Buchstaben mit einer switch-case-Anweisung das passende Morsecodezeichen zuweisen.

Mit der toLowerCase()-Funktion komme ich aber überhaupt nicht zurecht. So wie ich das Beispiel verstanden habe, habe ich folgende Anweisung zusammengebastelt:
Code: [Select]
lowerCaseLetter = incomingByte.toLowerCase();
Diese scheint aber vollkommen falsch zu sein, da die Syntax meiner Anweisung von der Arduino IDE nicht mal hervorgehoben wird.

Wie gehts richtig?


Gruß
Atalanttore

Udo Klein

Check out my experiments http://blog.blinkenlight.net

Atalanttore

So habe ich es auch versucht, aber irgendwie funktioniert das bei mir nicht.

Udo Klein

Vieleicht zeigst Du uns auch noch den Rest Deines Codes? Was für einen Typ hat incomingByte und was machst Du noch so damit? Woher weisst Du, daß das nicht funktioniert?

Davon abgesehen würde ich die Morsezeichen nicht per Switch auseinandersteuern. Ich würde einfach ein Stringarray nehmen und das Zeichen (abzüglich Offset) als Index. Damit dabei der Speicher noch reicht wird man das wohl mit "progmem" Makros verzieren müssen. Cases wären mir für sowas aber zu nervig.
Check out my experiments http://blog.blinkenlight.net

uwefed

Als Alternative:
Die Großbuchstaben A-Z sind von 65 bis 90 dezimal und die Kleinbuchstaben a-z von 97 bis 122

Einfach Daten in eine byte-Variable einlesen und kontrollieren ob die eingehenden Zahlen zwischen 65 und 90 sind und dann 32 dezimal addieren.

Du kannst auch im switch schreiben:
...
case "a"
case "A"
morsekode umwandeln
break();
case...

Einfacher ist es Du definierst ein Array und indizierst es mit den Buchstaben

Beispiel dem Morsekode wurde eine führende 1 hinzugefügt um die Länge des Codes zu bestimmen. Eine 1 bedeutet langes Signal, eine 0 ein kurzes. Also 0000 0101 bedeutet kurz - lang
morse[0] = b 0000 0101 // A
morse[1] = b 0001 1000 // B
morse[3] = b 0001 1010 //C
...
dann einfach vom Buchstaben 65 bzw 97 subtrahieren und als index des Arrays verwenden.
Das ist die schnellste und platzsparenste Implementierung.

[Edit] jetzt war Udo schneller.

Grüße Uwe

Go Up