IRDemo.c

gehe zur Dokumentation dieser Datei
00001 /*******************************************************************************
00002 *
00003 * File Name:   IRDemo.c
00004 * Project  :   Demo
00005 *
00006 * Description: This file contains IRDemo features
00007 *
00008 * Ver.     Date         Author           Comments
00009 * -------  ----------   --------------   ------------------------------
00010 * 1.00     14.08.2003   Jan Grewe                build
00011 * 2.00     22.10.2003   Jan Grewe        angepasst auf asuro.c Ver.2.10
00012 *
00013 * Copyright (c) 2003 DLR Robotics & Mechatronics
00014 *****************************************************************************/
00027 /***************************************************************************
00028  *                                                                         *
00029  *   This program is free software; you can redistribute it and/or modify  *
00030  *   it under the terms of the GNU General Public License as published by  *
00031  *   the Free Software Foundation; either version 2 of the License, or     *
00032  *   any later version.                                                    *
00033  ***************************************************************************/
00034 
00035 #include "asuro.h"
00036 #include "rc5.h"
00037 #include <stdlib.h>
00038 
00039 #define DIARWD   0x1008
00040 #define DIAFWD   0x1002
00041 #define DIALEFT  0x1004
00042 #define DIARIGHT 0x1006
00043 #define DIASTOP  0x1029
00044 #define DIAPOWER 0x103D
00045 
00046 
00047 #define TUNERRWD   0x1021
00048 #define TUNERFWD   0x1020
00049 #define TUNERLEFT  0x1011
00050 #define TUNERRIGHT 0x1010
00051 #define TUNERSTOP  0x1025
00052 #define TUNERPOWER 0x100C
00053 
00054 #define OFFSET  0x3F
00055 #define STEP    5
00056 
00057 int speedLeft,speedRight;
00058 
00059 void IRFwd(void)
00060 {
00061   speedRight += STEP;
00062   speedLeft  += STEP;
00063   if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00064   if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00065   FrontLED(ON);
00066   BackLED(OFF,OFF);
00067 }
00068 
00069 void IRRwd(void)
00070 {
00071   speedRight -= STEP;
00072   speedLeft  -= STEP;
00073   if (speedRight > 0 && speedRight <= OFFSET)  speedRight = -1;
00074   if (speedLeft > 0 && speedLeft <= OFFSET)  speedLeft = -1;
00075   FrontLED(OFF);
00076   BackLED(ON,ON);
00077 }
00078 
00079 void IRLeft (void)
00080 {
00081   speedLeft  -= STEP;
00082   if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
00083   speedRight += STEP;
00084   if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00085   FrontLED(OFF);
00086   BackLED(ON,OFF);
00087 }
00088 
00089 void IRRight (void)
00090 {
00091   speedLeft  += STEP;
00092   if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00093   speedRight -= STEP;
00094   if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
00095   FrontLED(OFF);
00096   BackLED(OFF,ON);
00097 }
00098 
00099 
00100 void IRStop(void)
00101 {
00102   speedRight = speedLeft = 0;
00103   FrontLED(OFF);
00104   BackLED(OFF,OFF);
00105 }
00106 
00107 int IRDemo(void)
00108 {
00109 
00110   static unsigned int cmd;
00111   unsigned char leftDir = FWD, rightDir = FWD;
00112   char text[7];
00113 
00114   Init();
00115   InitRC5();
00116 
00117   SerPrint("RC5 Test\r\n");
00118   while (1)
00119   {
00120     cmd = ReadRC5();
00121     if (cmd)
00122     {
00123       cmd &= RC5_MASK;
00124       itoa(cmd, text, 16);
00125       SerPrint(text);
00126       SerPrint("\r\n");
00127 
00128       switch (cmd)
00129       {
00130       case TUNERRWD :
00131       case DIARWD :
00132         IRRwd();
00133         break;
00134       case TUNERFWD :
00135       case DIAFWD :
00136         IRFwd();
00137         break;
00138       case TUNERLEFT :
00139       case DIALEFT:
00140         IRLeft();
00141         break;
00142       case TUNERRIGHT :
00143       case DIARIGHT:
00144         IRRight();
00145         break;
00146       case TUNERSTOP :
00147       case DIASTOP :
00148         IRStop();
00149         break;
00150       case TUNERPOWER :
00151       case DIAPOWER :
00152         return 0;
00153         break;
00154       }
00155     }
00156     if (speedLeft > 0 && speedLeft <  OFFSET) speedLeft += OFFSET;
00157     if (speedLeft < 0 && speedLeft > -OFFSET) speedLeft -= OFFSET;
00158     if (speedRight > 0 && speedRight <  OFFSET) speedRight += OFFSET;
00159     if (speedRight < 0 && speedRight > -OFFSET) speedRight -= OFFSET;
00160 
00161     leftDir = rightDir = FWD;
00162     if (speedLeft < 0)  leftDir = RWD;
00163     if (speedRight < 0) rightDir = RWD;
00164 
00165     if (speedLeft >   255) speedLeft  =  255;
00166     if (speedLeft <  -255) speedLeft  = -255;
00167     if (speedRight >  255) speedRight =  255;
00168     if (speedRight < -255) speedRight = -255;
00169 
00170     MotorDir(leftDir,rightDir);
00171     MotorSpeed(abs(speedLeft),abs(speedRight));
00172     Msleep(100);
00173   }
00174   return 0;
00175 }
00176 
00177 #ifdef STAND_ALONE
00178 int main(void)
00179 {
00180   Init();
00181   while(1)
00182   {  
00183     IRDemo();
00184   }
00185   return 0;
00186 }
00187 #endif
00188 

Erzeugt am Mon Apr 9 13:28:39 2007 für ASURO Library von  doxygen 1.5.1-p1