-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Datei im ASURO etc.

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.08.2007
    Alter
    26
    Beiträge
    60

    Datei im ASURO etc.

    Anzeige

    Moin,
    ich hab mal einige Fragen:
    1.
    Kann man im ASURO eigentlich Dateien anlegen?
    Also ich meine mit fopen().
    2.
    Wenn man die Taste einer IR-Fernbedienung drückt,
    so wird ja ein binäres Zeichen(oder?) gesendet.
    Wäre es möglich mit SerRead() dieses zu Empfangen,
    erst einmal festzustellen, um welches Zeichen es sich handelt
    und dann entsprechend darauf zu reagieren?

    Danke schonmal für Antworten.
    Salvo errore et omissione

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.06.2007
    Alter
    25
    Beiträge
    104
    Hallo,

    zu 1: Tut mir leid dazu weiß ich nichts.

    zu 2:Ich glaube, dass das nicht geht. Ich habe das mal mit einer Zimmerhubschrauber-Fernsteuerung versucht, aber dieses Terminal hat zumindest keine Binärzahlen emfangen. Vielleicht waren es ja Hexadizimalzahlen. Aber mit denen kenn ich mich auch nicht so gut aus.

    Ich hoffe, dass dir das in irgendeiner Art weitergeholfen hat. Ansonsten kommt bald bestimmt ne bessere Antwort.
    Gruß Roboaktiv


    It is öde to be blöde

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

    Das habe ich mal gemacht, so liest man die Daten ein:

    Code:
    unsigned int count, temp; // Zaehler, IR-Kommando
    unsigned char daten[14], ir_status; // IR-datenspeicher, IR-Eingangsegel
    	temp=0;
       while (PIND & (1 << PD0)) //warten auf die Flanke des Startbits
       StatusLED(RED); // Alarmstufe ROT: ein Zeichen ist im Anflug
    	for (count=0; count<14; count++) { // im Gesammten warten wir auf 14 bits
    		Sleep(48); // Information einlesen nach 3/4 der Bitlaenge
    	   ir_status=(PIND & (1 << PD0)); // Pegel Speichern
    	   if (ir_status) daten[count]='1'; else daten[count]='0'; // und merken
    	   if (ir_status) temp |= (1 << (13-count)); // das MSB(=mostsuefikantbit) zuerst
    	   while (ir_status == (PIND & (1 << PD0))); // Bit gelesen, warten auf naechste Flanke
    	}
    	temp=temp/2 & 0xf; // Die Info steht in den Bits 1-4
    	StatusLED(YELLOW); // Daten gelesen
       fahre(temp);
    Und so fährt man damit:
    Code:
    void fahre(unsigned char kommando) {
    /* asuro steuern.
    	Mit dem 10er-Block der Fernbedienung kann der asuro nun gesteuert werden:
    	Alle anderen Tasten stoppen den asuro
    */
    	switch (kommando) {
    	   case 1: MotorDir(FWD,FWD); MotorSpeed(pow1,pow2); break;
    	   case 2: MotorDir(FWD,FWD); MotorSpeed(pow2,pow2); break;
    	   case 3: MotorDir(FWD,FWD); MotorSpeed(pow2,pow1); break;
    	   case 4: MotorDir(BREAK,FWD); MotorSpeed(0,pow1); break;
    	   case 5: MotorDir(BREAK,BREAK); MotorSpeed(0,0); break;
    	   case 6: MotorDir(FWD,BREAK); MotorSpeed(pow1,0); break;
    	   case 7: MotorDir(RWD,FWD); MotorSpeed(pow1,pow1); break;
    	   case 8: MotorDir(RWD,RWD); MotorSpeed(pow1,pow1); break;
    	   case 9: MotorDir(FWD,RWD); MotorSpeed(pow1,pow1); break;
    	   default: MotorDir(BREAK,BREAK); MotorSpeed(0,0); break;
    	}
    }
    Das ist aus diesem Thread:
    http://www.roboternetz.de/phpBB2/zei...=287750#287750

    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
    Benutzer Stammmitglied
    Registriert seit
    03.08.2007
    Alter
    26
    Beiträge
    60
    danke, ich werds morgen mal ausprobieren.
    weißt du zu 1. avtl was?
    Salvo errore et omissione

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Ups, sorry, habe ich überlesen:

    zu 1.: nein, kann man nicht, denn der asuro hat keine Dateisystem.

    mic

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

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Zum Thema Fernsteuerung hab ich vor kurzem auch eine Frage gehabt. Die Asuro Lib 2.7rc3 bietet standardmäßig eine Funktion an, mit der man Fernsteurungssignale empfangen kann.
    Diese funktionierte bei mir aber nicht - ich baute mir daraufhin meine eigene Funktion. So lernt man wenigstens was neues. Im Großen und Ganzen sieht sie eh recht ähnlich wie radbruchs Funktion aus.

    Hier der Link zum Thema:
    LINK


    Zumindest über die stdio Funktionen ist es nicht möglich, direkt am Mikrocontroller Dateien zu speichern. Allerdings wäre es ja vielleicht möglich diese irgendwo direkt in den Flashspeicher zu legen!? AVR Gurus, wo seit ihr???
    Grüße,
    Harri

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    03.08.2007
    Alter
    26
    Beiträge
    60
    hm,
    beide von euch vorgeschlagene Codes funktionieren bei mir nicht.
    (Danke aber erstmal!)
    Muss dann wohl an der Fernbedienung liegen.
    Was ist überhaupt eine RC5 Fernbedienung?

    Kann es eigentlich sein, dass die sprintf() Funktion auf dem ASURO nicht funktioniert?
    Bei mir kommt bei
    Code:
    sprintf(string,"%f",float_zahl);
    eine Compilerwarnung und vom ASURO bei der Ausgabe
    mit SerPrint(string); nur ein '?'.

    Dann noch eine eher unwichtige Frage:
    Hat jemand von euch das Buch "Mehr Spaß mit ASURO Band I"?
    Wenn ja, wieviele Stiftleisten, wievielpolig lagen bei der Platine bei?
    Salvo errore et omissione

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Hier findest du eine Beschreibung des RC5 Codes:
    http://www.sbprojects.com/knowledge/ir//rc5.htm

    Zum Thema sprintf:
    Die stdio.h hast du eh inkludiert???
    "%f" erwartet den Datentyp double, nicht float.

    Hier der Code wie er problemlos funktionieren sollte:
    Code:
    	double float_zahl=3.1415;
    	char string[10]={'\0'};
    	sprintf(string,"%f",float_zahl);
    Achte darauf, dass du den string-Array groß genug machst, damit du da ja genug freie Stellen hast.
    Normalerweise lässt man sich einen String dynamisch mittels malloc erstellen, das ist bei Mikrocontrollern aber nicht gut, daher musst du bereits zur Compilezeit die Array-Größe angeben.
    Grüße,
    Harri

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    03.08.2007
    Alter
    26
    Beiträge
    60
    Das ist ja mal interessant mit dem double!
    ich zitiere mal aus meinem C-Buch(erklärung zur Funktion printf()):
    Wert Bedeutung
    f Argument vom Typ float oder double[.....]
    geht eigenltich noch weiter, steht aber im widerspruch zu deiner Aussage,
    ih denke mal aber, dass deine Aussage hinkommt, denn ich hatte
    schon öfters das Problem.
    stdio.h hab ich natürlich includiert.
    Salvo errore et omissione

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Du kannst natürlich auch float verwenden und dann nach double casten:
    sprintf(string,"%f",(double)float_zahl);

    Allerdings sollte man bei Mikrocontrollern so weit wie möglich auf Kommazahlen verzichten und stattdessen Ganzzahlen verwenden, diese sind für einen Computer viel leichter zu handeln.
    Grüße,
    Harri

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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