Ich will meinem Sohn helfen allerdings habe ich keine Ahnung, wie dass
funktionieren soll kann mir jemand ein Programm erstellen.
Auftrag AIIT-uC07V1.0 – USART II
Aufgabenstellung
Grundaufgabe: mittels USART morsen
Grobziel dieser Aufgabe: Morsen von über die Tastatur eingegebenen
Zeichen.
Entwickle ein Programm, mit dem eine vom Benutzer eingegebene
Zeichenkette gemorst wird. Der Programmablauf und einige Details werden
folgendermaßen festgelegt:
• Der Benutzer wird über die serielle Schnittstelle im Terminal
aufgefordert eine Zeichenkette einzugeben.
◦ Die Zeichenkette darf Groß- & Kleinbuchstaben sowie Leerzeichen und
Ziffern enthalten. Andere Zeichen werden zwar entgegengenommen, aber
später (beim Morsen) ignoriert. ◦ Die vorzusehende Zeichenkettenlänge
berechnet sich individuell folgendermaßen: length = Klassenkatalognummer
+ 6
• Dann soll am Terminal der zu morsende Text angezeigt werden. Die
nicht morsbaren Zeichen werden nicht angezeigt.
• Dann wird die Anzahl der zu morsenden Zeichen am Terminal angegeben.
(Anzahl = ...)
• Dann wird ein Countdown angezeigt von 5 bis 0, der das Morsen
ankündigt. (Morsen beginnt in 5, 4, 3, 2, 1, go!
• Dann wird die Zeichenkette gemorst.
• Nach einer Sekunde Pause beginnt die Sequenz von neuem, der Benutzer
kann einen neuen Text eingeben.
Hinweise
• Wenn etwas in dieser Beschreibung nicht eindeutig festgelegt ist,
aber zur Problemlösung festgelegt werden sollte, dann legen Sie es fest.
Dokumentieren Sie getroffene Festlegungen samt Erläuterungen im
Kopfkommentar Ihres Quellcodes. Beispielsweise ist hier nicht festgelegt
◦ womit gemorst wird. Dazu gibt es verschiedene Möglichkeiten: Buzzer
(cool!), onboard LED (langweilig!), externe LED (ok...)
◦ woher die im Programm verwendeten Timings sind (wie lange ist ein
Punkt, eine Pause ein Strich); suche dazu im Internet eine "ordentliche"
Quelle
• Lass Dich von Deinen eigenen Ideen leiten! Du kannst gerne
Erweiterungen einbauen, z. B.
Könnte jedes Zeichen während es gemorst wird am Terminal angezeigt
werden.
Dokumentiere auch diese im Kopfkommentar.
maria schrieb:> Ich will meinem Sohn helfen allerdings habe ich keine Ahnung, wie dass> funktionieren soll
ich gehe mal davon aus, dass das so stimmt - ab und zu glaube ich auch
an das gute im menschen.
welchen teil hat der sohn denn schon umgesetzt/konzipiert und wo gibt es
probleme?
gibt es schon ein konzept?
welches wissen sollte vorhanden sein, in welchem zusammenhang steht die
aufgabe?
was sind die rahmenbedingungen für das projekt? (welche
plattform/controller, ...)
aber ohne eigenen input wird das hier nichts, fragen wie "bitte macht
mir meine hausübungen/praktikumsaufgaben/..." sind hier nicht gern
gesehen.
fragen zu details oder auch hilfe bei problemen gibt es sicher, aber
eben keine vollständigen aufgaben (sofern sie nicht so trivial sind,
dass sie nur durch die vollständige lösung beantwortet werden können wie
z.b. "hallo welt")
maria schrieb:> Ich will meinem Sohn helfen allerdings habe ich keine Ahnung, wie dass> funktionieren soll kann mir jemand ein Programm erstellen.
Dein Sohn sollte das können. Den kannst du ja mal fragen.
Oliver
Satzzeichen kann man übrigens auch mittig platzieren.
maria schrieb:> er weis nicht wie er anfangen soll.
"Divide et impera" ist beim Entwicklen ein sehr guter Ansatz. Der
Sohnemann soll das Große und Ganze in Teilprobleme zerlegen.
z.B.
- Verbindung zum Terminal aufbauen
- Senden einer Zeichenkette
- Empfangen einer Zeichenkette
- usw.
Und dann Punkt für Punkt abarbeiten. Dafür sollten die im Unterricht (?)
erarbeiteteten Grundlagen reichen. Bzw. deren Vertiefung.
Als Hilfe zum Programmieren Stelle ich hiermit kostenlos zur Verfügung:
ein Sortiment Sonderzeichen und Klammern. Davon werden beim
Programmieren IMMER benötigt.
......,,,,,"""""""''''''::::::;;;;;;;;;;;;;;;;;;;$$$$$$%%%%]]]]]]]]]>>>>
>>>{{{{{{{{[[[[[[[[~~~~^^^<<<<<]]]]]]]}}}}}}}}}}})))))))))))((((((((====
======¦¦¦¦&&&&&&;;;;,,,,,,,,;;;;;;;;;;;;;;;
Bei Bedarf dürfen diese beliebig vervielfältigt werden.
maria schrieb:> Ich suche jemanden der ihm den beginn erklären konnte er weis nicht wie> er anfangen soll.
Vielleicht derjenige, der ihm die Aufgabe gegeben hat?
Nicht verzweifeln, einfach machen!
Fang einfach mit einem kleinen teil an, und mach weiter, bis alles da
ist.
Als erstes musst du es schaffen, überhaupt ein Programm zu kompilieren
und dort drauf zu tun. Was ein "AIIT-uC" sagt mir jetzt erstmal nichts.
Zunächst müsste man einen Compiler oder ne Buildumgebung für die
Zielplatform finden, um die Programme damit übersetzen zu können. Dann
bracht man auch Dokumentation zum uC und/oder Libraries vom Hersteller
falls vorhanden. Hardwarenahes zeug ist je nach Hardware wieder etwas
anders im Code anzusteuern. Und dann muss man nachsehen, ob das
Kompilieren und Hochladen auch funktioniert. Man findet eigentlich immer
irgendwo ein LED-Blinkprogramm für so ziemlich jede Platform, das man
dann dafür nutzen kann. Wenn man das mal hat, kann man erst richtig
anfangen.
Dann geht man schritt für schritt vor. Im Grunde braucht es:
* Zeichen über serial senden
* Zeichen über serial empfangen
* Pin/Led/Buzzer ein/aus schalten
Wenn man die Teile mal zusammen hat, muss man es dann nur noch
zusammensetzen. Aber da musst du selbst durch.
maria schrieb:> Visual Studio C Programm es muss auf Arduino Mega 2560 abgespielt werden
Dann fängst du am besten hier an:
https://www.arduino.cc/en/tutorial/blink
Wenn das geht, nach "Arduino Serial" weiter googeln, usw.
Genervt schrieb:> Vielleicht derjenige, der ihm die Aufgabe gegeben hat?
Vermutlich hat es derjenige getan und vielleicht hat der Sohnemann es
nicht für notwendig gehalten, diesem Aufmerksamkeit teil werden zu
lassen?
maria schrieb:> Sollte aber wir stehen momentan ganz am Anfang Ich suche jemanden der> ihm den beginn erklären konnte er weis nicht wie er anfangen soll.
Ideen schriftlich erfassen, sortieren und strukturieren. Gerne mit
Bleistift auf Papier.
Z.B. nach dem Prinzip "E.V.A. = Eingabe, Verarbeitung, Ausgabe"
Etwa in der Art von:
- Codiertabelle "Buchstabe zu Morsezeichen" aufbereiten,
- Klartext entgegennehmen, zwischenspeichern,
- Kennwerte vom Klartext (u.B. länge) bestimmen/berechnen und
zwischenspeichern,
- Klartext mit Hilfe der Codiertabelle, Buchstabe um Buchstabe, nach
Morsetext umsetzen und zwischenspeichern,
- Morsetext ausgeben,
(- Ende oder Neuanfang)
Ggfs. jeden Zwischenschritt verfeinern.
Jeden Zwischenschritt mit der gegebenen Programmiersprache und
Bibliotheken umsetzen. Z.b. welche Datentypen & -Strukturen sind
geeignet um Texte resp. Zahlen zwischen zu speichern? Welche
Wertebereiche? Wieviel davon?
Wie lauten in der gegebenen Programmiersprache die Befehle um "Text"
einzulesen?
Wie lauten die Befehle um "Text" auszugeben? Und Zahlen?
Usw.
~Mercedes~ . schrieb:> ich würd mich erst mal erkundigen, was ne> Klassenkatalognummer ist. ;-O>> mfg
Ich bin mir meistens nicht ganz sicher, wie man diese Unmengen an
Emoticons deuten soll, die du in deinen Posts versuchst unterzubringen.
Was soll z.B. ;-O bedeuten? Bietest du dem Leser mit Augenzwinkern einen
Blowjob an?
Speziell die geforderten "5er-Gruppen" werden zum Morsen-Lernen benutzt.
Mal nachschauen was es unter Ubuntu-Linux für den PC gibt:
aldo
Trainingsprogramm für Morse-Code
Aldo ist ein Morse-Lernprogramm, das vier Typen von Übungsmethoden
anbietet: blocks, koch, file und callsign. Blocks: Bestimmen Sie Blöcke
von zufälligen Zeichen, die Ihnen im Morse-Code vorgespielt werden.
Koch:
Zwei Morsezeichen werden mit voller Geschwindigkeit (20wpm) gespielt,
bis
Sie mindestens 90 Prozent von Ihnen erkennen. Danach wird ein Zeichen
hinzugenommen und so weiter. File: Identifizieren Sie die aus einer
Datei
erzeugten, vorgespielten Zeichen. Callsign: Identifizieren Sie
zufällige,
im Morse-Code abgespielte Rufzeichen.
cw
Morsecode-Lernprogram - Befehlszeilen-Benutzerschnittstelle
Das Projekt unixcw unterstützt beim Lernen der Anwendung von Morsecode.
This package provides two executables:
* cw - a simple command line application that converts key-presses
to Morse code that can be heard through the console buzzer or a
sound card;
* cwgen - a program that generates groups of random characters for
Morse code practice, which can be piped to the cw program.
Das Paket enthält außerdem Beispieldateien (mit der Erweiterung »cw«).
Mit
den darin enthaltenen Befehlen können Eigenschaften wie Geschwindigkeit,
Ton und Abstand der Zeichen verändert werden.
ebook2cw
Umwandlung von eBooks in Morse, MP3s oder OGGs
ebook2cw ist ein Kommandozeilenprogramm, das eine Klartext-Datei
(ISO 8859-1 oder UTF-8, eBook) in Morse-Code, MP3- oder OGG-Audiodateien
umwandelt. Es teilt die Ausgabedateien automatisch in nummerierte
Kapitel auf.
morse
training program about morse-code for aspiring radio hams
Es kann zufällig Tests oder simulierte QSOs, wie sie im ARRL-Test
verwendet werden, generieren. Ein QSO-Generator ist enthalten. Es gibt
eine Fülle von Optionen, um die Trainingsmethode zu variieren. In einem
der einfacheren Modi liest das Programm Text von der Standardeingabe und
gibt Morsecode-Töne aus.
morse-x
morse "practicing" tool for X
morse-x offers you a window to put dits and daws into - by pressing any
key (except q = quit). On the console it prints each character you
morsed in. (So start it in an x-terminal-emulator.) On the first
execution you
have to calibrate the length of dits and daws, so just follow the
instructions on the console.
xcwcp
Morse code tutor - graphical user interface
Das Projekt unixcw hilft beim Erlernen des Morsecodes.
This package provides an interactive Morse code tutor with a Qt4 user
interface. It allows choosing from a number of options for practice,
including sending random characters, random words, and characters from
the
keyboard. It will also receive Morse code sent using the keyboard or
mouse
as a Morse keyer, and display the characters it sees.
Davon gibt es sicher noch mehr.
https://gc.de/gc/morse/
noch ein Text-zu-Morse-Umwandler
Ein Morse-Trainer mit ATtiny:
https://www.elektronik-labor.de/AVR/Morsetrainer4.html
Programm "Master of Morse":
http://www.datalos.de/
Fragibus meinte:
> Was soll z.B. ;-O bedeuten? Bietest du dem Leser mit Augenzwinkern einen> Blowjob an?
Bedeutet ";-O" nicht Erstaunen?
Ich bin das in der Family ja so gewohnt,
da wir schriftlich kommuniziert haben.
Ich kann ja erst seit nem Jahr hören...
@maria
Auf welcher Hardware soll das ganze beruhen?
Auf Arduino?
Wenn ja, würd ich mich erkundigen, ob auch "C++"
möglich ist, "C" wäre vom Lehrer fies...
mfg
maria schrieb:> Ich will meinem Sohn helfen allerdings habe ich keine Ahnung, wie dass> funktionieren soll
Ach ja...
> kann mir jemand ein Programm erstellen.
soso...
nicht arbeiten, arbeiten lassen!
Ich hoffe die Antwort ist unisono NEIN,
Aber wie Du siehst bemühen sich einige dir zu helfen das SELBER zu tun!
Anderenfalls kannst Du gerne n preisvorschlag posten, mal sehen wer
anbeisst..
'sid
Diese Aufgabne ist keine, die völligen Programmieranfängern gestellt
wird. Da muß es schon einiges an vorherigem Lernen gegeben haben.
Also frag deinen Sohn...
Oliver
Christoph db1uq K. schrieb:> "Morsezeichen bestehen aus drei> Symbolen: kurzes Signal, langes Signal und Pause" Blödsinn! Es sind fünf> Elemente, aus denen decodierbarer Morsetext aufgebaut wird.
Die Wikipedia (und vermutlich auch Herr Morse) kenne nur 3
Grundelemente: Kurz, lang und "Pause" (die Pause mit unterschiedlicher
Länge)
Ein Dah ist dreimal so lang wie ein Di.
Die Pause zwischen zwei gesendeten Symbolen ist ein Di lang.
Zwischen Buchstaben in einem Wort wird eine Pause von der Länge
eines Dah (oder drei Di) eingeschoben.
Die Länge der Pause zwischen Wörtern entspricht sieben Di.
Deine Interpretation von 3 verschieden langen Pausen als 3
eigenständigen Elementen würde ja auch "1 Stopbit, 1,5 Stopbit oder 2
Stopbit" bei der seriellen Schnittstelle als 3 unterschiedliche Elemente
auffassen, und nicht als "Stopbit(s) unterschidlicher Länge". Stimmts?
Oliver S. schrieb:> Diese Aufgabne ist keine, die völligen Programmieranfängern gestellt> wird. Da muß es schon einiges an vorherigem Lernen gegeben haben.>> Also frag deinen Sohn...
Vielleicht ist "maria" aber einfach nur die Sockenpuppe von "marias
Sohn", und es gibt gar keine 2 verschiedene Personen ...
https://de.wikipedia.org/wiki/Sockenpuppe_(Netzkultur)
Vielen Dank an alle die mir helfen wollten, mir ist es zu peinlich wenn
jemand glaubt ich wurde es ausnutzen das mir jemand Hausübung für meinen
Sohn schreiben soll .Wenn es der Lehrer erklärt hätte und er es nicht
verstanden hat, war auch momentan nicht die Situation wegen Corona
jemanden zu finden der ihm dass erklären konnte. Bitte gibt mehr keine
Antwoten mehr , er soll draus Lernen. Nochmals danke an die Leute die
mir helfen wollten.
Können wir uns mal alle kurz freuen, dass die Aufgabe zumindest gut
gestellt wurde?
Zur Lösung: Wie schon oben beschrieben, musst du die Aufgabe in Blöcke
zerlegen und einzeln angehen:
- Wie lese ich Strings aus der seriellen Schnittstelle?
- Wie bekomme ich Groß, Kleinschreibung gleich behandelt? (Hint: alles
groß oder klein machen)
- Wie übersetze ich in Morsecode (i.B. der Satzzeichen Leerzeichen und
Pausen)
- Wie gebe ich das Ergebnis zurück über die Serielle Schnittstelle?
- Wie baue ich eine Pause / einen Countdown?
- Wie steuere ich das ganze auf einen Ausgang.
Für alles dürften sich Beispiele per Google finden lassen.
Tips:
- Bei der "ordentlichen" Quelle ist wahrscheinlich alles außer Wikipedia
verlangt.
- Programmteile in Funktionen zu gruppieren kommt immer gut an.
- Textbausteine wären evtl. noch eine erfreuliche Erweiterung
> Vielleicht ist "maria" aber einfach nur die Sockenpuppe von "marias> Sohn", und es gibt gar keine 2 verschiedene Personen ...
Meint Ihr, son Teil wo frau dauernd Nadeln
reinstecken kann?
Dann sollte maria's Sohn sich doch mal auf nem
total teerigen, und in der Szene total verschrienden
Bord anmelden, zum Beispiel bei www.mikrocontroller.net ,
um zu sehen, ob unter dem Teer vielleicht ein Herz aus Gold ist ... ;-O
mfg
Welche Hardware wird von der Aufgabe gefordert:
>über die serielle Schnittstelle im Terminal>arduino mega 2560
Also ein PC mit Terminalprogramm, ich würde z.B. Hterm benutzen, alt
aber bewährt: http://www.der-hammer.info/pages/terminal.html
Ersatzweise ein Raspberry Pi. z.B. mit Cutecom als Terminalprogramm.
einem USB-Seriell-Kabel
ein Pegelumsetzer von serieller Schnittstelle auf den Arduino-Pegel z.B.
https://eckstein-shop.de/USB-zu-UART
und der Arduino Mega 2560:
https://store.arduino.cc/arduino-mega-2560-rev3
Natürlich noch die Stromversorgungen, Bildschirm, Tastatur und Maus
Udo S. schrieb:> Der Troll "maria" kriegt von mir 9 von 10 Trollpunkten :-)
Oh, mann, so ein symbolträchtiger Name... ;-O
Das Projekt ist doch gar nicht schlecht, nur, wenn ich sowas
vorhätte, würde ich mich anmelden, mich vorstellen, und ein
Thread im Projekte & Code aufmachen.
Ob ich dann nur ne "Cassandra" stören, oder ein wirkliches
brain storming auslösen könnte?
mfg
maria schrieb:> Ich will meinem Sohn helfen allerdings habe ich keine Ahnung, wie dass> funktionieren soll kann mir jemand ein Programm erstellen
Hallo Mario,
das tut mir leid das du der Vater von jemandem bist
der Hilfe braucht denn eine Hilfe bist du ihm
nicht auch wenn du Internet hast und er
nicht sonst hätte er ja selber schreiben können
Vielleicht lernst du erstmal mit ihm zusammen Deutsch
vor allem Ausdruck und Rechtschreibung mit dem Schwerpunkt
auf der korrekten Verwendung von Satzzeichen dann werden
deine Texte bestimmt gleich viel lesbarer
Ich höre gerade vom Kollegen, der das schon benutzt hat: man benötigt
keine zusätzliche Schnittstelle, der im Arduino eingebaute
USB/Seriell-Wandler ist ohne Umstöpseln für den Bootloader und ein
Programm nutzbar. Und die Arduino-Programmierumgebung enthält ein
serielles Terminal. Damit vereinfacht sich das ganze deutlich.
Von C oder C++ sehe ich nichts in der Aufgabenstellung, ich nehme an,
dass die Arduino-IDE benutzt werden soll.
Die Aufgabe enthält keine Echtzeitanforderungen, die kompliziertere
Interruptprogrammierung und ähnliches benötigen, Morsezeichen sind eine
ziemlich langsame Aufgabe, schließlich muss ein Mensch sie noch mithören
können..
~Mercedes~ . schrieb:> Bedeutet ";-O" nicht Erstaunen?
Naja, vielleicht erstaunt mit Fliege im Auge. Aber in beiden Fällen
passt es kontextmäßig nicht bzw. nie. Ich meine ja nur.
> Ich bin das in der Family ja so gewohnt,> da wir schriftlich kommuniziert haben.> Ich kann ja erst seit nem Jahr hören...
Verstehe den Zusammenhang nicht. Finde es aber interessant, dass du erst
seit einem jahr hören kannst. Wenn das nicht so absulot OT wäre würde
ich dich fragen, was da los war, wennn ich dürfte.
Naja, so grob:
Hardware genauer ansehen sowas ähnliches wie
https://www-user.tu-chemnitz.de/~heha/viewchm.php/hs/ATmegaX8.chm/20.htm
bzw. Datenblatt besorgen,
Entwicklungskit/Dokumentation gut ansehen, eventuell sind da schon sehr
gute Hilfen oder Beispielprogramme dabei.
Und natürlich den dazugehörigen Unterrichtsstoff ansehen.
Irgendwo im Netz fliegen auch noch Morsecode-Programme in c oder c++
oder sonstwie herum, auch darauf kann man zur Not zurückgreifen.
maria schrieb:> Sollte aber wir stehen momentan ganz am Anfang Ich suche jemanden der> ihm den beginn erklären konnte er weis nicht wie er anfangen soll.
Wo sollen wir den Anfangen? Etwa beim Physikunterricht der 8
Schulklasse?
Was da abgefragt wird, ist der Lehrstoff mehrere Jahre! Das kann man
nicht mal eben schnell in einer öffentlichen Diskussion nachholen. Für
so etwas sollte man in eine Schule gehen und danach studieren oder in
eine Fachausbildung.
Fragibus meinte:
> Verstehe den Zusammenhang nicht. Finde es aber interessant, dass du erst> seit einem jahr hören kannst. Wenn das nicht so absulot OT wäre würde> ich dich fragen, was da los war, wennn ich dürfte.Beitrag "2m FM Ausbildungscontest"
Ich hab mich in diesem Thread, ganz hinten vorgestellt.
maria schrieb:> Vielen Dank an alle die mir helfen wollten, mir ist es zu peinlich wenn> jemand glaubt ich wurde es ausnutzen das mir jemand Hausübung für meinen> Sohn schreiben soll .Wenn es der Lehrer erklärt hätte und er es nicht> verstanden hat, war auch momentan nicht die Situation wegen Corona> jemanden zu finden der ihm dass erklären konnte.
@maria
hättest du etwas mehr Hintergrund-Infos (zur Situation etc) gegeben,
wärest du nicht so "abgewatscht" worden. Hättest du dich angemeldet,
hätte man sogar gegebenenfalls per Direktnachricht (PN) dich
kontaktieren können.
Es ist allerdings schon recht ungewöhnlich, das "Mutti" für ihren Sohn
in einem technischen Forum nach technischen Dingen fragt, welche sie
möglicherweise (du schriebst ja auch nichts zu deinen Kenntnissen etc)
dann vielleicht doch nicht so richtig einordnen kann.
--> Vielleicht macht ihr zwei Hübschen noch mal einen "restart", meldet
euch beide! an mit "Mutti" und "Sohn_von_Mutti", und lasst uns die
Aufgabenstellung noch mal neu durchdenken und durchdiskutieren.
Wegstaben V. schrieb:> Es ist allerdings schon recht ungewöhnlich, das "Mutti" für ihren Sohn> ... nach ... Dingen fragt
Meine Frau und fast alle anderen Mütter in meinem Bekanntenkreis
ersetzen ebenfalls mit großer Mühe den fehlenden Unterricht. Es läuft
zur Zeit so, dass die Lehrer Aufgabenblätter verteilen und dann die
Schüler zusammen mit ihren Eltern (meist Müttern) herausfinden müssen,
wie man sie löst.
Stefan ⛄ F. schrieb:> Es läuft> zur Zeit so, dass die Lehrer Aufgabenblätter verteilen und dann die> Schüler zusammen mit ihren Eltern (meist Müttern) herausfinden müssen,> wie man sie löst.
ok, das hab ich nicht bedacht.
Also los, Muttis, (gerne auch Vatis) meldet euch reichlich an hier auf
mc.net, und lasst uns unbekannte Aufgabenstellungen heraus finden!
weiss ehrlich gesagt nicht wo ich das Dingen herhab,
hab ich tatsächlich so auf der Festplatte gefunden,
wüsste nicht das je geschrieben zu haben..
vermutlich ein mittlerweile quellunbekannter
Internetfund aus vergangener Zeit...
tut aber was es soll :D
'sid
Stefan ⛄ F. schrieb:> sid schrieb:>> wie wär's hiermit>> Erinnert mich an die Turing Maschine mit dem Papierband.
wenns mich nicht täuscht, dann ist das brainfuck
https://de.wikipedia.org/wiki/Brainfuck#Sprachdesign
und das SOLL so sein ;-)
(nur, dass halt das band kein band sondern ein datenfeld ist)
maria schrieb:> Sollte aber wir stehen momentan ganz am Anfang Ich suche jemanden der> ihm den beginn erklären konnte er weis nicht wie er anfangen soll.
Dann könnte er erstmal mit Eingabe eines Textes und Ausgabe auf dem
Terminal anfangen.
Bernd N. schrieb:> Da hilf Pedas 8051 Assembler Programm ungemein.
Anhand der Kommentare sollte das Prinzip klar werden und das Umschreiben
nach C kein Problem sein.
diensthabender quotendepp schrieb:> Stefan ⛄ F. schrieb:>> sid schrieb:>>> wie wär's hiermit>>>> Erinnert mich an die Turing Maschine mit dem Papierband.>> wenns mich nicht täuscht, dann ist das brainfuck
tut es nicht; ist brainfuck
fördert ungemein die Konzentration wenn man versucht das im Kopf
nachzuvollziehen, obschon die Regeln ja einfach sind (daher der name)
<> move pointer,
+- in/decrement pointer,
[] loop until zero
,. in/output
ne Stunde BF und jedes noch so schlimme Kauderwelsch danach ist
entspannende Lektüre im Sonnenschein :D
'sid
In Arduino könnte es so aussehen.. bekommt man das minimaler?
Es gibt Librarys zum Morsen mit über 30 Funktionen und gefühlte 5 Seiten
lang :/
Irgendwann werde ich das mal testen.. ist so nebenbei in der Pause
hingekritzelt.. bestimmt gibt es den einen oder anderen Char->Int
Fehler.
Philipp K. schrieb:> In Arduino könnte es so aussehen..
Ehrlich gesagt, ich verstehe nur Bahnhof.
Kannst Du mal die Funktion beschreiben?
DPA schrieb:> Ich hab mir mal das hier im Anhang ausgedacht.
Hier ebenso.
Peter D. schrieb:> Philipp K. schrieb:>> In Arduino könnte es so aussehen..>> Ehrlich gesagt, ich verstehe nur Bahnhof.
Ich auch.
Peter D. schrieb:> DPA schrieb:>> Ich hab mir mal das hier im Anhang ausgedacht.>> Hier ebenso.
Sind 2 Lookup tabellen, Schriftzeichencode zu Morsezeichensequenz
(char_morse_map) und Morsezeichencode zu Schriftzeichen
(morse_char_map), plus ein paar utillity funktionen für
Lookup+Boundcheck und Text/Zeichen Ausgabe.
Die Rückconvertierungsfunktionen ist eigentlich unnötig, hab ich auch
nicht ausprobiert, ob die auch geht. Und das MORSE_MAPPING macro ist
einfach, dass ich die Zuordnung nicht in den 2 Lookup Tabellen 2 mal
hinschreiben muss.
Die Morsezeichensequenz hab ich recht simpel & platzsparend codiert.
Nimm ein Zeichen, z.B. -.. (D). Ersetze - mit 1 und . mit 0. Setze ein 1
dahinter. Drehe alles um. Das ist der Codierte Wert in Binär. Die 1
setze ich dahinter/davor, weil, morse hat keine fixe länge, und Zahlen
haben normalerweise keine führende Nullen, also Markiere ich so den
Anfang/das Ende, der Sequenz. Das Umkehren mach ich, weil es das
encodieren und decodieren vereinfacht.
Würde man die dekodierung debuggen, sähe das etwa so aus:
1
uint8_t x = 0x09; // 0b00001001
2
char s[8]={0}; // | | | | | | | | |
3
// x ist grösser 1
4
s[0] = ".-"[x%2]; // x%2 ist 1⯅ |-| | | | | | | |
5
x /= 2; // 0b00000100
6
// x ist grösser 1
7
s[1] = ".-"[x%2]; // x%2 ist 0⯅ |-|.| | | | | | |
8
x /= 2; // 0b00000010
9
// x ist grösser 1
10
s[2] = ".-"[x%2]; // x%2 ist 0⯅ |-|.|.| | | | | |
11
x /= 2; // 0b00000001
12
// x ist nicht grösser 1, fertig
Die encodier Funktion macht genau das umgekehrte.
Und dank der Lookup tabelle ist char_morse_map['D'] = 0x09 und
morse_char_map[0x09] ist 'D'.
Die Symbolsequenzen 0 und 1 sind bei dem Mapping eigentlich ungültig, da
diese nichts repräsentieren. Hat sich aber als praktisch herausgestellt,
dadurch konnte ich 1 als Worttrennzeichen verwenden, und 0 für kein oder
ungültige Zeichen.
morse_lookup_char und morse_lookup_symbol sind nur da, weil die lookup
Arrays kleiner sind, als die Wertebereiche eines Zeichen, oder einer
Morsesymbolsequenz. für die werte Auserhalb der Tabelle kann ich dort
dann 0 zurückgeben, der Wert passt hierfür gerade ideal. Die in der
Tabelle existierenden Werte, denen nichts explizit zugewiesen wurden
sind zudem auch 0.
Oh, un die Werte in der Tabelle hab ich in hex statt in binär
geschrieben, weil das 0b Präfix kein gültiges C ist. (Es gibt eine gcc
compiler extension, die betrachte ich nicht als Bestandteil von C.).
Sonst wäre die Kodierung viel einfacher zu verstehen gewesen.
Sonst wird wenn uc gleich char_morse_map_count auf ein nicht
existierendes Element hinter dem Letzten Element in der Liste
zugegriffen (buffer oveflow).
Punkt Punkt Strich schrieb:> "Divide et impera" ist beim Entwicklen ein sehr guter Ansatz. Der> Sohnemann soll das Große und Ganze in Teilprobleme zerlegen.
Das hast du falsch verstanden. Es geht darum, eine Aufgabe unter
möglichst vielen Forumsdummkö^W Forumsbesuchern zu verbreiten in der
Hoffnung, dass einer (meistens Stefanus) darauf hereinfällt und die
Arbeit macht, weil er das für sein Ego braucht.
"Divide et impera" heißt richtig (nicht wörtlich) übersetzt "Müll das
Forum voll und nutze die anderen aus"
Da die Aufgabe inzwischen größtenteils gelöst ist, habe ich hier noch
ein weiteres morse.c für den PC, diesmal in kurz und knackig:
1
#include <stdio.h>
2
#include <ctype.h>
3
4
unsignedchartab[]={
5
117,0,0,0,0,0,94,45,109,0,42,115,97,106,41,63,
6
62,60,56,48,32,33,35,39,47,71,85,0,49,0,76,86,
7
6,17,21,9,2,20,11,16,4,30,13,18,7,5,15,22,27,
8
10,8,3,12,24,14,25,29,19,0,0,0,0,108
9
};
10
11
intmain(void){
12
unsignedcharm;
13
intc;
14
15
while((c=toupper(getchar()))!=EOF){
16
if(isspace(c))
17
putchar('\n');
18
elseif((c-=33)<sizeoftab&&(m=tab[c])){
19
do
20
putchar(".-"[m&1]);
21
while((m>>=1)>1);
22
putchar(' ');
23
}
24
}
25
}
Für die Ausgabe über einen Buzzer müssen die drei putchar-Aufrufe durch
den entsprechenden Code ersetzt werden.
Leider habe ich erst hinterher gesehen, dass DPA die Idee mit der
Kodierung in einem Byte pro Zeichen schon früher hatte. Bis auf die
Kürze (über deren Sinn man sich natürlich streiten kann) bringt der Code
also nicht viel Neues. Trotzdem wollte ich ihn nicht in der Versenkung
verschwinden lassen ;-)
Peter D. schrieb:> Ehrlich gesagt, ich verstehe nur Bahnhof.> Kannst Du mal die Funktion beschreiben?
Hm, Okay
Der "Morse-Array" beinhaltet für jeden Buchstaben/Zahl 5 Stellen mit
jeweils dem Multiplikator des "Zeit-Teilers" von kurz oder lang und 2
als Leer.
Den Ascii-Code eines Buchstabens bekommt man mit "(int) char", das
kleine "a" hat den AscII Code 97.. das z 26 höher 122.
Also fängt der Morsecode für z im array bei 122-97*5 an und endet bei
der ersten 2 im Array ;)
DPA schrieb:> Oh, un die Werte in der Tabelle hab ich in hex statt in binär> geschrieben, weil das 0b Präfix kein gültiges C ist.
Inzwischen ist das in den Standard (Version 14) aufgenommen worden.
Julius C. schrieb:> in der Hoffnung, dass einer (meistens Stefanus) darauf> hereinfällt und die Arbeit macht, weil .... (laber Scheiße)
Ich denke, du überschätzt massiv, wie viele Programme ich hier
veröffentlicht habe. Es war weniger als eins pro Jahr.
Werter Yalu X!
Ich möchte Dir aus ganzem Herzen für
Deine Hilfe beim Morseprogramm danken!
Das hier ist doch wirklich ein sehr kompetentes
Szeneboard, was ähnliche Etablissements in Zukunft
auf die Plätze verweisen wird!
Bitte, Yalu, mein Schatz:
Leider wurde die Aufgabenstellung des Lehrers nicht ganz erfüllt.
Die Klassenkatalognummer wurde noch nicht berücksichtigt!
Bist Du bitte deshalb so nett, in den letzten 23 Bytes noch
eine klangbildgesteuerte, neuronal basierte Empfangsroutine
zu posten, die dann die Klassenkatalognummer mit berücksichtigt?
Yalu, ich werfe mich vor Dir in den Staub!
marias_tochter
Axel S. schrieb:> Vielleicht lernst du erstmal mit ihm zusammen Deutsch> vor allem Ausdruck und Rechtschreibung mit dem Schwerpunkt> auf der korrekten Verwendung von Satzzeichen dann werden> deine Texte bestimmt gleich viel lesbarer
Nun hau mal nicht so auf den Putz und laß die Kirche im Dorf! Es gibt
hier Leute, deren Rechschreibung und Grammatik deutlich schlechter ist.
Auch mal getestet.. scheint zu funktionieren.
Hier mal korrigiert mit Kommentaren.
es gibt jede verwendete Funktion der arduino IDE auch im AVR Style..
wird bis auf die Serial Seite nicht viel anders aussehen.
marias_tochter schrieb:> jede Menge Lob und Danksagung und weiterees..
Aber wieso marias_tochter?
Ich denke, der Sohnemann von der Maria hat die Aufgabenstellung
bekommen? Und nun hilft also marias_tochter (also
marias_sohn_seine_schwester ??) auch noch mit?
Das ist ja eine fleissige Familie!!
marias_tochter schrieb:> klangbildgesteuerte, neuronal basierte Empfangsroutine
was mag das wohl sein?
Wegstaben V. schrieb:> marias_tochter schrieb:>> jede Menge Lob und Danksagung und weiterees..>> Aber wieso marias_tochter?>> Ich denke, der Sohnemann von der Maria hat die Aufgabenstellung> bekommen? Und nun hilft also marias_tochter (also> marias_sohn_seine_schwester ??) auch noch mit?
Nicht Maria. Mario. Vermutlich mit Schnauzer. Und von Beruf Klempner.
Oder so. Im Internet weiß keiner, daß du ein Hund bist.
Wegstaben V meinte:
> Aber wieso marias_tochter?> Ich denke, der Sohnemann von der Maria hat die Aufgabenstellung> bekommen? Und nun hilft also marias_tochter (also> marias_sohn_seine_schwester ??) auch noch mit?
Frauenpower. ;-P
Ich denke mal, das marias Sohn total unterdrückt wird.
Er hat ja als einziger nicht gepostet. Er traut sich einfach nicht.
Würde mir auch so gehen, als einziger Junge in ner
frauendominierten Familie, in der maria alleinerziehend ist.
> Das ist ja eine fleissige Familie!!
Na klar, das schwächere Geschlecht muß einfach
unterstützt werden, solange Samen noch nicht künstlich
hergestellt werden kann.
> marias_tochter schrieb:> klangbildgesteuerte, neuronal basierte Empfangsroutine> was mag das wohl sein?
Ich mein mal, das ist eine Funktion, die in 23 oder 123 Bytes paßt.
Irgendwie braucht ein Morseterminal Sender und Empfänger.
mfg
~Mercedes~ . schrieb:> Doch!!>> Hunde erkennt man an ihrer typischen,> besonders großen Intelligenz!>> mfg
Und lolitas erkennt man daran, dass sie gerne eine Lolita bei sich
hätten.
Huch!?!
Benz meinte:
> Und lolitas erkennt man daran, dass sie gerne eine Lolita bei sich> hätten.
OOch!
Und ich hab mir extra Mühe gegeben, keine Smilys zu posten... :-O
Nö, auf diesem Forum hier gibt es nur eine Lolita.
Aber Marie's Tochter gibt es ganz bestimmt. Und gut, ich gebs zu,
ich hab ein bissel geflunkert.
Marie ist natürlich nicht alleinerziehend. ;-P
mfg
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang