Dependencies:   mbed

main.cpp

Committer:
alex89
Date:
2009-12-06
Revision:
0:76b1b51d98f6

File content as of revision 0:76b1b51d98f6:

#include "mbed.h"
#include "Servo.h"

DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
DigitalOut myled4(LED4);

char code[] = "1234";

Serial pc(USBTX, USBRX);      // debugging

//--------------- IC2 trial ---------------

const int address = 0x30;

// write value into register regno, return success
bool write_reg(int regno, int value)
{
  char data[2] = {regno, value}; 
  return i2c.write(address, data, 2) == 0;
}

// read value from register regno, return success
bool read_reg(int regno, int *value)
{
  char data = regno; 
  if (i2c.write(address, &data, 1) == 0 && i2c.read(address, &data, 1) == 0)
  {
    *value = data;
    return true;
  }
  return false;
}

// read complete value of X axis, return it or -1 on failure
int read_x()
{
  int low, high;
  if ( read_reg(XOUT_H, &high) && read_reg(XOUT_L, &low) )
    return high<<8 | low;
  else
    return -1;
}

void accData(){

    DigitalOut enable(p26);    //enable pin
    I2C i2c(p28, p27);         // accelerometer
    
    enable = 1; //set enable pin to 1
    i2c.frequency(400000); //set frequency to 400 KHz
    
    const int CTRL_REGB = 0x0D;
    const int CTRL_REGC = 0x0C;
    
    write_reg(CTRL_REGB, 0xC2);
    write_reg(CTRL_REGC, 0x00);
    printf("X axis: %d\n", read_x());
    

    
    /*
    const int address = 0x97; //slave address
    
    char data[12];
    
    data[0] = 0x42;
    i2c.write(CTRL_REGB, data, 1); // register CTRL_REGB to 0x42 (start condition)
    
    wait(0.1);
    
    data[0] = 0x00;
    i2c.write(CTRL_REGC, data, 1); // register CTRL_REGC to 0x00 (start condition)
    
    wait(0.1);
    
    data[0] = 0x00;
    i2c.write(address, data, 1); // tell accelerometer i want to talk to it?

    wait(0.1);
    
    const int XOUT_H = 0x00; //x high register
    const int XOUT_L = 0x01; //x low register

    for(int i = 0; i < 10; i++){
        pc.printf("x high: '%s'\n", i2c.read(XOUT_H, data, 12));
        wait(0.1);
        pc.printf("x low: '%s'\n", i2c.read(XOUT_L, data, 12));
        wait(0.1);
    }

    enable = 0;

    
    pc.printf("started\n");
    
    
    for (int i = 0; i < 10; i++){ //get 10 results
    
        const int CTRL_REGB = 0x0D;
        const int CTRL_REGC = 0x0C;

        cmd[0] = 0x2;
        i2c.write(addr, data, 2);
        
        i2c.read(addr, data, 8); // read the echo result

        // print the ranging data to the screen
        //float echo = 0.01 * ((cmd[0] << 8) + cmd[1]);
        
        pc.printf ("Data: %s\n", cmd);

        wait(0.1);
    }
    
    i2c.write(
    
    wait(0.07);
    
    const int XOUT_H = 0x00;
    const int XOUT_L = 0x01;
    
    i2c.read(XOUT_H, data, 8); // read the result
    pc.printf ("XOUT_H: '%s'\n", data);
    
    wait(0.07);
    
    i2c.read(XOUT_L, data, 8); // read the result
    pc.printf ("XOUT_L: '%s'\n", data);    
    */

}


//--------------- Servo position reset ---------------

void resetServo(){

Servo myServo (p21);          // steering servo

  int i;
  bool j = 0;

  //clockwise 180
  for (i=0 ; i<200 ; i++){
    myServo = i/100.0;
    wait (0.01);
    if(i%10==0){
        j = !j;
        myled1 = j;
    }
  }
  
  pc.printf("Servo at full rotation\n");
  
  //wait a second
  for (i = 0; i < 10; i++){
     wait (0.1);
     j = !j;
     myled2 = j;
  }
  
  pc.printf("End pause\n");
  
  //back to start
  for (i=100 ; i>0 ; i--){
    myServo = i/100.0;
    wait (0.01);
    if(i%10==0){
        j = !j;
        myled3 = j;
    }
  }
  pc.printf("Servo at default position\n");
}

//--------------- Turning all LEDs off or on ---------------

void all(bool status){

        myled1 = status;
        myled2 = status;
        myled3 = status;
        myled4 = status;
        
}


//--------------- Digital pin checking ---------------

void checkPin5(){

DigitalIn input5(p5);

//check for pin 5
  while(1) {
      if(input5){
          myled4 = !myled4;
          pc.printf("pin 5 in!\n");
      }
      wait(0.1);
  }
}

//--------------- Get key number ---------------

int keyNum(){

DigitalIn col1(p18);
DigitalIn col2(p20);
DigitalIn col3(p16);

DigitalOut row1(p19);
DigitalOut row2(p14);
DigitalOut row3(p15);
DigitalOut row4(p17);

    row1 = 1;
    row2 = 0;
    row3 = 0;
    row4 = 0;
    
    if (col1)
        return 1;
    else if (col2)
        return 2;
    else if (col3)
        return 3; 
        
    row1 = 0;
    row2 = 1;
    row3 = 0;
    row4 = 0;
    
    if (col1)
        return 4;
    else if (col2)
        return 5;
    else if (col3)
        return 6;     
    
    row1 = 0;
    row2 = 0;
    row3 = 1;
    row4 = 0;
    
    if (col1)
        return 7;
    else if (col2)
        return 8;
    else if (col3)
        return 9;  
        
    row1 = 0;
    row2 = 0;
    row3 = 0;
    row4 = 1;
    
    if (col1)
        return 10;
    else if (col2)
        return 0;
    else if (col3)
        return 11;  
                   
    row1 = 0;
    row2 = 0;
    row3 = 0;
    row4 = 0;
    
    return -1;
}

//--------------- Check against code ---------------

bool getCode(){

    char codeTry[] = "";
    int previous = -1;
    int a = -1;
    
    while(strlen(codeTry) < strlen(code)){
    
        int cycles = 0;
    
        while ((a == previous && cycles < 40) || a == -1){ //keep looping until different to last, or held down
            a = keyNum();
            cycles++;
            wait(0.01);
        }
       
        sprintf(codeTry, "%s%d", codeTry, a);
        
        switch(strlen(codeTry)){
            case 1: myled1 = 1; break;
            case 2: myled2 = 1; break;
            case 3: myled3 = 1; break;
            case 4: myled4 = 1;
        }
        
        previous = a;
        wait (0.1);
    }
    
    all(0);
    
    pc.printf("code entered: '%s'\n", codeTry);
    
    if(strcmp(code, codeTry) == 0){
        return true;
    }
    
    return false;
}

//--------------- Check what key is pressed ---------------

void keyCheck(){

    bool j = 0;
    
    while (1){
        int a = keyNum();
        if(a == 11){     //on hash close the app
            myled1 = 0;
            break;
        }
        if(a!=-1){
            pc.printf("%d\n", a); //send key to pc
        }
        
        j = !j;
        myled1 = j;        //flash LED1
        
        wait (0.1);
    }
}

//---------------- Door keypad ---------------

void doorlock(){

    bool password = getCode();

    if (password){
        pc.printf("Password correct\n");
        resetServo();
    } else {
        all(1);
        wait(0.5);
        all(0);
        pc.printf("Password incorrect\n");
    }
}

//-------------------- Main -------------------

int main() {
    
    pc.printf("Program started\n");
    
    accData();
    
    //doorlock();
    //resetServo();
    
    pc.printf("Program complete\n\n");
}