Diff: main.cpp
- 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");
+}