-
        

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

Thema: Odometrie / Fernsteuerung - Fragen+Probleme

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2009
    Beiträge
    19

    Odometrie / Fernsteuerung - Fragen+Probleme

    Anzeige

    Hallo,


    ich bin im moment an 2 Sachen dran, zum einen das geradeaus fahren und eine Fernsteuerung mittels einer Universalfernbedienung mit RC5-Codes.

    Zuerst zum Odometrieprogramm, da habe ich das aus "Mehr Spaß mit dem Asuro II" ausprobiert und dafür auch die Odometriewerte in mehreren Testläufen gemessen:

    Code:
    246     657
     297     674
     307     687
     339     696
     366     699
     402     704
     444     702
     487     705
     532     701
     575     701
     627     689
     658     676
     696     660
     719     636
     746     617
     760     583
     773     559
     776     527
     776     503
     772     478
     763     458
     761     451
     740     427
     727     426
     704     399
     681     384
     660     362
     637     349
     618     336
     586     321
     562     347
     517     279
    
     732     585
     756     621
     777     638
     787     664
     802     683
     800     693
     803     704
     794     704
     785     714
     769     711
     751     714
     735     706
     706     699
     681     688
     649     676
     625     668
     594     645
     559     627
     523     598
     475     574
     438     549
     383     529
     341     510
     302     486
     270     479
     249     448
     216     428
     207     392
     182     352
     185     312
     168     266
     176     247
     183     200
     194     201
     204     188
     215     198
     248     206
     262     214
     297     235
     310     256
     342     300
     371     325
     404     371
     446     402
     488     441
     540     450
     579     459
     624     473
     653     489
     688     522
     710     550
     737     590
     751     611
     767     643
     774     664
     779     692
     780     704
     772     717
     771     725
     760     730
     755     733
     739     723
     724     719
     704     704
     679     697
     662     678
     633     657
     614     630
     584     602
     555     588
     516     569
     478     564
     446     540
     393     517
     360     488
     304     446
     274     405
     241     348
     211     313
     192     275
     168     263
     171     246
     144     242
     153     244
     137     246
     146     280
     151     296
     156     335
     173     347
     183     370
     208     389
     226     418
     271     444
     284     460
     314     479
     338     496
     374     525
     415     534
     452     559
     502     577
     544     604
     592     622
     628     644
     671     661
     695     671
     725     684
     739     683
     753     691
     761     688
     768     693
     774     688
     773     685
     779     678
     771     666
     782     653
     760     624
     752     601
     739     565
     722     534
     704     499
     673     458
     651     425
     619     368
     595     339
     564     284
     529     256
     495     221
     448     192
     414     174
     360     148
     321     155
     283     156
     252     205
     232     227
     202     283
     195     309
     171     341
     173     378
     158     408
     164     447
     167     475
     171     511
     177     539
     184     583
     217     606
     218     636
     258     660
     269     681
     300     694
     326     700
     359     710
     403     711
     450     721
     507     715
    
     557     468
     524     424
     499     391
     455     367
     420     343
     373     313
     338     313
     310     286
     269     280
     253     275
     217     275
     207     285
     185     289
     186     304
     180     302
     186     327
     209     315
     214     318
     249     313
     257     314
     288     326
     297     340
     325     373
     352     392
     389     424
     424     451
     470     499
     527     538
     569     577
     620     605
     655     628
     694     650
     721     667
     750     686
     768     693
     787     707
     793     705
     799     709
     803     704
     796     699
     791     690
     773     682
     760     676
     736     660
     565     503
     525     490
     478     463
     432     451
     397     426
     222     234
     241     251
     270     246
     285     260
     313     276
     330     301
     371     335
     396     365
     447     411
     482     435
     529     479
     572     502
     609     536
     644     560
     675     588
     706     610
     725     629
     748     650
     758     655
     776     675
     779     687
     773     684
     769     687
     764     683
     753     681
     747     676
    
     152     310
     182     342
     180     371
     209     398
     220     427
     247     468
     272     500
     298     544
     332     572
     361     605
     398     629
     433     654
     491     668
     530     679
     583     686
     622     690
     662     697
     692     695
     721     703
     741     695
     757     691
     769     678
     770     665
     773     648
     763     623
     757     603
     741     565
     727     534
     708     496
     684     466
     665     435
     637     402
     619     385
     586     352
     555     342
     518     307
     474     286
     434     255
     384     233
     355     226
     306     210
     277     217
     248     199
     224     209
     218     194
     199     193
     194     196
     186     244
     207     234
     208     264
     236     319
     258     353
     282     395
     310     418
     328     460
     363     491
     383     530
     431     562
     459     592
     509     622
     547     646
     590     672
     629     685
     667     701
     701     704
     730     713
     751     715
     758     719
     765     715
     760     708
     760     701
     750     681
     745     662
     736     628
     724     598
     713     567
     690     536
     675     506
     639     462
     612     434
     580     384
     552     350
     526     311
     489     278
     464     262
     419     241
     382     235
     341     220
     310     237
     287     225
     256     234
     240     241
     209     254
     205     276
     187     292
     188     325
     188     348
     200     399
     223     412
     233     437
     265     450
     275     469
     303     491
     315     515
     347     545
     376     567
     418     598
     458     621
     508     655
     564     669
     606     683
     653     686
     686     692
     721     695
     742     693
     767     687
     780     671
     795     667
     796     642
     799     618
     795     585
     783     549
     774     517
     753     480
     737     457
     711     416
     686     383
     660     347
     637     325
     621     307
     588     277
     561     262
     522     236
     483     236
     441     224
     394     236
     358     243
     313     257
     297     281
     254     295
     235     329
     214     352
     200     392
     198     419
     187     465
     199     496
     186     528
     199     557
     194     581
     216     606
     231     626
     250     652
     274     668
     290     687
     316     695
     335     708
     381     708
     405     710
     454     704
     497     695
     546     688
     589     674
     629     666
     664     645
     691     626
     719     595
     735     568
     756     546
     764     519
     775     505
     774     475
     775     455
     768     428
     763     403
     758     382
     744     357
     736     347
     712     316
     695     316
     671     290
     650     281
     630     268
     605     258
     584     252
     547     242
     511     249
     466     248
     425     278
     375     287
     324     316
     290     343
     244     375
     227     408
     188     440
     176     482
     162     512
     152     555
     153     581
     140     617
     156     637
    Dadurch habe ich den Mittelwert 450 bekommen und diesen auch am Anfang des Programmes als Schwellwert deklariert, zudem habe ich schon die Odometriesensoren mit schwarzer Pappe abgedeckt und die Zahnräder mit etwas Pappe so fixiert, dass der Abstand zu den Sensoren konstant ist.
    Dennoch fährt mein Asuro nicht geradeaus, ich weiß nicht woran es noch liegen könnte, er fährt zumeist einen Meter ziemlich genau geradeaus und dann driftet er nach rechts ab, manchmal fährt er aber auch von Beginn an kurvig.

    Hier ist mein Programm, ich bin froh über jede Hilfe:

    Code:
    // *******************************************
    // * Odometrie für ASURO                     *
    // * Fährt exakt geradeaus                   *
    // *                                         *
    // *                                         *
    // * (c) 2007 Robin Gruber                   *
    // * Details zum Code in:                    *
    // * "Mehr Spaß mit ASURO, Band II"          *
    // *******************************************
    
    #include "asuro.h"
    
    // Schwellwert fr die Hell/Dunkel-Unterscheidung
    // Eventuell muss damit etwas variiert werden
    #define TRIGGERLEVEL 600
    #define HYSTERESIS 10
    #define LOW 0
    #define HIGH 1
    
    int main(void)
    {
        unsigned int data[2];
        signed int status[2]={0,0};
        signed int difference=0;
        Init();
        MotorDir(FWD, FWD);
        while(1) {
            // Helligkeitswerte der Lichtschranken auslesen
            OdometrieData(data);
            // Wechsel linker Sensor von niedrig auf hoch?
            if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) {
                status[0]=HIGH;
                difference++;
            }
            // Wechsel linker Sensor von hoch auf niedrig?
            if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) {
                status[0]=LOW;
                difference++;
            }
            // Wechsel rechter Sensor von niedrig auf hoch?
            if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) {
                status[1]=HIGH;
                difference--;
            }
            // Wechsel rechter Sensor von hoch auf niedrig?
            if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) {
                status[1]=LOW;
                difference--;
            }
            // zur Sicherheit: verhindern, dass der Differenzz�ler
            // den erlaubten Wertebereich verl�st
            if (difference<-255) difference=-255;
            if (difference>255) difference=255;
            
            // Status-LED noch entsprechend der erkannten Segmente
            // aufleuchten lassen, grn fr links, rot fr rechts
            StatusLED(status[0]+status[1]*2);
            
            // Z�ldifferenz passend auf die Motoren verteilen
            if (difference>0) MotorSpeed(255-difference,255);
            else MotorSpeed(255,255+difference);
            
        }
        return 0;
    }
    Bei dem anderen Programm aus "Mehr Spaß mit Asuro II" bekomme ich beim compilieren folgende Fehlermeldung:

    "../geradeaus.c:13:20: error: eeprom.h: No such file or directory"


    Wo/Wie muss ich <eeprom.h> einbinden?

    --------------------------------------

    Das andere Problem betrifft folgendes Programm:

    Code:
    /*******************************************************************************
    *
    * File Name:   IRDemo.c
    * Project  :   Demo
    *
    * Description: This file contains IRDemo features
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------
    * 1.00	   14.08.2003   Jan Grewe		 build
    * 2.00     22.10.2003   Jan Grewe        angepasst auf asuro.c Ver.2.10
    *
    * Copyright (c) 2003 DLR Robotics & Mechatronics
    *****************************************************************************/
    /*!
      /file 	IRDemo.c
      /brief 	Routinen fuer die Dekodierung von RC5-Fernbedienungs-Codes
      /author 	Benjamin Benz (bbe@heise.de), m.a.r.v.i.n
    
      /version      V001 - 14.08.2003 - Jan Grewe
                    initial build
    		V002 - 22.10.2003 - Jan Grewe
                    angepasst auf asuro.c Ver.2.10
                    V003 - 11.02.2007 - m.a.r.v.i.n
    		c't-Bot RC5 Code portiert fuer den ASURO
    */
    /***************************************************************************
     *                                                                         *
     *   This program is free software; you can redistribute it and/or modify  *
     *   it under the terms of the GNU General Public License as published by  *
     *   the Free Software Foundation; either version 2 of the License, or     *
     *   any later version.                                                    *
     ***************************************************************************/
    
    #include "asuro.h"
    #include "rc5.h"
    #include <stdlib.h>
    
    #define DIARWD   0x1008
    #define DIAFWD   0x1002
    #define DIALEFT  0x1004
    #define DIARIGHT 0x1006
    #define DIASTOP  0x1029
    
    #define TUNERRWD   0x1021
    #define TUNERFWD   0x1020
    #define TUNERLEFT  0x1011
    #define TUNERRIGHT 0x1010
    #define TUNERSTOP  0x1025
    
    #define OFFSET	0x3F
    #define STEP	5
    
    int speedLeft,speedRight;
    
    void IRFwd(void)
    {
      speedRight += STEP;
      speedLeft  += STEP;
      if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
      if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
      FrontLED(ON);
      BackLED(OFF,OFF);
    }
    
    void IRRwd(void)
    {
      speedRight -= STEP;
      speedLeft  -= STEP;
      if (speedRight > 0 && speedRight <= OFFSET)  speedRight = -1;
      if (speedLeft > 0 && speedLeft <= OFFSET)  speedLeft = -1;
      FrontLED(OFF);
      BackLED(ON,ON);
    }
    
    void IRLeft (void)
    {
      speedLeft  -= STEP;
      if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
      speedRight += STEP;
      if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
      FrontLED(OFF);
      BackLED(ON,OFF);
    }
    
    void IRRight (void)
    {
      speedLeft  += STEP;
      if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
      speedRight -= STEP;
      if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
      FrontLED(OFF);
      BackLED(OFF,ON);
    }
    
    
    void IRStop(void)
    {
      speedRight = speedLeft = 0;
      FrontLED(OFF);
      BackLED(OFF,OFF);
    }
    
    int main(void)
    {
    
      static unsigned int cmd;
      unsigned char leftDir = FWD, rightDir = FWD;
      char text[7];
    
      Init();
      InitRC5();
    
      SerPrint("RC5 Test\r\n");
      while (1)
      {
        cmd = ReadRC5();
        if (cmd)
        {
          cmd &= RC5_MASK;
          itoa(cmd, text, 16);
          SerPrint(text);
          SerPrint("\r\n");
    
          switch (cmd)
          {
          case TUNERRWD :
          case DIARWD :
            SerPrint("rwd\r\n");
            IRRwd();
            break;
          case TUNERFWD :
          case DIAFWD :
            SerPrint("fwd\r\n");
            IRFwd();
            break;
          case TUNERLEFT :
          case DIALEFT:
            SerPrint("lft\r\n");
            IRLeft();
            break;
          case TUNERRIGHT :
          case DIARIGHT:
            SerPrint("rgt\r\n");
            IRRight();
            break;
          case TUNERSTOP :
          case DIASTOP :
            SerPrint("stp\r\n");
            IRStop();
            break;
          }
        }
        if (speedLeft > 0 && speedLeft <  OFFSET) speedLeft += OFFSET;
        if (speedLeft < 0 && speedLeft > -OFFSET) speedLeft -= OFFSET;
        if (speedRight > 0 && speedRight <  OFFSET) speedRight += OFFSET;
        if (speedRight < 0 && speedRight > -OFFSET) speedRight -= OFFSET;
    
        leftDir = rightDir = FWD;
        if (speedLeft < 0)  leftDir = RWD;
        if (speedRight < 0) rightDir = RWD;
    
        if (speedLeft >   255) speedLeft  =  255;
        if (speedLeft <  -255) speedLeft  = -255;
        if (speedRight >  255) speedRight =  255;
        if (speedRight < -255) speedRight = -255;
    
        MotorDir(leftDir,rightDir);
        MotorSpeed(abs(speedLeft),abs(speedRight));
        Msleep(100);
      }
      return 0;
    }
    Dieses Programm "RC5-Test" habe ich im "Examples"-Ordner der "asuro_libv271" gefunden und es soll, soweit ich es verstanden habe, die Fernsteuerung des Asuros durch eine RC5-Codefähige Fernbedienung ermöglichen.

    Ich habe eine gefunden, die das kann und das Programm funktioniert, es ist jedoch so, dass er sich durch einzelnes Tastendrücken nicht bewegt.
    Er wird z.B. durch gedrückt halten der "Channel+" Taste auf der Fernbedienung immer schneller bis zum Erreichen des Maximums nach ~15-20sec ich möchte jedoch, dass er durch einzelnes Tastendrücken eine moderate Geschwindigkeit erreicht.
    Weiß jemand hier, wie man das machen kann?

    Ich selbst verstehe von dem Programm noch nicht besonders viel, allgemein habe ich nicht so viel Ahnung von C-Programmierung, deshalb frage ich hier!



    Ich hoffe jemand kann mir helfen und ich bedanke mich im vorraus schon mal für jegliche Hilfe!


    Gruß
    Seuche

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2009
    Beiträge
    19
    Hat niemand ne Idee? Vorallem im Bezug auf das Fernsteuerungsprogramm brauch ich wirklich Hilfe, das versteh ich nämlich überhaupt nicht!

    Dass mein Asuro nicht genau gerade fährt sondern eine leichte Rechtskurve macht liegt wohl an schiefen Achsen o.Ä.
    Habe heute mal Zettelchen an die Räder geklebt und ihn mehrere Minuten fahren lassen und sie waren immer noch gleichauf!

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.01.2008
    Alter
    26
    Beiträge
    239
    hallo seuche

    zu deiner frage bezügliche ir-fernsteuerung:

    wenn man es mal druchschaut hat sind die grundlagen nicht mal so schwer:

    hier wird einfach ein wert in cmd abgespeichert, der einer bestimmten taste entspricht:
    Code:
        cmd = ReadRC5();
        if (cmd)
        {
          cmd &= RC5_MASK;
    hier erfolgt dann die auswertung, was gemacht werden soll:
    Code:
          switch (cmd)
          {
          case TUNERRWD :  //taste rückwärts fahren gedrückt
          case DIARWD :
            SerPrint("rwd\r\n");
            IRRwd();             //funktion für rückwärts fahren aufrufen
            break;
          case TUNERFWD :  //taste vorwärts fahren gedrückt
          case DIAFWD :
            SerPrint("fwd\r\n");
            IRFwd();              //funktion für vorwärts fahren aufrufen
            break;
          case TUNERLEFT :  //taste links fahren gedrückt
          case DIALEFT:
            SerPrint("lft\r\n");
            IRLeft();             //funktion für links fahren aufrufen
            break;
          case TUNERRIGHT :  //taste rechts fahren gedrückt
          case DIARIGHT:
            SerPrint("rgt\r\n");
            IRRight();             //funktion für rechts fahren aufrufen
            break;
          case TUNERSTOP :  //taste stehen bleiben
          case DIASTOP :
            SerPrint("stp\r\n");
            IRStop();             //funktion für stehen bleiben
            break;
          }
    hinter TUNERSTOP, DIASTOP, TUNERRIGHT,... verbergen sich nur zahlen, die oben definiert sind
    Code:
    #define DIARWD   0x1008
    #define DIAFWD   0x1002
    #define DIALEFT  0x1004
    #define DIARIGHT 0x1006
    #define DIASTOP  0x1029
    
    #define TUNERRWD   0x1021
    #define TUNERFWD   0x1020
    #define TUNERLEFT  0x1011
    #define TUNERRIGHT 0x1010
    #define TUNERSTOP  0x1025
    dadurch ist leichter ersichtlich, was man damit erreichen will. die entsprechende zahl für eine taste kann man in tabellen heraus suchen

    im nächsten abschnitt werd kontrolliet, ob die geschwindigkeiten im erlaubten bereich sind (>=OFFSET und <=255) und die motorfunktionen werden mit den ermittelten werten aufgerufen
    Code:
        if (speedLeft > 0 && speedLeft <  OFFSET) speedLeft += OFFSET;
        if (speedLeft < 0 && speedLeft > -OFFSET) speedLeft -= OFFSET;
        if (speedRight > 0 && speedRight <  OFFSET) speedRight += OFFSET;
        if (speedRight < 0 && speedRight > -OFFSET) speedRight -= OFFSET;
    
        leftDir = rightDir = FWD;
        if (speedLeft < 0)  leftDir = RWD;
        if (speedRight < 0) rightDir = RWD;
    
        if (speedLeft >   255) speedLeft  =  255;
        if (speedLeft <  -255) speedLeft  = -255;
        if (speedRight >  255) speedRight =  255;
        if (speedRight < -255) speedRight = -255;
    
        MotorDir(leftDir,rightDir);
        MotorSpeed(abs(speedLeft),abs(speedRight));



    wenn du nun möchtest, dass beim drücken von "vorwärts" nicht langsam beschleunigt wird, sondern eine bestimmte geschwindigkeit vorgegeben werden soll brauchst du nur die funktion IRFwd() entsprechend abändern
    z.B:
    Code:
    void IRFwd(void)
    {
      speedRight =200;   //mit 200/200 vorwärts
      speedLeft  =200;
      
      FrontLED(ON);
      BackLED(OFF,OFF);
    }
    die anderen funktionen kannst du ebenfalls anpassen. dann sollte es wie gewünscht funktioneren


    ich hoffe, das hilft dir bei diesem problem weiter
    mfg hai1991

    P.S.: wer großbuchstaben oder rechtschreibfehler findet darf sie behalten

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2009
    Beiträge
    19
    Danke für deine Antwort, ich habe aber momentan das Problem, dass er auf die Fernbedienung nicht mehr reagiert ??

    Ich versteh nicht warum, habe zwischendurch nur andere Programme auf dem Asuro gehabt und danach wieder "RC-5 Test" draufgeflasht und er reagiert auf die selbe Fernbedienung, die ich vorher benutzt habe, nicht mehr.

    Habe alle Codes noch mal durchprobiert und mit einer anderen "Phillips
    SRU3040 II"-Universal geht es auch nicht!

    Flashen kann ich aber noch, hat jemand eine Idee woran es liegen könnte?

    Gruß
    Seuche

  5. #5
    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

    Vielleicht sind die Batterien/Akkus leer. Der IR-Empfänger (IC2) auf dem asuro hat einen ungünstig dimensionierten Vorwiderstand (R17, 470Ohm) und reagiert deshalb empfindlich auf eine zu niedrige Bordspannung. Im Datenblatt des SFH5110 werden <= 100Ohm vorgeschlagen (Seite 4, Bild 2). Zum schnellen Test könnte man den Widerstand überbrücken. Oder das Programm ohne drehende Motoren testen.

    Gruß

    mic

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

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2009
    Beiträge
    19
    Zitat Zitat von radbruch
    Hallo

    Vielleicht sind die Batterien/Akkus leer. Der IR-Empfänger (IC2) auf dem asuro hat einen ungünstig dimensionierten Vorwiderstand (R17, 470Ohm) und reagiert deshalb empfindlich auf eine zu niedrige Bordspannung. Im Datenblatt des SFH5110 werden <= 100Ohm vorgeschlagen (Seite 4, Bild 2). Zum schnellen Test könnte man den Widerstand überbrücken. Oder das Programm ohne drehende Motoren testen.

    Gruß

    mic
    Werd ich direkt mal probieren, bzw. die Batterien tauschen!

    Könnte es auch sein, dass der IC2 nicht mehr richtig funktioniert oder kaputt ist, obwohl ich noch einwandfrei flashen kann?

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2009
    Beiträge
    19
    Batterienwechsel hat leider nichts gebracht, ich habe keinen Schimmer, warum das nicht mehr geht

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Schade. Wenn das Flashen funktioniert ist der IR-Empfänger sicher nicht defekt. Ist es auch das richtige Programm bzw. das richtige Hexfile? Aktuelle Version? Kann das Terminal mit dem IR-Transceiver etwas von der Fernbedienung empfangen? Tut sich hier was:
    Code:
    // Test des IR-Empfängers                                            14.5.09 mic
    
    // Port D0 ist der RXD-Pin des Mega8 an dem das Signal des SFH5110 ankommt
    
    #include "asuro.h"
    
    int main(void)
    {
       Init();
       while(1) if(PIND & (1 << PD0)) StatusLED(YELLOW); else StatusLED(RED);
    }
    (nicht getestet)

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

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2009
    Beiträge
    19
    Das Programm ist das von oben:

    Code:
    /*******************************************************************************
    *
    * File Name:   IRDemo.c
    * Project  :   Demo
    *
    * Description: This file contains IRDemo features
    *
    * Ver.     Date         Author           Comments
    * -------  ----------   --------------   ------------------------------
    * 1.00      14.08.2003   Jan Grewe       build
    * 2.00     22.10.2003   Jan Grewe        angepasst auf asuro.c Ver.2.10
    *
    * Copyright (c) 2003 DLR Robotics & Mechatronics
    *****************************************************************************/
    /*!
      /file    IRDemo.c
      /brief    Routinen fuer die Dekodierung von RC5-Fernbedienungs-Codes
      /author    Benjamin Benz (bbe@heise.de), m.a.r.v.i.n
    
      /version      V001 - 14.08.2003 - Jan Grewe
                    initial build
          V002 - 22.10.2003 - Jan Grewe
                    angepasst auf asuro.c Ver.2.10
                    V003 - 11.02.2007 - m.a.r.v.i.n
          c't-Bot RC5 Code portiert fuer den ASURO
    */
    /***************************************************************************
     *                                                                         *
     *   This program is free software; you can redistribute it and/or modify  *
     *   it under the terms of the GNU General Public License as published by  *
     *   the Free Software Foundation; either version 2 of the License, or     *
     *   any later version.                                                    *
     ***************************************************************************/
    
    #include "asuro.h"
    #include "rc5.h"
    #include <stdlib.h>
    
    #define DIARWD   0x1008
    #define DIAFWD   0x1002
    #define DIALEFT  0x1004
    #define DIARIGHT 0x1006
    #define DIASTOP  0x1029
    
    #define TUNERRWD   0x1021
    #define TUNERFWD   0x1020
    #define TUNERLEFT  0x1011
    #define TUNERRIGHT 0x1010
    #define TUNERSTOP  0x1025
    
    #define OFFSET   0x3F
    #define STEP   5
    
    int speedLeft,speedRight;
    
    void IRFwd(void)
    {
      speedRight += STEP;
      speedLeft  += STEP;
      if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
      if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
      FrontLED(ON);
      BackLED(OFF,OFF);
    }
    
    void IRRwd(void)
    {
      speedRight -= STEP;
      speedLeft  -= STEP;
      if (speedRight > 0 && speedRight <= OFFSET)  speedRight = -1;
      if (speedLeft > 0 && speedLeft <= OFFSET)  speedLeft = -1;
      FrontLED(OFF);
      BackLED(ON,ON);
    }
    
    void IRLeft (void)
    {
      speedLeft  -= STEP;
      if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
      speedRight += STEP;
      if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
      FrontLED(OFF);
      BackLED(ON,OFF);
    }
    
    void IRRight (void)
    {
      speedLeft  += STEP;
      if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
      speedRight -= STEP;
      if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
      FrontLED(OFF);
      BackLED(OFF,ON);
    }
    
    
    void IRStop(void)
    {
      speedRight = speedLeft = 0;
      FrontLED(OFF);
      BackLED(OFF,OFF);
    }
    
    int main(void)
    {
    
      static unsigned int cmd;
      unsigned char leftDir = FWD, rightDir = FWD;
      char text[7];
    
      Init();
      InitRC5();
    
      SerPrint("RC5 Test\r\n");
      while (1)
      {
        cmd = ReadRC5();
        if (cmd)
        {
          cmd &= RC5_MASK;
          itoa(cmd, text, 16);
          SerPrint(text);
          SerPrint("\r\n");
    
          switch (cmd)
          {
          case TUNERRWD :
          case DIARWD :
            SerPrint("rwd\r\n");
            IRRwd();
            break;
          case TUNERFWD :
          case DIAFWD :
            SerPrint("fwd\r\n");
            IRFwd();
            break;
          case TUNERLEFT :
          case DIALEFT:
            SerPrint("lft\r\n");
            IRLeft();
            break;
          case TUNERRIGHT :
          case DIARIGHT:
            SerPrint("rgt\r\n");
            IRRight();
            break;
          case TUNERSTOP :
          case DIASTOP :
            SerPrint("stp\r\n");
            IRStop();
            break;
          }
        }
        if (speedLeft > 0 && speedLeft <  OFFSET) speedLeft += OFFSET;
        if (speedLeft < 0 && speedLeft > -OFFSET) speedLeft -= OFFSET;
        if (speedRight > 0 && speedRight <  OFFSET) speedRight += OFFSET;
        if (speedRight < 0 && speedRight > -OFFSET) speedRight -= OFFSET;
    
        leftDir = rightDir = FWD;
        if (speedLeft < 0)  leftDir = RWD;
        if (speedRight < 0) rightDir = RWD;
    
        if (speedLeft >   255) speedLeft  =  255;
        if (speedLeft <  -255) speedLeft  = -255;
        if (speedRight >  255) speedRight =  255;
        if (speedRight < -255) speedRight = -255;
    
        MotorDir(leftDir,rightDir);
        MotorSpeed(abs(speedLeft),abs(speedRight));
        Msleep(100);
      }
      return 0;
    }
    Das Hyperterminal hab ich parallel am laufen gehabt, da ist immer was gekommen.

    Ich probier mal das Programm von dir, danke. Ich geb dann wieder bescheid.

    Das Ding ist jetzt auch, ich hab die Fernbedienung mit der es funktioniert hat, umgetauscht gegen eine andere, da es mit der alten nicht mehr funktionierte.
    Gerade versuche ich es mit 2 neuen und unserer Universal-Fernbedienung für unseren Fernseher. (2x Tevion, 1x Philips - alles Universal)
    Daran kann es ja nicht wirklich liegen, da auch die alte nicht ging und von den neuen müsste er ja auch auf irgendeine eine Reaktion zeigen!

    Gruß
    Seuche

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    04.05.2009
    Beiträge
    19
    Die Tasten, die ich auch für das Programm brauche lassen die StatusLED flackern, das müsste also empfangen worden sein, oder?

    Der Fehler liegt dann wohl doch an der Fernbedienung oder im Programm?

    Gruß
    Seuche

    PS: Vielen Dank für deine Hilfe!

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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