-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Morsegenerator

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2007
    Beiträge
    13

    Morsegenerator

    Anzeige

    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:

    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;
    				
    			 }
    }
    //---------------------------------------------------------
    Hoffe es kann jemand helfen!

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Du meinst, wie du von einem Terminal-"a" zu .- kommst ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo Thraxas

    Wenn du die Library des asuros verweden möchtest/darfst, ist es recht einfach:
    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);
    }
    Ohne ist es zäh, UART initialisieren, Empfangsroutine schreiben...

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2007
    Beiträge
    13
    Vielen Dank radbruch, dann setz ich mich mal noch ein bischen ran.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2005
    Ort
    Irgendwo südlich von Dortmund
    Alter
    37
    Beiträge
    16
    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);
    }

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    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.
    kleinschreibung ist cool!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2007
    Beiträge
    13
    Leider funktioniert der Code von Warringer nicht, weiß villeicht jemand wo der fehler liegt?

  8. #8
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    was funktioniert denn nicht?

    warringer: ich denke dass ein zeichen lange DEFINES ihn killen könnten. lieber sowas wie MORSE_A oder so
    kleinschreibung ist cool!

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2005
    Ort
    Irgendwo südlich von Dortmund
    Alter
    37
    Beiträge
    16
    Ich hab nur den Code von radbruch genommen und ein wenig modifiziert.

    Aber ich schätze damltor hat Recht mir den längeren Defines.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    23.07.2007
    Beiträge
    13
    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

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •