Ben Walker
/
Matrix_Test_4
Seat Matrix Code back and seat
Fork of Matrix_Test_3 by
Revision 1:334ae7ccb918, committed 2018-03-12
- Comitter:
- bwalker001
- Date:
- Mon Mar 12 00:01:08 2018 +0000
- Parent:
- 0:a4b52dc3fb96
- Commit message:
- Working, serial output (back1234,seat123456789)
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Mar 07 10:07:30 2018 +0000 +++ b/main.cpp Mon Mar 12 00:01:08 2018 +0000 @@ -2,8 +2,8 @@ #include "SoftPWM.h" -SPI spi(p23, p24, p25); // mosi, miso, sclk -DigitalOut cs(p22); +//SPI spi(p23, p24, p25); // mosi, miso, sclk +//DigitalOut cs(p22); AnalogIn ain(A5); @@ -20,22 +20,82 @@ SoftPWM led3(LED3); SoftPWM led4(LED4); -DigitalOut output(D11); +//DigitalOut output(D11); +DigitalOut muxPower(D12); DigitalOut mux0(D2); DigitalOut mux1(D1); DigitalOut mux2(D0); -DigitalOut col0(D3); -DigitalOut col1(D4); +DigitalOut colS0(D3); +DigitalOut colS1(D4); +DigitalOut colS2(D5); + +DigitalOut colB0(D10); +DigitalOut colB1(D11); + + +//Seat Row 1,2,3: Grey, White Pink +//Seat Col 1,2,3: Yellow, Purple, Blue + +//Back Row 1,2: Green, Red +//Back Col 1,2: Pink, Black -float rowreadings[2][2]; -float rowsum[2]; -int sensordata[2][2]; +//Seat: 3x3 matrix of square sensors +//Back: 2x2 matrix, row 1 (bottom) is 2 square, row 2 (top) is 2 circular + +//Mux: rowS1, rowS2, rowS3, rowB1, rowB2 + +float seatrowreadings[3][3]; +float seatrowsum[3]; + +float backrowreadings[2][2]; +float backrowsum[2]; + +int seatdata[3][3]; +int backdata[2][2]; Serial pc(USBTX, USBRX); // main() runs in its own thread in the OS +void muxSelect(int input){ + mux0=input%2; + mux1=((int)(input/2))%2; + mux2=((int)(input/4))%2; + } + +void seatColSelect(int input){ + if(input==0){ + colS0=1; + colS1=0; + colS2=0; + } + if(input==1){ + colS0=0; + colS1=1; + colS2=0; + } + if(input==2){ + colS0=0; + colS1=0; + colS2=1; + } + +} + + +void backColSelect(int input){ + if(input==0){ + colB0=1; + colB1=0; + } + if(input==1){ + colB0=0; + colB1=1; + } + +} + int main() { led1.period_ms( 1 ); //set up pwm @@ -44,24 +104,26 @@ led4.period_ms( 1 ); pc.baud (115200); - cs = 1;// Chip must be deselected + //cs = 1;// Chip must be deselected // Setup the spi for 8 bit data, high steady state clock, // second edge capture, with a 1MHz clock rate - spi.format(8,3); - spi.frequency(1000000); + //spi.format(8,3); + //spi.frequency(1000000); - cs = 0;// Select the device by seting chip select low + /*cs = 0;// Select the device by seting chip select low spi.write(0x0A); //write mode spi.write(0x2D); // power register spi.write(0x02); //enable measurement mode cs = 1;// Deselect the device - + */ //__disable_irq(); //the tick(?) runs every 1ms, and halts everything for 50uS! + + muxPower=1; while(1) { - - cs = 0;// Select the device by seting chip select low + //wait(0.5); + /*cs = 0;// Select the device by seting chip select low spi.write(0x0B); //read mode spi.write(0x08); // X axis int xacc=spi.write(0x00); //dummy byte to get data @@ -79,57 +141,137 @@ int zacc=spi.write(0x00); //dummy byte to get data cs = 1;// Deselect the device - + */ //printf("X = 0x%X\n, Y = 0x%X\n, Z = 0x%X\n, ", xacc,yacc,zacc); - mux0=0; + /*mux0=0; mux1=0; - mux2=0; //select Y0 + mux2=0; //select Y0*/ + muxSelect(0); + seatColSelect(0); + /*col0=1; + col1=0; //select col 0*/ + + seatrowreadings[0][0]=ain; - col0=1; - col1=0; //select col 0 + /*col0=0; + col1=1; //select col 1*/ + seatColSelect(1); + seatrowreadings[0][1]=ain; + + seatColSelect(2); + seatrowreadings[0][2]=ain; + + seatrowsum[0]=0.0f; + for(int i=0; i<3; i++) { + seatrowsum[0]+=seatrowreadings[0][i]; + } + + for(int i=0; i<3; i++) { + seatdata[0][i]=(1-seatrowsum[0])*RESISTOR/seatrowreadings[0][i]; + } + + muxSelect(1); + /*mux0=1; + mux1=0; + mux2=0; //select Y0*/ + + seatColSelect(0); + /*col0=1; + col1=0; //select col 0*/ - rowreadings[0][0]=ain; - + seatrowreadings[1][0]=ain; + /* col0=0; - col1=1; //select col 1 - rowreadings[0][1]=ain; - rowsum[0]=0.0f; + col1=1; //select col 1*/ + + seatColSelect(1); + seatrowreadings[1][1]=ain; + + seatColSelect(2); + seatrowreadings[1][2]=ain; + + seatrowsum[1]=0.0f; + for(int i=0; i<3; i++) { + seatrowsum[1]+=seatrowreadings[1][i]; + } + + for(int i=0; i<3; i++) { + seatdata[1][i]=(1-seatrowsum[1])*RESISTOR/seatrowreadings[1][i]; + } + + + muxSelect(2); + + seatColSelect(0); + seatrowreadings[2][0]=ain; + + seatColSelect(1); + seatrowreadings[2][1]=ain; + + seatColSelect(2); + seatrowreadings[2][2]=ain; + + seatrowsum[2]=0.0f; + for(int i=0; i<3; i++) { + seatrowsum[2]+=seatrowreadings[2][i]; + } + + for(int i=0; i<3; i++) { + seatdata[2][i]=(1-seatrowsum[2])*RESISTOR/seatrowreadings[2][i]; + } + + //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]); + //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]); + + + + + muxSelect(3); + + backColSelect(0); + backrowreadings[0][0]=ain; + + backColSelect(1); + backrowreadings[0][1]=ain; + + backrowsum[0]=0.0f; for(int i=0; i<2; i++) { - rowsum[0]+=rowreadings[0][i]; + backrowsum[0]+=backrowreadings[0][i]; } for(int i=0; i<2; i++) { - sensordata[0][i]=(1-rowsum[0])*RESISTOR/rowreadings[0][i]; + backdata[0][i]=(1-backrowsum[0])*RESISTOR/backrowreadings[0][i]; } - mux0=1; - mux1=0; - mux2=0; //select Y0 - col0=1; - col1=0; //select col 0 - rowreadings[1][0]=ain; +muxSelect(4); + + backColSelect(0); + backrowreadings[1][0]=ain; - col0=0; - col1=1; //select col 1 - rowreadings[1][1]=ain; - rowsum[1]=0.0f; + backColSelect(1); + backrowreadings[1][1]=ain; + + backrowsum[1]=0.0f; for(int i=0; i<2; i++) { - rowsum[1]+=rowreadings[1][i]; + backrowsum[1]+=backrowreadings[1][i]; } for(int i=0; i<2; i++) { - sensordata[1][i]=(1-rowsum[1])*RESISTOR/rowreadings[1][i]; + backdata[1][i]=(1-backrowsum[1])*RESISTOR/backrowreadings[1][i]; } - - pc.printf("%i,%i,%i,%i\n", sensordata[0][0], sensordata[0][1], sensordata[1][0], sensordata[1][1]); - - - 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; + + //formatted back //pc.printf("%i,%i \n%i,%i \n\n", backdata[0][0], backdata[0][1], backdata[1][0], backdata[1][1]); + + //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]); + 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]); + + /*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; 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; 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; 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; + */ //wait(0.5); } }