Iniversity work

Dependencies:   mbed MMA8452

Committer:
vinceP
Date:
Sun Sep 03 18:39:10 2017 +0000
Revision:
3:7db4d7f82176
Parent:
2:8d0e48d38611
Mise a niveau du code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vinceP 2:8d0e48d38611 1 #include "mbed.h"
vinceP 2:8d0e48d38611 2 #include "MMA8452.h"
vinceP 2:8d0e48d38611 3 #include <math.h>
vinceP 2:8d0e48d38611 4
vinceP 0:ca687da7d225 5 Serial pc(USBTX, USBRX);
vinceP 2:8d0e48d38611 6 SPI spiTest(p5, p6, p7,p8);
vinceP 2:8d0e48d38611 7 MMA8452 acc(p9, p10, 100000);
vinceP 0:ca687da7d225 8
vinceP 1:0630912bb400 9 PwmOut led1(LED1);
vinceP 1:0630912bb400 10 PwmOut led2(LED2);
vinceP 1:0630912bb400 11 PwmOut led3(LED3);
vinceP 1:0630912bb400 12
vinceP 1:0630912bb400 13 void calculateAngle();
vinceP 2:8d0e48d38611 14 void display(int number);
vinceP 1:0630912bb400 15
vinceP 0:ca687da7d225 16 int main() {
vinceP 2:8d0e48d38611 17 int number = 10;
vinceP 2:8d0e48d38611 18 char c[50];
vinceP 3:7db4d7f82176 19 int x = 0,y = 0,z = 0;
vinceP 2:8d0e48d38611 20 while(1) {
vinceP 2:8d0e48d38611 21 sprintf(c,"%f", number);
vinceP 2:8d0e48d38611 22 pc.printf("x:%c \r\n",c[0]);
vinceP 2:8d0e48d38611 23 pc.printf("x:%s \r\n",c);
vinceP 3:7db4d7f82176 24 //Code de la librairie
vinceP 3:7db4d7f82176 25 //Sort les valeur en int
vinceP 3:7db4d7f82176 26 //acc.readXYZCounts(&x,&y,&z); //<-- to use
vinceP 3:7db4d7f82176 27 //sort les valeur en double (c'est l'accélération
vinceP 3:7db4d7f82176 28 //acc.readXYZGravity(&x,&y,&z);
vinceP 3:7db4d7f82176 29 //calculateAngle(x,y,z);
vinceP 1:0630912bb400 30 wait(1);
vinceP 2:8d0e48d38611 31 number--;
vinceP 1:0630912bb400 32 }
vinceP 1:0630912bb400 33 }
vinceP 1:0630912bb400 34
vinceP 2:8d0e48d38611 35 void calculateAngle(int x,int y, int z){
vinceP 2:8d0e48d38611 36 //double x, y, z;
vinceP 3:7db4d7f82176 37 float val = 0.5 * 180.0 / 3.1416;
vinceP 2:8d0e48d38611 38 double calcule = (1-2*((x*x+y*y)/(x*x+y*y+z*z)));
vinceP 3:7db4d7f82176 39 //;
vinceP 2:8d0e48d38611 40 /*x = -0.016;
vinceP 2:8d0e48d38611 41 y = -0.877;
vinceP 2:8d0e48d38611 42 z = 0.499;*/
vinceP 1:0630912bb400 43 led1 = abs(x);
vinceP 1:0630912bb400 44 led2 = abs(y);
vinceP 1:0630912bb400 45 led3 = abs(z);
vinceP 2:8d0e48d38611 46 //float amplitude =sqrt(x*x+y*y+z*z);
vinceP 2:8d0e48d38611 47 //float crossProductVector = sqrt(x*x+y*y);
vinceP 2:8d0e48d38611 48 //float t = -1*asin(crossProductVector/amplitude)*val; //was z before
vinceP 2:8d0e48d38611 49 //float e = 0.5*acos(1-2*((pow(x,2)+pow(y,2))/((pow(x,2)+pow(y,2)+pow(z,2)))))*val;
vinceP 3:7db4d7f82176 50 float e2 = acos(calcule)*val;
vinceP 1:0630912bb400 51 pc.printf("x:%lf y:%lf z:%lf\r\n",x,y,z);
vinceP 2:8d0e48d38611 52 pc.printf("angle: %lf\r\n",e2);
vinceP 2:8d0e48d38611 53 }
vinceP 3:7db4d7f82176 54 //possibilité de changement du type de valeur en paramêtre
vinceP 2:8d0e48d38611 55 void display(int number){
vinceP 2:8d0e48d38611 56 char c[6];
vinceP 2:8d0e48d38611 57 //Explication de la fonction sprintf https://www.tutorialspoint.com/c_standard_library/c_function_sprintf.htm
vinceP 2:8d0e48d38611 58 int test = sprintf(c,"%*.4Lf", number);
vinceP 2:8d0e48d38611 59 //sprintf(c,"%ld", number);
vinceP 2:8d0e48d38611 60 spiTest.write(0x76);
vinceP 2:8d0e48d38611 61 pc.printf("c = %u\r\n", c[3] == '\0');
vinceP 2:8d0e48d38611 62 pc.printf("test = %d\r\n", test);
vinceP 2:8d0e48d38611 63
vinceP 2:8d0e48d38611 64 switch(test) {
vinceP 2:8d0e48d38611 65 case 1:
vinceP 2:8d0e48d38611 66 spiTest.write(0x7E);
vinceP 2:8d0e48d38611 67 spiTest.write(c[0]);
vinceP 2:8d0e48d38611 68 break;
vinceP 2:8d0e48d38611 69 case 2:
vinceP 2:8d0e48d38611 70 spiTest.write(0x7D|c[0]);
vinceP 2:8d0e48d38611 71 spiTest.write(0x7E|c[1]);
vinceP 2:8d0e48d38611 72 break;
vinceP 2:8d0e48d38611 73 case 3:
vinceP 2:8d0e48d38611 74 break;
vinceP 2:8d0e48d38611 75 }
vinceP 2:8d0e48d38611 76
vinceP 2:8d0e48d38611 77 int n = sizeof(c)/sizeof(c[0]);
vinceP 2:8d0e48d38611 78 pc.printf("n = %i\r\n", n);
vinceP 2:8d0e48d38611 79 //control pour le décimal
vinceP 2:8d0e48d38611 80 spiTest.write(0x77); // Decimal control command
vinceP 2:8d0e48d38611 81 //valeur possible
vinceP 2:8d0e48d38611 82 //0b00000001 = 1.234
vinceP 2:8d0e48d38611 83 //0b00000010 = 12.34
vinceP 2:8d0e48d38611 84 //0b00000100 = 123.4
vinceP 2:8d0e48d38611 85 spiTest.write(0b00000001);
vinceP 2:8d0e48d38611 86 /*for (int i=4; i>=0; i--){
vinceP 2:8d0e48d38611 87 cs = 0;
vinceP 2:8d0e48d38611 88 spiTest.write(c[i]);
vinceP 2:8d0e48d38611 89 cs = 1;
vinceP 2:8d0e48d38611 90 }*/
vinceP 2:8d0e48d38611 91 /*spiTest.write(c);
vinceP 2:8d0e48d38611 92 ;
vinceP 2:8d0e48d38611 93 spiTest.write(c[0]);*/
vinceP 1:0630912bb400 94 }
vinceP 1:0630912bb400 95 /*
vinceP 2:8d0e48d38611 96
vinceP 1:0630912bb400 97
vinceP 1:0630912bb400 98 int main() {
vinceP 1:0630912bb400 99 //https://developer.mbed.org/handbook/SerialPC
vinceP 1:0630912bb400 100 //https://developer.mbed.org/handbook/mbed-NXP-LPC1768-Getting-Started
vinceP 1:0630912bb400 101 //pc.printf("Echoes back to the screen anything you type\n");
vinceP 1:0630912bb400 102 int nombre = 0;
vinceP 1:0630912bb400 103 cs = 1;
vinceP 1:0630912bb400 104 spiTest.frequency(250000);
vinceP 1:0630912bb400 105 cs = 0;
vinceP 1:0630912bb400 106 spiTest.write(0x81);
vinceP 1:0630912bb400 107 //int t = spiTest.write(nombre);
vinceP 1:0630912bb400 108 //pc.printf("Nombre = %X\r\n", t);
vinceP 1:0630912bb400 109 cs = 1;
vinceP 0:ca687da7d225 110 while(1) {
vinceP 1:0630912bb400 111 //uart.printf("%c",pc.getc());
vinceP 1:0630912bb400 112 wait(0.7);
vinceP 1:0630912bb400 113 nombre++;
vinceP 1:0630912bb400 114 display(nombre);
vinceP 1:0630912bb400 115 pc.printf("Nombre = %X\r\n", nombre);
vinceP 1:0630912bb400 116 if(nombre == 15){
vinceP 1:0630912bb400 117 return(0);
vinceP 1:0630912bb400 118 }
vinceP 0:ca687da7d225 119 }
vinceP 0:ca687da7d225 120 }
vinceP 2:8d0e48d38611 121
vinceP 0:ca687da7d225 122
vinceP 1:0630912bb400 123 /* Ignore cette partie c'Est le lab
vinceP 0:ca687da7d225 124 int main() {
vinceP 0:ca687da7d225 125 //https://developer.mbed.org/handbook/SerialPC
vinceP 0:ca687da7d225 126 //https://developer.mbed.org/handbook/mbed-NXP-LPC1768-Getting-Started
vinceP 0:ca687da7d225 127 //pc.printf("Echoes back to the screen anything you type\n");
vinceP 0:ca687da7d225 128 int nombre = 2;
vinceP 0:ca687da7d225 129 cs = 1;
vinceP 0:ca687da7d225 130 //uart.printf("%d",nombre);
vinceP 0:ca687da7d225 131 // Setup the spi for 8 bit data, high steady state clock,
vinceP 0:ca687da7d225 132 // second edge capture, with a 1MHz clock rate
vinceP 0:ca687da7d225 133 // spiTest.format(8,3);
vinceP 0:ca687da7d225 134 // spiTest.frequency(1000000);
vinceP 0:ca687da7d225 135 cs = 0;
vinceP 0:ca687da7d225 136
vinceP 0:ca687da7d225 137 // Send 0x8f, the command to read the WHOAMI register
vinceP 0:ca687da7d225 138 int t = spiTest.write(0x8F);
vinceP 0:ca687da7d225 139 pc.printf("WHOAMI register = %X\r\n", t);
vinceP 0:ca687da7d225 140
vinceP 0:ca687da7d225 141 // Send a dummy byte to receive the contents of the WHOAMI register
vinceP 0:ca687da7d225 142 //int whoami = spiTest.write(0x00);
vinceP 0:ca687da7d225 143 //printf("WHOAMI register = 0x%X\n", whoami);
vinceP 0:ca687da7d225 144 cs = 1;
vinceP 0:ca687da7d225 145 while(1) {
vinceP 0:ca687da7d225 146 //uart.printf("%c",pc.getc());
vinceP 0:ca687da7d225 147 cs = 0;
vinceP 0:ca687da7d225 148
vinceP 0:ca687da7d225 149 // Send 0x8f, the command to read the WHOAMI register
vinceP 0:ca687da7d225 150 pc.scanf("%d",&nombre);
vinceP 0:ca687da7d225 151 t = spiTest.write(nombre);
vinceP 0:ca687da7d225 152 pc.printf("WHOAMI register = %X\r\n", t);
vinceP 0:ca687da7d225 153 cs = 0;
vinceP 0:ca687da7d225 154 myled = 1;
vinceP 0:ca687da7d225 155 wait(0.2);
vinceP 0:ca687da7d225 156 myled = 0;
vinceP 0:ca687da7d225 157 wait(0.2);
vinceP 0:ca687da7d225 158 //pc.putc(pc.getc());
vinceP 0:ca687da7d225 159 }
vinceP 0:ca687da7d225 160 }
vinceP 0:ca687da7d225 161 */