Morse EnDecoder einzelne zahl senden

Hallo,
ich stehe auf gerade so ein bisschen auf dem Schlauch, ich benutze diese tolle Morse Libery um per Laser über große Entfernungen Text zu übertragen... klappt super...

http://code.google.com/p/morse-endecoder/

Jetzt komme ich aber nicht weiter beim umschreiben des Befehls...

Ziel ist es erstmal per Knopfdruck die Zahl 5 zu senden... (den Rest kann ich dann ableiten).

Über Serial senden kein Problem...

aber wie wandle ich den Code um, um diese zahl per Tastendruck zu senden?

Ich habe es schon abgeändert, allerdings sendet er erstmal nix ... erst wen ich irgendwas eintippe wird dann die 5 gesendet, aber in Endlosschleife...

Habe schon gegooglet und probiert, aber weiter komme ich nicht, ich werde erstmal schlafen gehen, vielleicht sehe ich nachher klarer :slight_smile:

Es gibt schon ein riesigen Unterschied zwischen Profi und Hobby Coder wie mich :wink:
Für Hilfe z.B. einen kleinen Codeschnipsel wäre ich sehr dankbar, ich vermute sehr stark, dass die Lösung ein Einzeiller ist...

Die Lib will chars wenn ich das richtig sehe. Das heißt du willst nicht 5 als Dezimalzahl, sondern als ASCII Zeichen. Dazu addierst du einfach '0', 0x30 oder 48 darauf. Siehe ASCII Tabelle:

'5' hat den Wert 53. Wenn du also 5 + '0' machst ist das 5 + 48 = 53 :slight_smile:

int zahl = 5;
char senden = zahl + '0';

Um längere Zahlen in Ziffern zu wandeln, kann mit wiederholt mit Modulo 10 die letzte Ziffer herausgreifen (Modulo = Rest der Division) und die Zahl durch 10 dividieren um die letzte Stelle abzuschneiden. Bis man 0 hat.

Alternativ könnte man hier auch die Zahl mit itoa() in einen String wandeln:
http://www.cplusplus.com/reference/cstdlib/itoa/
In C sind String char Arrays, also muss man dann nur noch über die einzelnen chars iterieren

mod 10 / div 10 spart aber Speicher und ist auch nicht mehr Tipp-Arbeit :slight_smile:

Hab jetzt nicht ganz verstanden was das Problem ist.
Ist das Problem daß Du die 5 endlos sendest?

Wenn ja dann benutze einen Statusvariable für den Taster

if (taster gedrückt && status == 0)
{
delay(10); // für entprellen
status =1;
sende "5";
}
if (taster losgelassen  && status == 1)
{
delay(10); // für entprellen
status =0;
}

Grüße Uwe

schuballaa:
Ich habe es schon abgeändert, allerdings sendet er erstmal nix ... erst wen ich irgendwas eintippe wird dann die 5 gesendet, aber in Endlosschleife...

Noch mal drüber gelesen und das hört sich für mich auch nach Tasterprellen an:

Auch hier schön gezeigt:

Am einfachsten kann man es so machen wo oben beschrieben. Einfach ein delay() mit ein paar ms nach dem Abfragen. Dann wird damit die Prellzeit übersprungen. Das wird für dich vollkommen reichen.

Wie man das nicht-blockierend macht ist hier erklärt:
http://arduino.cc/en/Tutorial/Debounce
Oder ganz ausführlich:

Aber wie gesagt hier wahrscheinlich nicht zwingend nötig

ah super :wink: ja lag am prellen :wink:

anfängerfehler :wink:

vielen dank für eure hilfe :wink: