Lol smth

Dependencies:   LocalPositionSystem MMA8451Q Motor_Driver Sensors mbed

Fork of TDP_main_BartFork by Yelfie

main.cpp

Committer:
Reckstyle
Date:
2015-03-20
Revision:
20:198dc13777eb
Parent:
19:d277614084bc
Child:
21:e8da3b351cd0

File content as of revision 20:198dc13777eb:

// TESTING REPO COMMIT

/*
****** MAIN PROGRAM ******



Please consider that although it is an embedded envrionment we are NOT creating a HARD-TIME real time system - delays can be dealt with


Sensors are mapped on the global variable sensorsCheckSum,
which multiplies the sensor number by itself to then decode,
 which sensors are off and which are on
ie. if sensor rightright - sensorChecksum = 1*1 = 1
    if rightright and rightcentre - sensorChecksum = 1*1 + 2*2 = 5
    ...
*/



#include "mbed.h"
#include "sensor_measure.h"
#include "Motor_Driver.h"
#include "shooter.h"
//#include "Sensors.h"

#define PWM_PERIOD_US 10000


//DigitalOut led(LED1);

Serial HC06(PTE0,PTE1); //TX,RX
//Serial pc(USBTX, USBRX);

Timer measureTimer; //Timer used for measurement

//Motor_Driver motors(PTD4, PTA12, PTA4, PTA5, PTC9, PTC8, PWM_PERIOD_US);

typedef enum  mode {REGULAR,SQUARE} mode; //enumeration for different states
mode driveMode; //declaring the variable for the states
int sensorsCheckSum; //varibale used for sensors mapping access
int passedTime1,passedTime2;


void measureSensors () {
    sensorsCheckSum = 0; //zero it when first going into the routine
    int iterationNumber = NUMBER_SENSORS_REGULAR;
    if (driveMode == SQUARE) {
          iterationNumber += NUMBER_SENSORS_SQUARE;
    }
    for (int i = 0; i < iterationNumber;i++){
        //pc.printf("%i  iteration%i ",i,iterationNumber);
        if (measure(sensorArray[i]) == 1) {//if sensor is white 
            sensorsCheckSum += (i+1)*(i+1);
        }
    }    
    //pc.printf("sensorsCheckSum is %i",sensorsCheckSum);
}

void printBluetooth() { //for debugging
    
    pc.printf("LLU%i  LRU%i               rlu%i rru%i\n",sensorArray[1]->state,sensorArray[0]->state,sensorArray[1]->state,sensorArray[0]->state);
    pc.printf("LLD%i  LRD%i               rld%i rrd%i\n\n",sensorArray[3]->state,sensorArray[2]->state,sensorArray[3]->state,sensorArray[2]->state);
    //HC06.printf("%i  %i               %i %i",sensorArray[NUMBER_SENSORS_REGULAR-3]->state,sensorArray[NUMBER_SENSORS_REGULAR-4]->state,sensorArray[3]->state,sensorArray[2]->state);
    //HC06.printf("%i      %i/n%i      %i,sensorArray[NUMBER_SENSORS_REGULAR]->state,sensorArray[NUMBER_SENSORS_REGULAR+1]->state,sensorArray[NUMBER_SENSORS_REGULAR+2]->state,sensorArray[NUMBER_SENSORS_REGULAR+3]->state);        
    //HC06.printf("%f                      %f",motor.getLeftSpeed(),motor.getRightSpeed());
    pc.printf("sensorCheckSum%i\n\n",sensorsCheckSum);
    //HC06.printf("passedTime1 %i passedTime2 \n\n",passedTime1,passedTime2);
}

int main() {
    
    
    
    Motor_Driver motors(PTA5, PTC9, PTC8,PTD4, PTA12, PTA4, PWM_PERIOD_US);
    
  //  motors.setSpeed(0.1f);
//    motors.forward();
//    motors.start();
//    wait(2);
//    float x=0.1f;
//    while (1) {
//        motors.setLeftSpeed(x);
//        x = x+0.05;
//        wait(3);
//        }
//    motors.setLeftSpeed(0.1f);
//    wait(5);
//    motors.setLeftSpeed(0.2f);
//    motors.setRightSpeed (0.2f);
//    wait(3);
//    motors.setRightSpeed (0.1f);
//    wait(5);
//    motors.stop();
    
    //wait(1);
//    motors.reverse();
//    wait(5);
//    motors.stop();
//    motors.setSpeed(0.5f);
//    motors.start();
//    wait(5);
//    motors.stop();
//    wait(1);
//    motors.reverse();
    
   
    
    //motors.start();
    
 //   setup_counter(1000, 0);
  //  float frequency = measure_frequency(CHANNEL_1);
    measureTimer.start();
    driveMode = REGULAR; //initialise drivemoder
    sensor_initialise(); // initialise sensor values
    wait(1); //give time to set up the system
    
    sensorTimer.start(); // start timer for sensors
    float normalSpeed = 0.01f;
    HC06.baud(9600);
    HC06.printf("working..");
    motors.setSpeed(normalSpeed);
    motors.forward();
    motors.start();
    
    
    
    wait(3);
    while(1){
        
        measureSensors();
        //measureTimer.reset();
        printBluetooth();
        //passedTime1 = measureTimer.read_ms();
        if (sensorsCheckSum == 0) {
            motors.setSpeed(normalSpeed);
            }
        else if (sensorsCheckSum == 1 || sensorsCheckSum == 9 || sensorsCheckSum == 10 || sensorsCheckSum == 14 || sensorsCheckSum==26){
            motors.setLeftSpeed(normalSpeed/2);
            
            motors.setRightSpeed(normalSpeed*6);
        }
        else if (sensorsCheckSum == 4 && sensorsCheckSum ==16 || sensorsCheckSum == 20 || sensorsCheckSum ==21 ||sensorsCheckSum== 29) {
            motors.setRightSpeed(normalSpeed/2);
            motors.setLeftSpeed(normalSpeed*9);
        }
        else {
            motors.setSpeed(normalSpeed);
        }
        
    }
    
   
    //HC06.printf("AT");
    //HC06.printf("AT+PIN5555");
    

   // pc.printf("Start...");
    /*
    int testOtherCases = 0; //needed for control statements
    while (1) {
       
       if (driveMode == REGULAR) {
          measureSensors();
          switch (sensorsCheckSum) {
            case 94: //go straight
                break;
            case 95: //Turn right seriously
                break;
            case 104: //Turn right as well
                break;
            
            case 158: //Turn left seriously
                pc.printf ("only Right is white \n");
                break;
            case 194 :   //Turn left seriously again
                pc.printf ("only Left is white \n");
                break;
            case 103 :  //RRD is white all else normal
                pc.printf ("both are white \n");
                break;
            
//          case 204: 
//            driveMode = SQUARE; //if all sensors are white you're in the square
//            break;
          default: //checksum is zero , all are black
            testOtherCases = 1; 
            break;
          } 
          if (testOtherCases == 1) {
            if (sensorsCheckSum < 96){ // adjust right
                }   
            else   {//adjust left
                }
            testOtherCases = 0;
          }    
          */
//              
//        
//           
//        }
//       else { //if (driveMode == SQUARE}
//        //implement the square searching thing..
//       
//       }
//       
//       
//    }
//    
        
}