This is for ICRS\' second generation Quadcopter

Dependencies:   mbed

Committer:
madcowswe
Date:
Fri Nov 18 18:23:33 2011 +0000
Revision:
0:0bbf2f16da9c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
madcowswe 0:0bbf2f16da9c 1
madcowswe 0:0bbf2f16da9c 2 //In here be functions related to Sensors
madcowswe 0:0bbf2f16da9c 3
madcowswe 0:0bbf2f16da9c 4 //
madcowswe 0:0bbf2f16da9c 5 void setupaccel() {
madcowswe 0:0bbf2f16da9c 6 i2c.start();
madcowswe 0:0bbf2f16da9c 7 i2c.write(ACCADDRESS << 1 | 0);
madcowswe 0:0bbf2f16da9c 8 i2c.write(7);
madcowswe 0:0bbf2f16da9c 9 i2c.write(1);
madcowswe 0:0bbf2f16da9c 10 i2c.stop();
madcowswe 0:0bbf2f16da9c 11 }
madcowswe 0:0bbf2f16da9c 12
madcowswe 0:0bbf2f16da9c 13 //
madcowswe 0:0bbf2f16da9c 14 void getaccel(signed char returnbuff[3]) {
madcowswe 0:0bbf2f16da9c 15 i2c.start();
madcowswe 0:0bbf2f16da9c 16 i2c.write(ACCADDRESS << 1 | 0);
madcowswe 0:0bbf2f16da9c 17 i2c.write(0);
madcowswe 0:0bbf2f16da9c 18 i2c.stop();
madcowswe 0:0bbf2f16da9c 19
madcowswe 0:0bbf2f16da9c 20 //Read the axis data
madcowswe 0:0bbf2f16da9c 21 i2c.read(ACCADDRESS << 1 | 1, (char*)returnbuff, 3);
madcowswe 0:0bbf2f16da9c 22
madcowswe 0:0bbf2f16da9c 23 for (int i = 0; i < 3; i++) {
madcowswe 0:0bbf2f16da9c 24 returnbuff[i] = returnbuff[i] << 2;
madcowswe 0:0bbf2f16da9c 25 returnbuff[i] /= 4;
madcowswe 0:0bbf2f16da9c 26 }
madcowswe 0:0bbf2f16da9c 27
madcowswe 0:0bbf2f16da9c 28 }
madcowswe 0:0bbf2f16da9c 29
madcowswe 0:0bbf2f16da9c 30 void calibgyro() {
madcowswe 0:0bbf2f16da9c 31
madcowswe 0:0bbf2f16da9c 32 //activating the wiimotion +
madcowswe 0:0bbf2f16da9c 33 i2c.start();
madcowswe 0:0bbf2f16da9c 34 //device address | write
madcowswe 0:0bbf2f16da9c 35 i2c.write(0x53 << 1 | 0);
madcowswe 0:0bbf2f16da9c 36 //register address
madcowswe 0:0bbf2f16da9c 37 i2c.write(0xfe);
madcowswe 0:0bbf2f16da9c 38 //data
madcowswe 0:0bbf2f16da9c 39 i2c.write(0x04);
madcowswe 0:0bbf2f16da9c 40 i2c.stop();
madcowswe 0:0bbf2f16da9c 41
madcowswe 0:0bbf2f16da9c 42 for (int i = 0; i < 100; i++) {
madcowswe 0:0bbf2f16da9c 43 //sending a 0x00 to flag that we want data
madcowswe 0:0bbf2f16da9c 44 i2c.start();
madcowswe 0:0bbf2f16da9c 45 //device address | write (note new address)
madcowswe 0:0bbf2f16da9c 46 i2c.write(0x52 << 1 | 0);
madcowswe 0:0bbf2f16da9c 47 //send 0x00
madcowswe 0:0bbf2f16da9c 48 i2c.write(0x00);
madcowswe 0:0bbf2f16da9c 49 i2c.stop();
madcowswe 0:0bbf2f16da9c 50
madcowswe 0:0bbf2f16da9c 51 //reading the data
madcowswe 0:0bbf2f16da9c 52 char wmpdata[6];
madcowswe 0:0bbf2f16da9c 53 i2c.read(0x52 << 1 | 1, wmpdata, 6);
madcowswe 0:0bbf2f16da9c 54 //pc.printf("%x %x %x %x %x %x\r\n", wmpdata[0], wmpdata[1], wmpdata[2], wmpdata[3], wmpdata[4], wmpdata[5]);
madcowswe 0:0bbf2f16da9c 55
madcowswe 0:0bbf2f16da9c 56 gyrcalib[0] += (((wmpdata[3] >> 2) << 8) + wmpdata[0]) / 100;
madcowswe 0:0bbf2f16da9c 57 gyrcalib[1] += (((wmpdata[4] >> 2) << 8) + wmpdata[1]) / 100;
madcowswe 0:0bbf2f16da9c 58 gyrcalib[2] += (((wmpdata[5] >> 2) << 8) + wmpdata[2]) / 100;
madcowswe 0:0bbf2f16da9c 59
madcowswe 0:0bbf2f16da9c 60 wait(0.05);
madcowswe 0:0bbf2f16da9c 61
madcowswe 0:0bbf2f16da9c 62 }
madcowswe 0:0bbf2f16da9c 63
madcowswe 0:0bbf2f16da9c 64 }
madcowswe 0:0bbf2f16da9c 65
madcowswe 0:0bbf2f16da9c 66 void getgyros(float gyrodata[3]) {
madcowswe 0:0bbf2f16da9c 67 //sending a 0x00 to flag that we want data
madcowswe 0:0bbf2f16da9c 68 i2c.start();
madcowswe 0:0bbf2f16da9c 69 //device address | write (note new address)
madcowswe 0:0bbf2f16da9c 70 i2c.write(0x52 << 1 | 0);
madcowswe 0:0bbf2f16da9c 71 //send 0x00
madcowswe 0:0bbf2f16da9c 72 i2c.write(0x00);
madcowswe 0:0bbf2f16da9c 73 i2c.stop();
madcowswe 0:0bbf2f16da9c 74
madcowswe 0:0bbf2f16da9c 75 //reading the data
madcowswe 0:0bbf2f16da9c 76 char wmpdata[6];
madcowswe 0:0bbf2f16da9c 77 i2c.read(0x52 << 1 | 1, wmpdata, 6);
madcowswe 0:0bbf2f16da9c 78
madcowswe 0:0bbf2f16da9c 79 //detect if we ever went into fast mode
madcowswe 0:0bbf2f16da9c 80 bool fastdiscard = !(wmpdata[3] & 0x02 && wmpdata[4] & 0x02 && wmpdata[3] & 0x01);
madcowswe 0:0bbf2f16da9c 81
madcowswe 0:0bbf2f16da9c 82 if (fastdiscard)
madcowswe 0:0bbf2f16da9c 83 myled = 1;
madcowswe 0:0bbf2f16da9c 84 else {
madcowswe 0:0bbf2f16da9c 85 gyrodata[0] = RPSPUNIT * -(((wmpdata[3] >> 2) << 8) + wmpdata[0] - gyrcalib[0]);
madcowswe 0:0bbf2f16da9c 86 gyrodata[1] = RPSPUNIT * (((wmpdata[4] >> 2) << 8) + wmpdata[1] - gyrcalib[1]);
madcowswe 0:0bbf2f16da9c 87 gyrodata[2] = RPSPUNIT * (((wmpdata[5] >> 2) << 8) + wmpdata[2] - gyrcalib[2]);
madcowswe 0:0bbf2f16da9c 88 }
madcowswe 0:0bbf2f16da9c 89
madcowswe 0:0bbf2f16da9c 90 //pc.printf("yaw: %f, pitch: %f, roll: %f\r\n", gyrodata[0], gyrodata[1], gyrodata[2]);
madcowswe 0:0bbf2f16da9c 91
madcowswe 0:0bbf2f16da9c 92 //wait(0.05);
madcowswe 0:0bbf2f16da9c 93
madcowswe 0:0bbf2f16da9c 94 }
madcowswe 0:0bbf2f16da9c 95
madcowswe 0:0bbf2f16da9c 96 #ifdef ALTSENSOR
madcowswe 0:0bbf2f16da9c 97 float getaltsensor() {
madcowswe 0:0bbf2f16da9c 98 return altsensor *
madcowswe 0:0bbf2f16da9c 99 }
madcowswe 0:0bbf2f16da9c 100 #endif