poi using dot stars as lights

Dependencies:   DotStarStrips

Fork of DotStarWall by Nathan Yonkee

Committer:
Nathan Yonkee
Date:
Tue Aug 15 08:38:50 2017 -0600
Revision:
5:ea207473236e
Parent:
4:41434d1bd6cc
use updated DotStarStrips library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nathan Yonkee 4:41434d1bd6cc 1 #include "DotStar.h"
tulanthoar 0:eacf3b13ce5a 2 #include "rtos.h"
tulanthoar 0:eacf3b13ce5a 3
Nathan Yonkee 4:41434d1bd6cc 4 enum Init {brightness = 4, i2cHz = 400000, baud = 9600};
Nathan Yonkee 4:41434d1bd6cc 5 enum Register{ WHO_AM_I = 0x75, PWR_MGMT_1 = 0x6b, GYRO_CONFIG = 0x1b, CONFIG = 0x1a, GYRO_OFFSET = 0x13, GYRO = 0x43 };
tulanthoar 0:eacf3b13ce5a 6
Nathan Yonkee 4:41434d1bd6cc 7 Serial dev(USBTX,USBRX);
Nathan Yonkee 4:41434d1bd6cc 8 DigitalOut cts(PA_6, 0);
Nathan Yonkee 4:41434d1bd6cc 9 SPI spiOne(PB_5, PB_4, PB_3);
Nathan Yonkee 4:41434d1bd6cc 10 I2C accel(PA_10,PA_9);
Nathan Yonkee 4:41434d1bd6cc 11 const int nLedsA = 65;
Nathan Yonkee 4:41434d1bd6cc 12 const int accRead = 0x68 << 1;
Nathan Yonkee 4:41434d1bd6cc 13 const int accWrite = accRead | 0x01;
Nathan Yonkee 4:41434d1bd6cc 14
Nathan Yonkee 4:41434d1bd6cc 15 struct XYZAccel {
Nathan Yonkee 4:41434d1bd6cc 16 int16_t x,y,z;
tulanthoar 0:eacf3b13ce5a 17 };
tulanthoar 0:eacf3b13ce5a 18
Nathan Yonkee 4:41434d1bd6cc 19 XYZAccel getXYZ() {
Nathan Yonkee 4:41434d1bd6cc 20 XYZAccel result;
Nathan Yonkee 4:41434d1bd6cc 21 char reg[1] = {Register::GYRO};
Nathan Yonkee 4:41434d1bd6cc 22 char data[6];
Nathan Yonkee 4:41434d1bd6cc 23 int ret = accel.write(accWrite,reg,1, true);
Nathan Yonkee 4:41434d1bd6cc 24 ret = accel.read(accRead,data,6);
Nathan Yonkee 4:41434d1bd6cc 25 result.x = (((int16_t)data[0]) << 8) | data[1];
Nathan Yonkee 4:41434d1bd6cc 26 result.y = (((int16_t)data[2]) << 8) | data[3];
Nathan Yonkee 4:41434d1bd6cc 27 result.z = (((int16_t)data[4]) << 8) | data[5];
Nathan Yonkee 4:41434d1bd6cc 28 return result;
tulanthoar 0:eacf3b13ce5a 29 };
tulanthoar 0:eacf3b13ce5a 30
Nathan Yonkee 4:41434d1bd6cc 31 int main() {
Nathan Yonkee 4:41434d1bd6cc 32 DotStar dotStarA(&spiOne, nLedsA);
Nathan Yonkee 4:41434d1bd6cc 33 Thread::wait(1000);
Nathan Yonkee 4:41434d1bd6cc 34 accel.frequency(Init::i2cHz);
Nathan Yonkee 4:41434d1bd6cc 35 dev.baud(Init::baud);
Nathan Yonkee 4:41434d1bd6cc 36 /* for (int i = 1; i < DotStar::brightest; i += 4) { */
Nathan Yonkee 4:41434d1bd6cc 37 /* dotStarA.set_brightness(i); */
Nathan Yonkee 4:41434d1bd6cc 38 /* } */
Nathan Yonkee 4:41434d1bd6cc 39 dotStarA.set_brightness(DotStar::half);
Nathan Yonkee 4:41434d1bd6cc 40 int ret = 0;
Nathan Yonkee 4:41434d1bd6cc 41 char reg[1];
Nathan Yonkee 4:41434d1bd6cc 42 char data[7] = {};
Nathan Yonkee 4:41434d1bd6cc 43 reg[0] = Register::WHO_AM_I;
Nathan Yonkee 4:41434d1bd6cc 44 if(accel.write(accWrite,reg,1, true) != 0){
Nathan Yonkee 4:41434d1bd6cc 45 dev.printf("writing RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 46 };
Nathan Yonkee 4:41434d1bd6cc 47 ret = accel.read(accRead,data,1);
Nathan Yonkee 4:41434d1bd6cc 48 if (ret != 0) dev.printf("reading RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 49 dev.printf("%i\n",data[0]);
tulanthoar 0:eacf3b13ce5a 50
Nathan Yonkee 4:41434d1bd6cc 51 reg[0] = PWR_MGMT_1;
Nathan Yonkee 4:41434d1bd6cc 52 ret = accel.write(accWrite,reg,1, true);
Nathan Yonkee 4:41434d1bd6cc 53 if (ret != 0) dev.printf("writing RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 54 ret = accel.read(accRead,data,1);
Nathan Yonkee 4:41434d1bd6cc 55 if (ret != 0) dev.printf("reading RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 56 dev.printf("%i\n",data[0]);
Nathan Yonkee 4:41434d1bd6cc 57 data[0] &= ~(1<< 6);
Nathan Yonkee 4:41434d1bd6cc 58 dev.printf("%i\n",data[0]);
Nathan Yonkee 4:41434d1bd6cc 59 data[0] |= 1;
Nathan Yonkee 4:41434d1bd6cc 60 dev.printf("%i\n",data[0]);
Nathan Yonkee 4:41434d1bd6cc 61 data[1] = data[0];
Nathan Yonkee 4:41434d1bd6cc 62 data[0]= reg[0];
Nathan Yonkee 4:41434d1bd6cc 63 ret = accel.write(accWrite,data,2);
Nathan Yonkee 4:41434d1bd6cc 64 if (ret != 0) dev.printf("writing data failed\n");
tulanthoar 0:eacf3b13ce5a 65
Nathan Yonkee 4:41434d1bd6cc 66 ret = accel.write(accWrite,reg,1, true);
Nathan Yonkee 4:41434d1bd6cc 67 if (ret != 0) dev.printf("writing RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 68 ret = accel.read(accRead,data,1);
Nathan Yonkee 4:41434d1bd6cc 69 if (ret != 0) dev.printf("reading RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 70 dev.printf("%i\n",data[0]);
Nathan Yonkee 4:41434d1bd6cc 71
Nathan Yonkee 4:41434d1bd6cc 72 reg[0] = Register::GYRO_CONFIG;
Nathan Yonkee 4:41434d1bd6cc 73 ret = accel.write(accWrite,reg,1, true);
Nathan Yonkee 4:41434d1bd6cc 74 if (ret != 0) dev.printf("writing RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 75 ret = accel.read(accRead,data,1);
Nathan Yonkee 4:41434d1bd6cc 76 if (ret != 0) dev.printf("reading RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 77 dev.printf("%i\n",data[0]);
Nathan Yonkee 4:41434d1bd6cc 78 data[0] |= 1<< 4;
Nathan Yonkee 4:41434d1bd6cc 79 data[0] |= 1<< 3;
Nathan Yonkee 4:41434d1bd6cc 80 data[0] &= ~1;
Nathan Yonkee 4:41434d1bd6cc 81 data[0] &= ~(1<<1);
Nathan Yonkee 4:41434d1bd6cc 82 dev.printf("%i\n",data[0]);
Nathan Yonkee 4:41434d1bd6cc 83 data[1] = data[0];
Nathan Yonkee 4:41434d1bd6cc 84 data[0]= reg[0];
Nathan Yonkee 4:41434d1bd6cc 85 ret = accel.write(accWrite,data,2);
Nathan Yonkee 4:41434d1bd6cc 86 if (ret != 0) dev.printf("writing data failed\n");
tulanthoar 0:eacf3b13ce5a 87
Nathan Yonkee 4:41434d1bd6cc 88 reg[0] = Register::CONFIG;
Nathan Yonkee 4:41434d1bd6cc 89 ret = accel.write(accWrite,reg,1, true);
Nathan Yonkee 4:41434d1bd6cc 90 if (ret != 0) dev.printf("writing RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 91 ret = accel.read(accRead,data,1);
Nathan Yonkee 4:41434d1bd6cc 92 if (ret != 0) dev.printf("reading RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 93 dev.printf("%i\n",data[0]);
Nathan Yonkee 4:41434d1bd6cc 94 data[0] &= ~(1<< 2);
Nathan Yonkee 4:41434d1bd6cc 95 data[0] &= ~1;
Nathan Yonkee 4:41434d1bd6cc 96 data[0] &= ~(1<< 1);
Nathan Yonkee 4:41434d1bd6cc 97 dev.printf("%i\n",data[0]);
Nathan Yonkee 4:41434d1bd6cc 98 data[1] = data[0];
Nathan Yonkee 4:41434d1bd6cc 99 data[0]= reg[0];
Nathan Yonkee 4:41434d1bd6cc 100 ret = accel.write(accWrite,data,2);
Nathan Yonkee 4:41434d1bd6cc 101 if (ret != 0) dev.printf("writing data failed\n");
tulanthoar 0:eacf3b13ce5a 102
Nathan Yonkee 4:41434d1bd6cc 103 reg[0] = Register::GYRO_OFFSET;
Nathan Yonkee 4:41434d1bd6cc 104 ret = accel.write(accWrite,reg,1, true);
Nathan Yonkee 4:41434d1bd6cc 105 if (ret != 0) dev.printf("writing RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 106 ret = accel.read(accRead,data,6);
Nathan Yonkee 4:41434d1bd6cc 107 if (ret != 0) dev.printf("reading RA failed\n");
Nathan Yonkee 4:41434d1bd6cc 108 for (int i = 6; i < 1; --i) {
Nathan Yonkee 4:41434d1bd6cc 109 data[i] = data[i-1];
tulanthoar 0:eacf3b13ce5a 110 }
Nathan Yonkee 4:41434d1bd6cc 111 data[0] = reg[0];
Nathan Yonkee 4:41434d1bd6cc 112 data[1] = -1;
Nathan Yonkee 4:41434d1bd6cc 113 data[3] = -1;
Nathan Yonkee 4:41434d1bd6cc 114 data[5] = -1;
Nathan Yonkee 4:41434d1bd6cc 115 data[2] = -1;
Nathan Yonkee 4:41434d1bd6cc 116 data[4] = -8;
Nathan Yonkee 4:41434d1bd6cc 117 data[6] = -18;
Nathan Yonkee 4:41434d1bd6cc 118 ret = accel.write(accWrite,data,7);
Nathan Yonkee 4:41434d1bd6cc 119 if (ret != 0) dev.printf("writing data failed\n");
Nathan Yonkee 4:41434d1bd6cc 120 Thread::wait(500);
Nathan Yonkee 4:41434d1bd6cc 121
Nathan Yonkee 4:41434d1bd6cc 122 /* for(int i = 0; i < 5; ++i){ */
Nathan Yonkee 4:41434d1bd6cc 123 /* reg[0] = 0x43; */
Nathan Yonkee 4:41434d1bd6cc 124 /* ret = accel.write(accWrite,reg,1, true); */
Nathan Yonkee 4:41434d1bd6cc 125 /* if (ret != 0) dev.printf("writing RA failed\n"); */
Nathan Yonkee 4:41434d1bd6cc 126 /* ret = accel.read(accRead,data,6); */
Nathan Yonkee 4:41434d1bd6cc 127 /* if (ret != 0) dev.printf("reading RA failed\n"); */
Nathan Yonkee 4:41434d1bd6cc 128 /* int16_t xAcc = (((int16_t)data[0]) << 8) | (int16_t)(data[1]); */
Nathan Yonkee 4:41434d1bd6cc 129 /* int16_t yAcc = (((int16_t)data[2]) << 8) | (int16_t)(data[3]); */
Nathan Yonkee 4:41434d1bd6cc 130 /* int16_t zAcc = (((int16_t)data[4]) << 8) | (int16_t)(data[5]); */
Nathan Yonkee 4:41434d1bd6cc 131 /* dev.printf("x:%i ",(xAcc)); */
Nathan Yonkee 4:41434d1bd6cc 132 /* dev.printf("y:%i ",(yAcc)); */
Nathan Yonkee 4:41434d1bd6cc 133 /* dev.printf("z:%i\n",(zAcc)); */
Nathan Yonkee 4:41434d1bd6cc 134 /* Thread::wait(500); */
Nathan Yonkee 4:41434d1bd6cc 135 /* } */
Nathan Yonkee 4:41434d1bd6cc 136
Nathan Yonkee 4:41434d1bd6cc 137 /* Thread::wait(100); */
Nathan Yonkee 4:41434d1bd6cc 138 /* uint8_t dataInt = accel.read(0); */
Nathan Yonkee 4:41434d1bd6cc 139 /* accel.stop(); */
Nathan Yonkee 4:41434d1bd6cc 140 /* reg[0] = 0x75; */
Nathan Yonkee 4:41434d1bd6cc 141 /* reg[0] = 6; */
Nathan Yonkee 4:41434d1bd6cc 142 /* ret = accel.write(i2caddr,reg, 2); */
Nathan Yonkee 4:41434d1bd6cc 143 /* ret = accel.read(i2caddr,data,1); */
Nathan Yonkee 4:41434d1bd6cc 144 /* reg[0] = 0x1c; */
Nathan Yonkee 4:41434d1bd6cc 145 /* reg[1] = 0; */
Nathan Yonkee 4:41434d1bd6cc 146 /* ret = accel.write(i2caddr,reg,2); */
Nathan Yonkee 4:41434d1bd6cc 147 /* dotStarA.set_brightness(ret*10); */
Nathan Yonkee 4:41434d1bd6cc 148 /* reg[0] = 0x3b; */
Nathan Yonkee 4:41434d1bd6cc 149 /* ret = accel.write(i2caddr,reg,1); */
Nathan Yonkee 4:41434d1bd6cc 150 /* dotStarA.set_brightness(ret*10); */
Nathan Yonkee 4:41434d1bd6cc 151 /* ret = accel.read(i2caddr,data,6); */
Nathan Yonkee 4:41434d1bd6cc 152 /* dotStarA.set_brightness(ret*10); */
Nathan Yonkee 4:41434d1bd6cc 153 /* struct Dirs{float x, y, z;}; */
Nathan Yonkee 4:41434d1bd6cc 154 /* Dirs a; */
Nathan Yonkee 4:41434d1bd6cc 155 /* a.x = short( (((short)data[1]) << 8) | data[0] ); */
Nathan Yonkee 4:41434d1bd6cc 156 /* a.y = short( (((short)data[3]) << 8) | data[2] ); */
Nathan Yonkee 4:41434d1bd6cc 157 /* a.z = short( (((short)data[5]) << 8) | data[4] ); */
Nathan Yonkee 4:41434d1bd6cc 158 /* if(data[0] > -1 && data[0] < 4) dev.putc('y'); */
Nathan Yonkee 4:41434d1bd6cc 159 /* dev.printf("%f",(a.x)); */
Nathan Yonkee 4:41434d1bd6cc 160 /* dev.printf("%f",(a.y)); */
Nathan Yonkee 4:41434d1bd6cc 161 /* dev.printf("%f",(a.z)); */
Nathan Yonkee 4:41434d1bd6cc 162 dotStarA.set_brightness(DotStar::half);
Nathan Yonkee 4:41434d1bd6cc 163 for (;;) {
Nathan Yonkee 4:41434d1bd6cc 164 XYZAccel xyzData = getXYZ();
Nathan Yonkee 4:41434d1bd6cc 165 RedGreenBlue rgb;
Nathan Yonkee 4:41434d1bd6cc 166 rgb.red = abs(xyzData.x)>>6;
Nathan Yonkee 4:41434d1bd6cc 167 rgb.green = abs(xyzData.y)>>6;
Nathan Yonkee 4:41434d1bd6cc 168 rgb.blue = abs(xyzData.z)>>6;
Nathan Yonkee 4:41434d1bd6cc 169 if(rgb.red < rgb.green && rgb.red < rgb.blue) rgb.red = 0;
Nathan Yonkee 4:41434d1bd6cc 170 else if(rgb.blue < rgb.green && rgb.blue < rgb.red) rgb.blue = 0;
Nathan Yonkee 4:41434d1bd6cc 171 else rgb.green = 0;
Nathan Yonkee 4:41434d1bd6cc 172 dotStarA.set_rgb(rgb);
tulanthoar 0:eacf3b13ce5a 173 }
tulanthoar 0:eacf3b13ce5a 174
tulanthoar 0:eacf3b13ce5a 175 }