Nathan Yonkee
/
DotStarPoi
poi using dot stars as lights
Fork of DotStarWall by
main.cpp@4:41434d1bd6cc, 2017-08-15 (annotated)
- Committer:
- Nathan Yonkee
- Date:
- Tue Aug 15 08:36:13 2017 -0600
- Revision:
- 4:41434d1bd6cc
- Parent:
- 0:eacf3b13ce5a
configure gyrometer to use offsets and use only 2 colors at a time
Who changed what in which revision?
User | Revision | Line number | New 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 | } |