Seat Matrix Code back and seat

Dependencies:   SoftPWM

Fork of Matrix_Test_3 by Ben Walker

Committer:
bwalker001
Date:
Mon Mar 12 00:01:08 2018 +0000
Revision:
1:334ae7ccb918
Parent:
0:a4b52dc3fb96
Working, serial output (back1234,seat123456789)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bwalker001 0:a4b52dc3fb96 1 #include "mbed.h"
bwalker001 0:a4b52dc3fb96 2
bwalker001 0:a4b52dc3fb96 3 #include "SoftPWM.h"
bwalker001 0:a4b52dc3fb96 4
bwalker001 1:334ae7ccb918 5 //SPI spi(p23, p24, p25); // mosi, miso, sclk
bwalker001 1:334ae7ccb918 6 //DigitalOut cs(p22);
bwalker001 0:a4b52dc3fb96 7
bwalker001 0:a4b52dc3fb96 8 AnalogIn ain(A5);
bwalker001 0:a4b52dc3fb96 9
bwalker001 0:a4b52dc3fb96 10 #define RESISTOR 46500
bwalker001 0:a4b52dc3fb96 11
bwalker001 0:a4b52dc3fb96 12 /*
bwalker001 0:a4b52dc3fb96 13 DigitalOut led1(LED1);
bwalker001 0:a4b52dc3fb96 14 DigitalOut led2(LED2);
bwalker001 0:a4b52dc3fb96 15 DigitalOut led3(LED3);
bwalker001 0:a4b52dc3fb96 16 DigitalOut led4(LED4);*/
bwalker001 0:a4b52dc3fb96 17
bwalker001 0:a4b52dc3fb96 18 SoftPWM led1(LED1);
bwalker001 0:a4b52dc3fb96 19 SoftPWM led2(LED2);
bwalker001 0:a4b52dc3fb96 20 SoftPWM led3(LED3);
bwalker001 0:a4b52dc3fb96 21 SoftPWM led4(LED4);
bwalker001 0:a4b52dc3fb96 22
bwalker001 1:334ae7ccb918 23 //DigitalOut output(D11);
bwalker001 1:334ae7ccb918 24 DigitalOut muxPower(D12);
bwalker001 0:a4b52dc3fb96 25
bwalker001 0:a4b52dc3fb96 26 DigitalOut mux0(D2);
bwalker001 0:a4b52dc3fb96 27 DigitalOut mux1(D1);
bwalker001 0:a4b52dc3fb96 28 DigitalOut mux2(D0);
bwalker001 0:a4b52dc3fb96 29
bwalker001 1:334ae7ccb918 30 DigitalOut colS0(D3);
bwalker001 1:334ae7ccb918 31 DigitalOut colS1(D4);
bwalker001 1:334ae7ccb918 32 DigitalOut colS2(D5);
bwalker001 1:334ae7ccb918 33
bwalker001 1:334ae7ccb918 34 DigitalOut colB0(D10);
bwalker001 1:334ae7ccb918 35 DigitalOut colB1(D11);
bwalker001 1:334ae7ccb918 36
bwalker001 1:334ae7ccb918 37
bwalker001 1:334ae7ccb918 38 //Seat Row 1,2,3: Grey, White Pink
bwalker001 1:334ae7ccb918 39 //Seat Col 1,2,3: Yellow, Purple, Blue
bwalker001 1:334ae7ccb918 40
bwalker001 1:334ae7ccb918 41 //Back Row 1,2: Green, Red
bwalker001 1:334ae7ccb918 42 //Back Col 1,2: Pink, Black
bwalker001 0:a4b52dc3fb96 43
bwalker001 1:334ae7ccb918 44 //Seat: 3x3 matrix of square sensors
bwalker001 1:334ae7ccb918 45 //Back: 2x2 matrix, row 1 (bottom) is 2 square, row 2 (top) is 2 circular
bwalker001 1:334ae7ccb918 46
bwalker001 1:334ae7ccb918 47 //Mux: rowS1, rowS2, rowS3, rowB1, rowB2
bwalker001 1:334ae7ccb918 48
bwalker001 1:334ae7ccb918 49 float seatrowreadings[3][3];
bwalker001 1:334ae7ccb918 50 float seatrowsum[3];
bwalker001 1:334ae7ccb918 51
bwalker001 1:334ae7ccb918 52 float backrowreadings[2][2];
bwalker001 1:334ae7ccb918 53 float backrowsum[2];
bwalker001 1:334ae7ccb918 54
bwalker001 1:334ae7ccb918 55 int seatdata[3][3];
bwalker001 1:334ae7ccb918 56 int backdata[2][2];
bwalker001 0:a4b52dc3fb96 57
bwalker001 0:a4b52dc3fb96 58 Serial pc(USBTX, USBRX);
bwalker001 0:a4b52dc3fb96 59
bwalker001 0:a4b52dc3fb96 60 // main() runs in its own thread in the OS
bwalker001 1:334ae7ccb918 61 void muxSelect(int input){
bwalker001 1:334ae7ccb918 62 mux0=input%2;
bwalker001 1:334ae7ccb918 63 mux1=((int)(input/2))%2;
bwalker001 1:334ae7ccb918 64 mux2=((int)(input/4))%2;
bwalker001 1:334ae7ccb918 65 }
bwalker001 1:334ae7ccb918 66
bwalker001 1:334ae7ccb918 67 void seatColSelect(int input){
bwalker001 1:334ae7ccb918 68 if(input==0){
bwalker001 1:334ae7ccb918 69 colS0=1;
bwalker001 1:334ae7ccb918 70 colS1=0;
bwalker001 1:334ae7ccb918 71 colS2=0;
bwalker001 1:334ae7ccb918 72 }
bwalker001 1:334ae7ccb918 73 if(input==1){
bwalker001 1:334ae7ccb918 74 colS0=0;
bwalker001 1:334ae7ccb918 75 colS1=1;
bwalker001 1:334ae7ccb918 76 colS2=0;
bwalker001 1:334ae7ccb918 77 }
bwalker001 1:334ae7ccb918 78 if(input==2){
bwalker001 1:334ae7ccb918 79 colS0=0;
bwalker001 1:334ae7ccb918 80 colS1=0;
bwalker001 1:334ae7ccb918 81 colS2=1;
bwalker001 1:334ae7ccb918 82 }
bwalker001 1:334ae7ccb918 83
bwalker001 1:334ae7ccb918 84 }
bwalker001 1:334ae7ccb918 85
bwalker001 1:334ae7ccb918 86
bwalker001 1:334ae7ccb918 87 void backColSelect(int input){
bwalker001 1:334ae7ccb918 88 if(input==0){
bwalker001 1:334ae7ccb918 89 colB0=1;
bwalker001 1:334ae7ccb918 90 colB1=0;
bwalker001 1:334ae7ccb918 91 }
bwalker001 1:334ae7ccb918 92 if(input==1){
bwalker001 1:334ae7ccb918 93 colB0=0;
bwalker001 1:334ae7ccb918 94 colB1=1;
bwalker001 1:334ae7ccb918 95 }
bwalker001 1:334ae7ccb918 96
bwalker001 1:334ae7ccb918 97 }
bwalker001 1:334ae7ccb918 98
bwalker001 0:a4b52dc3fb96 99 int main()
bwalker001 0:a4b52dc3fb96 100 {
bwalker001 0:a4b52dc3fb96 101 led1.period_ms( 1 ); //set up pwm
bwalker001 0:a4b52dc3fb96 102 led2.period_ms( 1 );
bwalker001 0:a4b52dc3fb96 103 led3.period_ms( 1 );
bwalker001 0:a4b52dc3fb96 104 led4.period_ms( 1 );
bwalker001 0:a4b52dc3fb96 105 pc.baud (115200);
bwalker001 0:a4b52dc3fb96 106
bwalker001 1:334ae7ccb918 107 //cs = 1;// Chip must be deselected
bwalker001 0:a4b52dc3fb96 108
bwalker001 0:a4b52dc3fb96 109 // Setup the spi for 8 bit data, high steady state clock,
bwalker001 0:a4b52dc3fb96 110 // second edge capture, with a 1MHz clock rate
bwalker001 1:334ae7ccb918 111 //spi.format(8,3);
bwalker001 1:334ae7ccb918 112 //spi.frequency(1000000);
bwalker001 0:a4b52dc3fb96 113
bwalker001 1:334ae7ccb918 114 /*cs = 0;// Select the device by seting chip select low
bwalker001 0:a4b52dc3fb96 115 spi.write(0x0A); //write mode
bwalker001 0:a4b52dc3fb96 116 spi.write(0x2D); // power register
bwalker001 0:a4b52dc3fb96 117 spi.write(0x02); //enable measurement mode
bwalker001 0:a4b52dc3fb96 118 cs = 1;// Deselect the device
bwalker001 1:334ae7ccb918 119 */
bwalker001 0:a4b52dc3fb96 120 //__disable_irq(); //the tick(?) runs every 1ms, and halts everything for 50uS!
bwalker001 1:334ae7ccb918 121
bwalker001 1:334ae7ccb918 122 muxPower=1;
bwalker001 0:a4b52dc3fb96 123 while(1) {
bwalker001 0:a4b52dc3fb96 124
bwalker001 1:334ae7ccb918 125 //wait(0.5);
bwalker001 1:334ae7ccb918 126 /*cs = 0;// Select the device by seting chip select low
bwalker001 0:a4b52dc3fb96 127 spi.write(0x0B); //read mode
bwalker001 0:a4b52dc3fb96 128 spi.write(0x08); // X axis
bwalker001 0:a4b52dc3fb96 129 int xacc=spi.write(0x00); //dummy byte to get data
bwalker001 0:a4b52dc3fb96 130 cs = 1;// Deselect the device
bwalker001 0:a4b52dc3fb96 131
bwalker001 0:a4b52dc3fb96 132 cs = 0;// Select the device by seting chip select low
bwalker001 0:a4b52dc3fb96 133 spi.write(0x0B); //read mode
bwalker001 0:a4b52dc3fb96 134 spi.write(0x09); // Y axis
bwalker001 0:a4b52dc3fb96 135 int yacc=spi.write(0x00); //dummy byte to get data
bwalker001 0:a4b52dc3fb96 136 cs = 1;// Deselect the device
bwalker001 0:a4b52dc3fb96 137
bwalker001 0:a4b52dc3fb96 138 cs = 0;// Select the device by seting chip select low
bwalker001 0:a4b52dc3fb96 139 spi.write(0x0B); //read mode
bwalker001 0:a4b52dc3fb96 140 spi.write(0x0A); // Z axis
bwalker001 0:a4b52dc3fb96 141 int zacc=spi.write(0x00); //dummy byte to get data
bwalker001 0:a4b52dc3fb96 142 cs = 1;// Deselect the device
bwalker001 0:a4b52dc3fb96 143
bwalker001 1:334ae7ccb918 144 */
bwalker001 0:a4b52dc3fb96 145 //printf("X = 0x%X\n, Y = 0x%X\n, Z = 0x%X\n, ", xacc,yacc,zacc);
bwalker001 0:a4b52dc3fb96 146
bwalker001 1:334ae7ccb918 147 /*mux0=0;
bwalker001 0:a4b52dc3fb96 148 mux1=0;
bwalker001 1:334ae7ccb918 149 mux2=0; //select Y0*/
bwalker001 1:334ae7ccb918 150 muxSelect(0);
bwalker001 1:334ae7ccb918 151 seatColSelect(0);
bwalker001 1:334ae7ccb918 152 /*col0=1;
bwalker001 1:334ae7ccb918 153 col1=0; //select col 0*/
bwalker001 1:334ae7ccb918 154
bwalker001 1:334ae7ccb918 155 seatrowreadings[0][0]=ain;
bwalker001 0:a4b52dc3fb96 156
bwalker001 1:334ae7ccb918 157 /*col0=0;
bwalker001 1:334ae7ccb918 158 col1=1; //select col 1*/
bwalker001 1:334ae7ccb918 159 seatColSelect(1);
bwalker001 1:334ae7ccb918 160 seatrowreadings[0][1]=ain;
bwalker001 1:334ae7ccb918 161
bwalker001 1:334ae7ccb918 162 seatColSelect(2);
bwalker001 1:334ae7ccb918 163 seatrowreadings[0][2]=ain;
bwalker001 1:334ae7ccb918 164
bwalker001 1:334ae7ccb918 165 seatrowsum[0]=0.0f;
bwalker001 1:334ae7ccb918 166 for(int i=0; i<3; i++) {
bwalker001 1:334ae7ccb918 167 seatrowsum[0]+=seatrowreadings[0][i];
bwalker001 1:334ae7ccb918 168 }
bwalker001 1:334ae7ccb918 169
bwalker001 1:334ae7ccb918 170 for(int i=0; i<3; i++) {
bwalker001 1:334ae7ccb918 171 seatdata[0][i]=(1-seatrowsum[0])*RESISTOR/seatrowreadings[0][i];
bwalker001 1:334ae7ccb918 172 }
bwalker001 1:334ae7ccb918 173
bwalker001 1:334ae7ccb918 174 muxSelect(1);
bwalker001 1:334ae7ccb918 175 /*mux0=1;
bwalker001 1:334ae7ccb918 176 mux1=0;
bwalker001 1:334ae7ccb918 177 mux2=0; //select Y0*/
bwalker001 1:334ae7ccb918 178
bwalker001 1:334ae7ccb918 179 seatColSelect(0);
bwalker001 1:334ae7ccb918 180 /*col0=1;
bwalker001 1:334ae7ccb918 181 col1=0; //select col 0*/
bwalker001 0:a4b52dc3fb96 182
bwalker001 1:334ae7ccb918 183 seatrowreadings[1][0]=ain;
bwalker001 1:334ae7ccb918 184 /*
bwalker001 0:a4b52dc3fb96 185 col0=0;
bwalker001 1:334ae7ccb918 186 col1=1; //select col 1*/
bwalker001 1:334ae7ccb918 187
bwalker001 1:334ae7ccb918 188 seatColSelect(1);
bwalker001 1:334ae7ccb918 189 seatrowreadings[1][1]=ain;
bwalker001 1:334ae7ccb918 190
bwalker001 1:334ae7ccb918 191 seatColSelect(2);
bwalker001 1:334ae7ccb918 192 seatrowreadings[1][2]=ain;
bwalker001 1:334ae7ccb918 193
bwalker001 1:334ae7ccb918 194 seatrowsum[1]=0.0f;
bwalker001 1:334ae7ccb918 195 for(int i=0; i<3; i++) {
bwalker001 1:334ae7ccb918 196 seatrowsum[1]+=seatrowreadings[1][i];
bwalker001 1:334ae7ccb918 197 }
bwalker001 1:334ae7ccb918 198
bwalker001 1:334ae7ccb918 199 for(int i=0; i<3; i++) {
bwalker001 1:334ae7ccb918 200 seatdata[1][i]=(1-seatrowsum[1])*RESISTOR/seatrowreadings[1][i];
bwalker001 1:334ae7ccb918 201 }
bwalker001 1:334ae7ccb918 202
bwalker001 1:334ae7ccb918 203
bwalker001 1:334ae7ccb918 204 muxSelect(2);
bwalker001 1:334ae7ccb918 205
bwalker001 1:334ae7ccb918 206 seatColSelect(0);
bwalker001 1:334ae7ccb918 207 seatrowreadings[2][0]=ain;
bwalker001 1:334ae7ccb918 208
bwalker001 1:334ae7ccb918 209 seatColSelect(1);
bwalker001 1:334ae7ccb918 210 seatrowreadings[2][1]=ain;
bwalker001 1:334ae7ccb918 211
bwalker001 1:334ae7ccb918 212 seatColSelect(2);
bwalker001 1:334ae7ccb918 213 seatrowreadings[2][2]=ain;
bwalker001 1:334ae7ccb918 214
bwalker001 1:334ae7ccb918 215 seatrowsum[2]=0.0f;
bwalker001 1:334ae7ccb918 216 for(int i=0; i<3; i++) {
bwalker001 1:334ae7ccb918 217 seatrowsum[2]+=seatrowreadings[2][i];
bwalker001 1:334ae7ccb918 218 }
bwalker001 1:334ae7ccb918 219
bwalker001 1:334ae7ccb918 220 for(int i=0; i<3; i++) {
bwalker001 1:334ae7ccb918 221 seatdata[2][i]=(1-seatrowsum[2])*RESISTOR/seatrowreadings[2][i];
bwalker001 1:334ae7ccb918 222 }
bwalker001 1:334ae7ccb918 223
bwalker001 1:334ae7ccb918 224 //seat only //pc.printf("%i,%i,%i,%i,%i,%i,%i,%i,%i\n", seatdata[0][0], seatdata[0][1], seatdata[0][2], seatdata[1][0], seatdata[1][1], seatdata[1][2], seatdata[2][0], seatdata[2][1], seatdata[2][2]);
bwalker001 1:334ae7ccb918 225 //formatted seat //pc.printf("%i,%i,%i \n%i,%i,%i \n%i,%i,%i\n\n", seatdata[0][0], seatdata[0][1], seatdata[0][2], seatdata[1][0], seatdata[1][1], seatdata[1][2], seatdata[2][0], seatdata[2][1], seatdata[2][2]);
bwalker001 1:334ae7ccb918 226
bwalker001 1:334ae7ccb918 227
bwalker001 1:334ae7ccb918 228
bwalker001 1:334ae7ccb918 229
bwalker001 1:334ae7ccb918 230 muxSelect(3);
bwalker001 1:334ae7ccb918 231
bwalker001 1:334ae7ccb918 232 backColSelect(0);
bwalker001 1:334ae7ccb918 233 backrowreadings[0][0]=ain;
bwalker001 1:334ae7ccb918 234
bwalker001 1:334ae7ccb918 235 backColSelect(1);
bwalker001 1:334ae7ccb918 236 backrowreadings[0][1]=ain;
bwalker001 1:334ae7ccb918 237
bwalker001 1:334ae7ccb918 238 backrowsum[0]=0.0f;
bwalker001 0:a4b52dc3fb96 239 for(int i=0; i<2; i++) {
bwalker001 1:334ae7ccb918 240 backrowsum[0]+=backrowreadings[0][i];
bwalker001 0:a4b52dc3fb96 241 }
bwalker001 0:a4b52dc3fb96 242
bwalker001 0:a4b52dc3fb96 243 for(int i=0; i<2; i++) {
bwalker001 1:334ae7ccb918 244 backdata[0][i]=(1-backrowsum[0])*RESISTOR/backrowreadings[0][i];
bwalker001 0:a4b52dc3fb96 245 }
bwalker001 0:a4b52dc3fb96 246
bwalker001 0:a4b52dc3fb96 247
bwalker001 1:334ae7ccb918 248 muxSelect(4);
bwalker001 1:334ae7ccb918 249
bwalker001 1:334ae7ccb918 250 backColSelect(0);
bwalker001 1:334ae7ccb918 251 backrowreadings[1][0]=ain;
bwalker001 0:a4b52dc3fb96 252
bwalker001 1:334ae7ccb918 253 backColSelect(1);
bwalker001 1:334ae7ccb918 254 backrowreadings[1][1]=ain;
bwalker001 1:334ae7ccb918 255
bwalker001 1:334ae7ccb918 256 backrowsum[1]=0.0f;
bwalker001 0:a4b52dc3fb96 257 for(int i=0; i<2; i++) {
bwalker001 1:334ae7ccb918 258 backrowsum[1]+=backrowreadings[1][i];
bwalker001 0:a4b52dc3fb96 259 }
bwalker001 0:a4b52dc3fb96 260
bwalker001 0:a4b52dc3fb96 261 for(int i=0; i<2; i++) {
bwalker001 1:334ae7ccb918 262 backdata[1][i]=(1-backrowsum[1])*RESISTOR/backrowreadings[1][i];
bwalker001 0:a4b52dc3fb96 263 }
bwalker001 1:334ae7ccb918 264
bwalker001 1:334ae7ccb918 265 //formatted back //pc.printf("%i,%i \n%i,%i \n\n", backdata[0][0], backdata[0][1], backdata[1][0], backdata[1][1]);
bwalker001 1:334ae7ccb918 266
bwalker001 1:334ae7ccb918 267 //formatted Full //pc.printf("%i,%i \n%i,%i \n\n %i,%i,%i \n%i,%i,%i \n%i,%i,%i\n\n\n", backdata[0][0], backdata[0][1], backdata[1][0], backdata[1][1], seatdata[0][0], seatdata[0][1], seatdata[0][2], seatdata[1][0], seatdata[1][1], seatdata[1][2], seatdata[2][0], seatdata[2][1], seatdata[2][2]);
bwalker001 1:334ae7ccb918 268 pc.printf("%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i\n", backdata[0][0], backdata[0][1], backdata[1][0], backdata[1][1], seatdata[0][0], seatdata[0][1], seatdata[0][2], seatdata[1][0], seatdata[1][1], seatdata[1][2], seatdata[2][0], seatdata[2][1], seatdata[2][2]);
bwalker001 1:334ae7ccb918 269
bwalker001 1:334ae7ccb918 270 /*led1=1.0f-((8000.0f-sensordata[0][0])/500.0f)*((8000.0f-sensordata[0][0])/500.0f)*((8000.0f-sensordata[0][0])/500.0f)/5000.0f;
bwalker001 0:a4b52dc3fb96 271 led2=1.0f-((8000.0f-sensordata[1][0])/500.0f)*((8000.0f-sensordata[1][0])/500.0f)*((8000.0f-sensordata[1][0])/500.0f)/5000.0f;
bwalker001 0:a4b52dc3fb96 272 led3=1.0f-((8000.0f-sensordata[0][1])/500.0f)*((8000.0f-sensordata[0][1])/500.0f)*((8000.0f-sensordata[0][1])/500.0f)/5000.0f;
bwalker001 0:a4b52dc3fb96 273 led4=1.0f-((8000.0f-sensordata[1][1])/500.0f)*((8000.0f-sensordata[1][1])/500.0f)*((8000.0f-sensordata[1][1])/500.0f)/5000.0f;
bwalker001 1:334ae7ccb918 274 */
bwalker001 0:a4b52dc3fb96 275 //wait(0.5);
bwalker001 0:a4b52dc3fb96 276 }
bwalker001 0:a4b52dc3fb96 277 }
bwalker001 0:a4b52dc3fb96 278