Du meinst, wie du von einem Terminal-"a" zu .- kommst ?
Hi, wir sollten in der Schule ein Programm für den Asuro schreiben in dem SOS gemorst werden sollte, ich habe das Programm nun noch weiter ausgebaut, da ich das etwas leingweilig fand. Ich wollte jetzt noch, das man das Wort/der Satz, der gemorst werden soll, im Hyper-Terminal eingibt und er dann gemorst wird. Nur hab ich keine Idee wie ich das machen soll, da ich auch nicht die funktion dafür finde.
Ich benutze das AVR-Studio.
Hier mal mein Code:
Hoffe es kann jemand helfen!Code:/* +---------------------------------+ | | | Morse-Code-Generator | | von René Becker | | | +---------------------------------+ */ //--------------------------------------------------------- /* +-----------------+ | | | | | | Includes | | | | & | | | | Defines | | | V V | +-----------------+ */ //--------------------------------------------------------- #include <avr/io.h> //--------------------------------------------------------- #define sekunden 0.2 #define a blinken(1,1); blinken(1,3); #define b blinken(1,3); blinken(3,1); #define c blinken(1,3); blinken(1,1); blinken(1,3); blinken(1,1); #define d blinken(1,3); blinken(2,1); #define e blinken(1,1); #define f blinken(2,1); blinken(1,3); blinken(1,1); #define g blinken(2,3); blinken(1,1); #define h blinken(4,1); #define i blinken(2,1); #define j blinken(1,1); blinken(3,3); #define k blinken(1,3); blinken(1,1); blinken(1,3); #define l blinken(1,1); blinken(1,3); blinken(2,1); #define m blinken(2,3); #define n blinken(1,3); blinken(1,1); #define o blinken(3,3); #define p blinken(1,1); blinken(2,3); blinken(1,1); #define q blinken(2,3); blinken(1,1); blinken(1,3); #define r blinken(1,1); blinken(1,3); blinken(1,1); #define s blinken(3,1); #define t blinken(1,3); #define u blinken(2,1); blinken(1,3); #define v blinken(3,1); blinken(1,3); #define w blinken(1,1); blinken(2,3); #define x blinken(1,3); blinken(2,1); blinken(1,3); #define y blinken(1,3); blinken(1,1); blinken(2,3); #define z blinken(2,3); blinken(2,1); #define wortende mysleep(7*einheit); #define punkt blinken(1,1); blinken(1,3); blinken(1,1); blinken(1,3); blinken(1,1); blinken(1,3); //--------------------------------------------------------- /* +--------------------------+ | | | | | | Unterprogramme | | | V V | +--------------------------+ */ //---Einheit----------------------------------------------- long einheit = sekunden/0.00000438; //--------------------------------------------------------- //---mysleep----------------------------------------------- int mysleep (long sleepdauer) { long zaehler; for (zaehler=0 ; zaehler<=sleepdauer ; zaehler++ ) { asm volatile ( "nop":: ) ; } } //--------------------------------------------------------- //----Blinken---------------------------------------------- int blinken(int anzahl,int multipl) { int xx; for (xx=0;xx<anzahl;xx++) { PORTD = 0b01000000; mysleep (multipl*einheit); PORTD = 0b00000000; mysleep (multipl*einheit); } mysleep(3*einheit); } //--------------------------------------------------------- /* +-------------------------+ | | | | | | Hauptprogramm | | | V V | +-------------------------+ */ //---Main-------------------------------------------------- int main () { DDRD = 0b01000000; while(1) { t;e;s;t;wortende; } } //---------------------------------------------------------
Du meinst, wie du von einem Terminal-"a" zu .- kommst ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo Thraxas
Wenn du die Library des asuros verweden möchtest/darfst, ist es recht einfach:
Ohne ist es zäh, UART initialisieren, Empfangsroutine schreiben...Code:#include "asuro.h" #define a blinken(1,1); blinken(1,3); #define b blinken(1,3); blinken(3,1); #define c blinken(1,3); blinken(1,1); blinken(1,3); blinken(1,1); #define x blinken(1,3); blinken(2,1); blinken(1,3); #define y blinken(1,3); blinken(1,1); blinken(2,3); #define z blinken(2,3); blinken(2,1); char einZeichen[] = "#"; int blinken(int anzahl,int multipl) { return(0); } int main(void) { while(1) { SerRead(einZeichen,1,0); // warten bis ein Zeichen über IR kommt SerWrite(&einZeichen[0],1); // Kontrollausgabe zum Terminal switch (einZeichen[0]) // der erste Index von einZeichen[] ist 0 { case ('a'): a case ('b'): b case ('c'): c // ... case ('x'): x case ('y'): y case ('z'): z } } return(0); }
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Vielen Dank radbruch, dann setz ich mich mal noch ein bischen ran.
Natürlich könnte man auch das Programm so modifizieren, daß der Asuro eine vollständige Zeichenkette einliest und dan nach einem druck auf 'Tab' diese Zeichenkette ausgibt.
So etwas wie dies hier: (Keine Gewähr ob es wirklich so funktioniert...)
Code:#include "asuro.h" #define a blinken(1,1); blinken(1,3); #define b blinken(1,3); blinken(3,1); #define c blinken(1,3); blinken(1,1); blinken(1,3); blinken(1,1); #define x blinken(1,3); blinken(2,1); blinken(1,3); #define y blinken(1,3); blinken(1,1); blinken(2,3); #define z blinken(2,3); blinken(2,1); char einZeichen[] = "#"; char Zeichenkette[] = ""; uint8_t z1, z2 = 0; int blinken(int anzahl,int multipl) { return(0); } int main(void) { while(1) { while (einZeichen != 0x09) { SerRead(einZeichen,1,0); // warten bis ein Zeichen über IR kommt SerWrite(&einZeichen[0],1); // Kontrollausgabe zum Terminal z1++; } for (z2 = 0; z2 < z1; z2++) { switch (einZeichen[z2]) // der erste Index von einZeichen[] ist 0 { case ('a'): a case ('b'): b case ('c'): c // ... case ('x'): x case ('y'): y case ('z'): z case (' '): wortende } } } return(0); }
wenn du etwas zeit über hast, und was richtig cooles vorstellen willst, dann versuch mal den asuro sie töne hörbar ausgeben zu lassen. er kann mittlerweile schon musik machen und auch sprechen (ohne lautsprecher!), da werden auch morse-codes gehen.
Leider funktioniert der Code von Warringer nicht, weiß villeicht jemand wo der fehler liegt?
was funktioniert denn nicht?
warringer: ich denke dass ein zeichen lange DEFINES ihn killen könnten. lieber sowas wie MORSE_A oder so
Ich hab nur den Code von radbruch genommen und ein wenig modifiziert.
Aber ich schätze damltor hat Recht mir den längeren Defines.
mit den längeren defines funktioniert es leider auch nicht, der code von radbruch funktioniert, nur kann man halt nur ein zeichen senden und nicht eine ganze zeichenkette
Lesezeichen