Ben Walker
/
Matrix_Test_4
Seat Matrix Code back and seat
Fork of Matrix_Test_3 by
main.cpp
- Committer:
- bwalker001
- Date:
- 2018-03-12
- Revision:
- 1:334ae7ccb918
- Parent:
- 0:a4b52dc3fb96
File content as of revision 1:334ae7ccb918:
#include "mbed.h" #include "SoftPWM.h" //SPI spi(p23, p24, p25); // mosi, miso, sclk //DigitalOut cs(p22); AnalogIn ain(A5); #define RESISTOR 46500 /* DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4);*/ SoftPWM led1(LED1); SoftPWM led2(LED2); SoftPWM led3(LED3); SoftPWM led4(LED4); //DigitalOut output(D11); DigitalOut muxPower(D12); DigitalOut mux0(D2); DigitalOut mux1(D1); DigitalOut mux2(D0); 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 //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 led2.period_ms( 1 ); led3.period_ms( 1 ); led4.period_ms( 1 ); pc.baud (115200); //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); /*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) { //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 cs = 1;// Deselect the device cs = 0;// Select the device by seting chip select low spi.write(0x0B); //read mode spi.write(0x09); // Y axis int yacc=spi.write(0x00); //dummy byte to get data cs = 1;// Deselect the device cs = 0;// Select the device by seting chip select low spi.write(0x0B); //read mode spi.write(0x0A); // Z axis 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; mux1=0; mux2=0; //select Y0*/ muxSelect(0); seatColSelect(0); /*col0=1; col1=0; //select col 0*/ seatrowreadings[0][0]=ain; /*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*/ seatrowreadings[1][0]=ain; /* col0=0; 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++) { backrowsum[0]+=backrowreadings[0][i]; } for(int i=0; i<2; i++) { backdata[0][i]=(1-backrowsum[0])*RESISTOR/backrowreadings[0][i]; } muxSelect(4); backColSelect(0); backrowreadings[1][0]=ain; backColSelect(1); backrowreadings[1][1]=ain; backrowsum[1]=0.0f; for(int i=0; i<2; i++) { backrowsum[1]+=backrowreadings[1][i]; } for(int i=0; i<2; i++) { backdata[1][i]=(1-backrowsum[1])*RESISTOR/backrowreadings[1][i]; } //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); } }