PCDemo.c

gehe zur Dokumentation dieser Datei
00001 /*******************************************************************************
00002 *
00003 * File Name:   PCDemo.c
00004 * Project  :   Demo
00005 *
00006 * Description: This file contains PCDemo (ASURO can be controlled over IR-Transceiver)
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 *****************************************************************************/
00015 /***************************************************************************
00016  *                                                                         *
00017  *   This program is free software; you can redistribute it and/or modify  *
00018  *   it under the terms of the GNU General Public License as published by  *
00019  *   the Free Software Foundation; either version 2 of the License, or     *
00020  *   any later version.                                                    *
00021  ***************************************************************************/
00022 #include "asuro.h"
00023 #include <stdlib.h>
00024 
00025 #define OFFSET  0x3F
00026 #define STEP    5
00027 
00028 #define RWD_KEY   '2'
00029 #define FWD_KEY   '8'
00030 #define LEFT_KEY  '4'
00031 #define RIGHT_KEY '6'
00032 #define STOP_KEY  '5'
00033 #define ESC_KEY   0x1B   // Programm Exit mit Escape Taste
00034 
00035 
00036 
00037 //volatile unsigned char switchPressed;
00038 int speedLeft,speedRight;
00039 /*
00040 SIGNAL (SIG_INTERRUPT1)
00041 {
00042   unsigned int i;
00043 
00044   DDRD |= SWITCHES;                             // Switches as Output
00045   SWITCH_ON;                                            // Output HIGH for measurement
00046   ADMUX = (1 << REFS0) | SWITCH;        // AVCC reference with external capacitor
00047   for (i = 0; i < 0xFE; i++);
00048 
00049   ADCSRA |= (1 << ADSC);                        // Start conversion
00050   while (!(ADCSRA & (1 << ADIF)));      // wait for conversion complete
00051   ADCSRA |= (1 << ADIF);                        // clear ADCIF
00052   i = ADCL + (ADCH << 8);
00053 
00054   // und ab gehts --- fahr zurück
00055   MotorDir(RWD,RWD);
00056   MotorSpeed(200,200);
00057   FrontLED(ON);
00058   BackLED(ON,ON);
00059   for (i = 0; i < 0xFFFD; i++);   // Sleep does not work here
00060 
00061   switchPressed = TRUE;
00062   SWITCH_OFF;
00063   DDRD &= ~SWITCHES;                                    // Switches as Input => ext. Int 1
00064 }
00065 */
00066 void PCFwd(void)
00067 {
00068   speedRight += STEP;
00069   speedLeft  += STEP;
00070   if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00071   if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00072   FrontLED(ON);
00073   BackLED(OFF,OFF);
00074 }
00075 
00076 void PCRwd(void)
00077 {
00078   speedRight -= STEP;
00079   speedLeft  -= STEP;
00080   if (speedRight > 0 && speedRight <= OFFSET)  speedRight = -1;
00081   if (speedLeft > 0 && speedLeft <= OFFSET)  speedLeft = -1;
00082   FrontLED(OFF);
00083   BackLED(ON,ON);
00084 }
00085 
00086 void PCLeft (void)
00087 {
00088   speedLeft  -= STEP;
00089   if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
00090   speedRight += STEP;
00091   if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00092   FrontLED(OFF);
00093   BackLED(ON,OFF);
00094 }
00095 
00096 void PCRight (void)
00097 {
00098   speedLeft  += STEP;
00099   if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00100   speedRight -= STEP;
00101   if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
00102   FrontLED(OFF);
00103   BackLED(OFF,ON);
00104 }
00105 
00106 
00107 void PCStop(void)
00108 {
00109   speedRight = speedLeft = 0;
00110   FrontLED(OFF);
00111   BackLED(OFF,OFF);
00112 }
00113 
00114 
00115 void PCDemo(void)
00116 {
00117   unsigned char cmd;
00118   unsigned char leftDir = FWD, rightDir = FWD;
00119 
00120   Init();
00121   SerPrint("PCDemo\r\n");
00122   StartSwitch();
00123   sei();
00124   for (;;)
00125   {
00126     cmd = 0;
00127     SerRead(&cmd,1,0xFFFE);
00128     switch (cmd)
00129     {
00130     case RWD_KEY :
00131       PCRwd();
00132       break;
00133     case FWD_KEY :
00134       PCFwd();
00135       break;
00136     case LEFT_KEY :
00137       PCLeft();
00138       break;
00139     case RIGHT_KEY :
00140       PCRight();
00141       break;
00142     case STOP_KEY :
00143       PCStop();
00144       break;
00145     case ESC_KEY :
00146       return;
00147       break;
00148     }
00149     if (speedLeft > 0 && speedLeft <  OFFSET) speedLeft += OFFSET;
00150     if (speedLeft < 0 && speedLeft > -OFFSET) speedLeft -= OFFSET;
00151     if (speedRight > 0 && speedRight <  OFFSET) speedRight += OFFSET;
00152     if (speedRight < 0 && speedRight > -OFFSET) speedRight -= OFFSET;
00153 
00154     if (switched)
00155     {
00156       speedLeft  = 0;
00157       speedRight = 0;
00158       switched = FALSE;
00159   // und ab gehts --- fahr zurück
00160       MotorDir(RWD,RWD);
00161       MotorSpeed(200,200);
00162       FrontLED(ON);
00163       BackLED(ON,ON);
00164       Msleep(1000);
00165     }
00166 
00167     leftDir = rightDir = FWD;
00168     if (speedLeft < 0)  leftDir = RWD;
00169     if (speedRight < 0) rightDir = RWD;
00170 
00171     if (speedLeft >   255) speedLeft  =  255;
00172     if (speedLeft <  -255) speedLeft  = -255;
00173     if (speedRight >  255) speedRight =  255;
00174     if (speedRight < -255) speedRight = -255;
00175 
00176     MotorDir(leftDir,rightDir);
00177     MotorSpeed(abs(speedLeft),abs(speedRight));
00178   }
00179 }
00180 
00181 #ifdef STAND_ALONE
00182 int main(void)
00183 {
00184   Init();
00185   while(1)
00186   {  
00187     PCDemo();
00188   }
00189   return 0;
00190 }
00191 #endif
00192 

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