Seat Matrix Code back and seat

Dependencies:   SoftPWM

Fork of Matrix_Test_3 by Ben Walker

Committer:
bwalker001
Date:
Wed Mar 07 10:07:30 2018 +0000
Revision:
0:a4b52dc3fb96
Child:
1:334ae7ccb918
Working

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 0:a4b52dc3fb96 5 SPI spi(p23, p24, p25); // mosi, miso, sclk
bwalker001 0:a4b52dc3fb96 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 0:a4b52dc3fb96 23 DigitalOut output(D11);
bwalker001 0:a4b52dc3fb96 24
bwalker001 0:a4b52dc3fb96 25 DigitalOut mux0(D2);
bwalker001 0:a4b52dc3fb96 26 DigitalOut mux1(D1);
bwalker001 0:a4b52dc3fb96 27 DigitalOut mux2(D0);
bwalker001 0:a4b52dc3fb96 28
bwalker001 0:a4b52dc3fb96 29 DigitalOut col0(D3);
bwalker001 0:a4b52dc3fb96 30 DigitalOut col1(D4);
bwalker001 0:a4b52dc3fb96 31
bwalker001 0:a4b52dc3fb96 32 float rowreadings[2][2];
bwalker001 0:a4b52dc3fb96 33 float rowsum[2];
bwalker001 0:a4b52dc3fb96 34 int sensordata[2][2];
bwalker001 0:a4b52dc3fb96 35
bwalker001 0:a4b52dc3fb96 36 Serial pc(USBTX, USBRX);
bwalker001 0:a4b52dc3fb96 37
bwalker001 0:a4b52dc3fb96 38 // main() runs in its own thread in the OS
bwalker001 0:a4b52dc3fb96 39 int main()
bwalker001 0:a4b52dc3fb96 40 {
bwalker001 0:a4b52dc3fb96 41 led1.period_ms( 1 ); //set up pwm
bwalker001 0:a4b52dc3fb96 42 led2.period_ms( 1 );
bwalker001 0:a4b52dc3fb96 43 led3.period_ms( 1 );
bwalker001 0:a4b52dc3fb96 44 led4.period_ms( 1 );
bwalker001 0:a4b52dc3fb96 45 pc.baud (115200);
bwalker001 0:a4b52dc3fb96 46
bwalker001 0:a4b52dc3fb96 47 cs = 1;// Chip must be deselected
bwalker001 0:a4b52dc3fb96 48
bwalker001 0:a4b52dc3fb96 49 // Setup the spi for 8 bit data, high steady state clock,
bwalker001 0:a4b52dc3fb96 50 // second edge capture, with a 1MHz clock rate
bwalker001 0:a4b52dc3fb96 51 spi.format(8,3);
bwalker001 0:a4b52dc3fb96 52 spi.frequency(1000000);
bwalker001 0:a4b52dc3fb96 53
bwalker001 0:a4b52dc3fb96 54 cs = 0;// Select the device by seting chip select low
bwalker001 0:a4b52dc3fb96 55 spi.write(0x0A); //write mode
bwalker001 0:a4b52dc3fb96 56 spi.write(0x2D); // power register
bwalker001 0:a4b52dc3fb96 57 spi.write(0x02); //enable measurement mode
bwalker001 0:a4b52dc3fb96 58 cs = 1;// Deselect the device
bwalker001 0:a4b52dc3fb96 59
bwalker001 0:a4b52dc3fb96 60 //__disable_irq(); //the tick(?) runs every 1ms, and halts everything for 50uS!
bwalker001 0:a4b52dc3fb96 61 while(1) {
bwalker001 0:a4b52dc3fb96 62
bwalker001 0:a4b52dc3fb96 63
bwalker001 0:a4b52dc3fb96 64 cs = 0;// Select the device by seting chip select low
bwalker001 0:a4b52dc3fb96 65 spi.write(0x0B); //read mode
bwalker001 0:a4b52dc3fb96 66 spi.write(0x08); // X axis
bwalker001 0:a4b52dc3fb96 67 int xacc=spi.write(0x00); //dummy byte to get data
bwalker001 0:a4b52dc3fb96 68 cs = 1;// Deselect the device
bwalker001 0:a4b52dc3fb96 69
bwalker001 0:a4b52dc3fb96 70 cs = 0;// Select the device by seting chip select low
bwalker001 0:a4b52dc3fb96 71 spi.write(0x0B); //read mode
bwalker001 0:a4b52dc3fb96 72 spi.write(0x09); // Y axis
bwalker001 0:a4b52dc3fb96 73 int yacc=spi.write(0x00); //dummy byte to get data
bwalker001 0:a4b52dc3fb96 74 cs = 1;// Deselect the device
bwalker001 0:a4b52dc3fb96 75
bwalker001 0:a4b52dc3fb96 76 cs = 0;// Select the device by seting chip select low
bwalker001 0:a4b52dc3fb96 77 spi.write(0x0B); //read mode
bwalker001 0:a4b52dc3fb96 78 spi.write(0x0A); // Z axis
bwalker001 0:a4b52dc3fb96 79 int zacc=spi.write(0x00); //dummy byte to get data
bwalker001 0:a4b52dc3fb96 80 cs = 1;// Deselect the device
bwalker001 0:a4b52dc3fb96 81
bwalker001 0:a4b52dc3fb96 82
bwalker001 0:a4b52dc3fb96 83 //printf("X = 0x%X\n, Y = 0x%X\n, Z = 0x%X\n, ", xacc,yacc,zacc);
bwalker001 0:a4b52dc3fb96 84
bwalker001 0:a4b52dc3fb96 85 mux0=0;
bwalker001 0:a4b52dc3fb96 86 mux1=0;
bwalker001 0:a4b52dc3fb96 87 mux2=0; //select Y0
bwalker001 0:a4b52dc3fb96 88
bwalker001 0:a4b52dc3fb96 89 col0=1;
bwalker001 0:a4b52dc3fb96 90 col1=0; //select col 0
bwalker001 0:a4b52dc3fb96 91
bwalker001 0:a4b52dc3fb96 92 rowreadings[0][0]=ain;
bwalker001 0:a4b52dc3fb96 93
bwalker001 0:a4b52dc3fb96 94 col0=0;
bwalker001 0:a4b52dc3fb96 95 col1=1; //select col 1
bwalker001 0:a4b52dc3fb96 96 rowreadings[0][1]=ain;
bwalker001 0:a4b52dc3fb96 97 rowsum[0]=0.0f;
bwalker001 0:a4b52dc3fb96 98 for(int i=0; i<2; i++) {
bwalker001 0:a4b52dc3fb96 99 rowsum[0]+=rowreadings[0][i];
bwalker001 0:a4b52dc3fb96 100 }
bwalker001 0:a4b52dc3fb96 101
bwalker001 0:a4b52dc3fb96 102 for(int i=0; i<2; i++) {
bwalker001 0:a4b52dc3fb96 103 sensordata[0][i]=(1-rowsum[0])*RESISTOR/rowreadings[0][i];
bwalker001 0:a4b52dc3fb96 104 }
bwalker001 0:a4b52dc3fb96 105 mux0=1;
bwalker001 0:a4b52dc3fb96 106 mux1=0;
bwalker001 0:a4b52dc3fb96 107 mux2=0; //select Y0
bwalker001 0:a4b52dc3fb96 108
bwalker001 0:a4b52dc3fb96 109 col0=1;
bwalker001 0:a4b52dc3fb96 110 col1=0; //select col 0
bwalker001 0:a4b52dc3fb96 111
bwalker001 0:a4b52dc3fb96 112 rowreadings[1][0]=ain;
bwalker001 0:a4b52dc3fb96 113
bwalker001 0:a4b52dc3fb96 114 col0=0;
bwalker001 0:a4b52dc3fb96 115 col1=1; //select col 1
bwalker001 0:a4b52dc3fb96 116 rowreadings[1][1]=ain;
bwalker001 0:a4b52dc3fb96 117 rowsum[1]=0.0f;
bwalker001 0:a4b52dc3fb96 118 for(int i=0; i<2; i++) {
bwalker001 0:a4b52dc3fb96 119 rowsum[1]+=rowreadings[1][i];
bwalker001 0:a4b52dc3fb96 120 }
bwalker001 0:a4b52dc3fb96 121
bwalker001 0:a4b52dc3fb96 122 for(int i=0; i<2; i++) {
bwalker001 0:a4b52dc3fb96 123 sensordata[1][i]=(1-rowsum[1])*RESISTOR/rowreadings[1][i];
bwalker001 0:a4b52dc3fb96 124 }
bwalker001 0:a4b52dc3fb96 125
bwalker001 0:a4b52dc3fb96 126 pc.printf("%i,%i,%i,%i\n", sensordata[0][0], sensordata[0][1], sensordata[1][0], sensordata[1][1]);
bwalker001 0:a4b52dc3fb96 127
bwalker001 0:a4b52dc3fb96 128
bwalker001 0:a4b52dc3fb96 129 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 130 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 131 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 132 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 0:a4b52dc3fb96 133 //wait(0.5);
bwalker001 0:a4b52dc3fb96 134 }
bwalker001 0:a4b52dc3fb96 135 }
bwalker001 0:a4b52dc3fb96 136