Dependencies:   mbed

Revision:
0:76b1b51d98f6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Dec 06 07:29:17 2009 +0000
@@ -0,0 +1,369 @@
+#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");
+}