test

Dependencies:   mbed MMA8452Q

Fork of HelloWorld by Simon Ford

Committer:
kkalsi
Date:
Mon Sep 04 17:49:13 2017 +0000
Revision:
24:0227ae0ad260
Parent:
23:262e3e171aaf
Child:
25:16a041dd21db
added uart communication

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kkalsi 6:62e39c103d12 1 #include "mbed.h"
kkalsi 23:262e3e171aaf 2 #include "MMA8452Q.h"
kkalsi 7:32229ffff57e 3
kkalsi 23:262e3e171aaf 4 Serial pc(USBTX, USBRX); // tx, rx
kkalsi 24:0227ae0ad260 5 //SPI accel(p11,p12,p13);
kkalsi 24:0227ae0ad260 6 //DigitalOut cs(p14);
kkalsi 10:386a3a12f3cf 7 // Communication I2C
kkalsi 9:f36f1506a840 8 //I2C comI2C(p9,p10); // sda, scl
kkalsi 10:386a3a12f3cf 9
kkalsi 22:706708bc4c1a 10
kkalsi 22:706708bc4c1a 11 void UARTInit()
kkalsi 22:706708bc4c1a 12 {
kkalsi 22:706708bc4c1a 13 uint16_t usFdiv;
kkalsi 22:706708bc4c1a 14
kkalsi 22:706708bc4c1a 15 // Power up the UART3 it's disabled on powerup.
kkalsi 22:706708bc4c1a 16 LPC_SC->PCONP |= (1 << 25);
kkalsi 22:706708bc4c1a 17
kkalsi 22:706708bc4c1a 18 // Enable the pins on the device to use UART3
kkalsi 22:706708bc4c1a 19 LPC_PINCON->PINSEL1 |= (3 << 18); /* Pin P0.25 used as TXD0 (Com0) */
kkalsi 22:706708bc4c1a 20 LPC_PINCON->PINSEL1 |= (3 << 20); /* Pin P0.26 used as RXD0 (Com0) */
kkalsi 22:706708bc4c1a 21
kkalsi 22:706708bc4c1a 22 // Setup the PCLK for UART3
kkalsi 22:706708bc4c1a 23 LPC_SC->PCLKSEL1 &= ~(3 << 18); // Clean all to 0
kkalsi 22:706708bc4c1a 24 LPC_SC->PCLKSEL1 |= (1 << 18); // PCLK = CCLK
kkalsi 22:706708bc4c1a 25
kkalsi 22:706708bc4c1a 26 // Word select 8-bit character length and set DLAB
kkalsi 22:706708bc4c1a 27 LPC_UART3->LCR = 0x83; // 0000 0000 1000 0011
kkalsi 22:706708bc4c1a 28
kkalsi 22:706708bc4c1a 29 usFdiv = (SystemCoreClock / (16*9600));
kkalsi 22:706708bc4c1a 30 LPC_UART3->DLM = usFdiv / 256;
kkalsi 22:706708bc4c1a 31 LPC_UART3->DLL = usFdiv % 256;
kkalsi 22:706708bc4c1a 32
kkalsi 22:706708bc4c1a 33 //LPC_UART3->DLM = ((SystemCoreClock / (16*9600))/256);
kkalsi 22:706708bc4c1a 34 //LPC_UART3->DLL = ((SystemCoreClock / (16*9600))%256);
kkalsi 22:706708bc4c1a 35
kkalsi 22:706708bc4c1a 36 // Enable and reset UART3 FIFOs.
kkalsi 22:706708bc4c1a 37 LPC_UART3->FCR = 0x7;
kkalsi 22:706708bc4c1a 38
kkalsi 22:706708bc4c1a 39 // Enable the interrupt
kkalsi 22:706708bc4c1a 40 // NVIC_EnableIRQ(UART3_IRQn);
kkalsi 22:706708bc4c1a 41
kkalsi 22:706708bc4c1a 42 // Init the UART3 RX interrupt
kkalsi 22:706708bc4c1a 43 // LPC_UART3->IER = 0x01;
kkalsi 22:706708bc4c1a 44
kkalsi 22:706708bc4c1a 45 // Clear DLAB
kkalsi 22:706708bc4c1a 46 LPC_UART3->LCR &= ~(1 << 7);
kkalsi 22:706708bc4c1a 47
kkalsi 22:706708bc4c1a 48 //pc.printf("system clock : %d", SystemCoreClock);
kkalsi 22:706708bc4c1a 49 }
kkalsi 22:706708bc4c1a 50
kkalsi 22:706708bc4c1a 51 char UART3Transmit(int out)
kkalsi 22:706708bc4c1a 52 {
kkalsi 22:706708bc4c1a 53 LPC_UART3 -> THR = out;
kkalsi 22:706708bc4c1a 54 while(! (LPC_UART3->LSR & (0x01 << 0x06)));
kkalsi 22:706708bc4c1a 55
kkalsi 22:706708bc4c1a 56 return 1;
kkalsi 22:706708bc4c1a 57 }
kkalsi 22:706708bc4c1a 58
kkalsi 3:8494c3f7108d 59 int main() {
kkalsi 6:62e39c103d12 60
kkalsi 22:706708bc4c1a 61 UARTInit();
kkalsi 21:74482f23c8fe 62
vincentlabbe 17:c463c5a434ec 63 float x, y, z ;
kkalsi 9:f36f1506a840 64
kkalsi 15:b4b2e73faefb 65 MMA8452Q acc(p9,p10,0x1d); // acceleration object
kkalsi 9:f36f1506a840 66
vincentlabbe 17:c463c5a434ec 67 while (true) {
vincentlabbe 17:c463c5a434ec 68 x = acc.getAccX() ;
vincentlabbe 17:c463c5a434ec 69 y = acc.getAccY() ;
vincentlabbe 17:c463c5a434ec 70 z = acc.getAccZ() ;
vincentlabbe 19:992f183385e8 71 printf("X[%.3f] Y[%.3f] Z[%.3f]\n",x, y, z) ;
kkalsi 9:f36f1506a840 72 wait(0.1);
vincentlabbe 13:64137db317ab 73
vincentlabbe 19:992f183385e8 74 int X = x * 1000;
vincentlabbe 19:992f183385e8 75 int Y = y * 1000;
vincentlabbe 19:992f183385e8 76 int Z = z * 1000;
kkalsi 18:171cb8d2f243 77
vincentlabbe 19:992f183385e8 78 int angle = (1000-(((2*X*X+2*Y*Y)*1000/(X*X+Y*Y+Z*Z))));
kkalsi 18:171cb8d2f243 79
vincentlabbe 19:992f183385e8 80 pc.printf("avant acos = %d", angle);
vincentlabbe 17:c463c5a434ec 81 //float resultat = ((3.14/2.0) -( angle + (angle *angle * angle)/6.0 + (3*angle*angle*angle*angle*angle)/40.0))/2;
vincentlabbe 19:992f183385e8 82 float angleAcos = angle/1000.0;
kkalsi 18:171cb8d2f243 83
vincentlabbe 19:992f183385e8 84 int resultat = 500*acos((angleAcos));
kkalsi 18:171cb8d2f243 85 pc.printf("valeur rad new= %d", resultat);
vincentlabbe 20:107380f7eeb9 86 int degree = resultat * 18000/31400;
kkalsi 18:171cb8d2f243 87 pc.printf("valeur deg new = %d", degree);
kkalsi 18:171cb8d2f243 88 //degree = degree * 10;
kkalsi 18:171cb8d2f243 89 int degreInt = degree;
vincentlabbe 17:c463c5a434ec 90 pc.printf("valeur deg new = %d", degreInt);
kkalsi 15:b4b2e73faefb 91
vincentlabbe 16:0b58c14b639d 92 int rep;
kkalsi 15:b4b2e73faefb 93 // extracting digits
vincentlabbe 16:0b58c14b639d 94 int digits[4] = {0,0,0,0};
kkalsi 15:b4b2e73faefb 95 int i = 0;
kkalsi 15:b4b2e73faefb 96 while(degreInt > 0) {
vincentlabbe 16:0b58c14b639d 97 rep = degreInt % 10; //to get the right most digit
vincentlabbe 16:0b58c14b639d 98 digits[i]=rep;
vincentlabbe 16:0b58c14b639d 99 pc.printf("digit %d = %d, degree int: %d", i, digits[i], degreInt);
kkalsi 15:b4b2e73faefb 100 degreInt /= 10; //reduce the number by one digit
kkalsi 15:b4b2e73faefb 101 ++i;
kkalsi 15:b4b2e73faefb 102 }
kkalsi 15:b4b2e73faefb 103
kkalsi 23:262e3e171aaf 104 // Pour la communication UART
kkalsi 24:0227ae0ad260 105 UART3Transmit(0x76); // Clear display
kkalsi 23:262e3e171aaf 106 wait(0.1);
kkalsi 24:0227ae0ad260 107 UART3Transmit(0x77); // Decimal control command
kkalsi 24:0227ae0ad260 108 UART3Transmit(0x04);// Turn on decimal
kkalsi 23:262e3e171aaf 109 wait(0.1);
kkalsi 23:262e3e171aaf 110 UART3Transmit(digits[3]);
kkalsi 23:262e3e171aaf 111 wait(0.1);
kkalsi 23:262e3e171aaf 112 UART3Transmit(digits[2]);
kkalsi 23:262e3e171aaf 113 wait(0.1);
kkalsi 23:262e3e171aaf 114 UART3Transmit(digits[1]);
kkalsi 23:262e3e171aaf 115 wait(0.1);
kkalsi 23:262e3e171aaf 116 UART3Transmit(digits[0]);
kkalsi 23:262e3e171aaf 117 wait(0.1);
kkalsi 23:262e3e171aaf 118
kkalsi 23:262e3e171aaf 119 // Pour la communication SPI
kkalsi 23:262e3e171aaf 120 /*
vincentlabbe 17:c463c5a434ec 121 cs = 0;
vincentlabbe 17:c463c5a434ec 122 accel.write(0x76); // Clear display
vincentlabbe 17:c463c5a434ec 123 cs = 1;
vincentlabbe 17:c463c5a434ec 124 wait(0.1);
vincentlabbe 17:c463c5a434ec 125 cs = 0;
vincentlabbe 17:c463c5a434ec 126 accel.write(0x77); // Decimal control command
vincentlabbe 17:c463c5a434ec 127 accel.write(0x04);// Turn on decimal
vincentlabbe 17:c463c5a434ec 128 cs = 1;
vincentlabbe 17:c463c5a434ec 129 wait(0.01);
kkalsi 10:386a3a12f3cf 130 cs = 0;
vincentlabbe 16:0b58c14b639d 131 accel.write(digits[3]);
vincentlabbe 16:0b58c14b639d 132 cs = 1;
vincentlabbe 17:c463c5a434ec 133 wait(0.01);
vincentlabbe 16:0b58c14b639d 134 cs = 0;
vincentlabbe 16:0b58c14b639d 135 accel.write(digits[2]);
kkalsi 10:386a3a12f3cf 136 cs = 1;
vincentlabbe 17:c463c5a434ec 137 wait(0.01);
vincentlabbe 16:0b58c14b639d 138 cs = 0;
vincentlabbe 16:0b58c14b639d 139 accel.write(digits[1]);
vincentlabbe 16:0b58c14b639d 140 cs = 1;
vincentlabbe 17:c463c5a434ec 141 wait(0.01);
vincentlabbe 16:0b58c14b639d 142 cs = 0;
vincentlabbe 16:0b58c14b639d 143 accel.write(digits[0]);
vincentlabbe 16:0b58c14b639d 144 cs = 1;
vincentlabbe 17:c463c5a434ec 145 wait(0.1);
kkalsi 23:262e3e171aaf 146 */
kkalsi 23:262e3e171aaf 147
vincentlabbe 17:c463c5a434ec 148 }
kkalsi 23:262e3e171aaf 149
kkalsi 3:8494c3f7108d 150 }
kkalsi 3:8494c3f7108d 151
kkalsi 3:8494c3f7108d 152
kkalsi 21:74482f23c8fe 153
kkalsi 21:74482f23c8fe 154
kkalsi 21:74482f23c8fe 155
kkalsi 21:74482f23c8fe 156
kkalsi 21:74482f23c8fe 157
kkalsi 21:74482f23c8fe 158
kkalsi 21:74482f23c8fe 159
kkalsi 3:8494c3f7108d 160 /* communication SPI
kkalsi 3:8494c3f7108d 161 Serial pc(USBTX, USBRX); // tx, rx
kkalsi 2:42408ce8f4ae 162 SPI acc(p11,p12,p13);
kkalsi 2:42408ce8f4ae 163 DigitalOut cs(p14);
kkalsi 2:42408ce8f4ae 164 int main() {
kkalsi 2:42408ce8f4ae 165 while(1){
kkalsi 2:42408ce8f4ae 166 int nombre = 0;
kkalsi 2:42408ce8f4ae 167 pc.printf("Entrez un nombre de 4 chiffres : ");
kkalsi 2:42408ce8f4ae 168 pc.scanf("%d", &nombre);
kkalsi 2:42408ce8f4ae 169 pc.printf("Votre numero entrez est le : %d", nombre);
kkalsi 2:42408ce8f4ae 170
kkalsi 2:42408ce8f4ae 171 cs = 0;
kkalsi 3:8494c3f7108d 172 acc.write(nombre);
kkalsi 2:42408ce8f4ae 173 cs = 1;
kkalsi 2:42408ce8f4ae 174 wait(0.2);
kkalsi 2:42408ce8f4ae 175 cs = 0;
kkalsi 2:42408ce8f4ae 176 wait(1);
kkalsi 2:42408ce8f4ae 177 }
kkalsi 3:8494c3f7108d 178 }*/
kkalsi 22:706708bc4c1a 179
kkalsi 2:42408ce8f4ae 180 /*
kkalsi 2:42408ce8f4ae 181 Serial pc(USBTX, USBRX); // tx, rx
kkalsi 22:706708bc4c1a 182 Serial mc(p9,p10);
kkalsi 2:42408ce8f4ae 183 int main() {
kkalsi 2:42408ce8f4ae 184
kkalsi 22:706708bc4c1a 185 int nombre;
kkalsi 2:42408ce8f4ae 186 pc.printf("Entrez un nombre de 4 chiffres : ");
kkalsi 2:42408ce8f4ae 187 pc.scanf("%d", &nombre);
kkalsi 2:42408ce8f4ae 188 pc.printf("Votre numero entrez est le : %d", nombre);
kkalsi 22:706708bc4c1a 189 //mc.printf(nombre);
kkalsi 22:706708bc4c1a 190 mc.putc(nombre);
kkalsi 2:42408ce8f4ae 191 }
kkalsi 2:42408ce8f4ae 192 */
simon 0:fb6bbc10ffa0 193
kkalsi 2:42408ce8f4ae 194
kkalsi 2:42408ce8f4ae 195 /*
kkalsi 2:42408ce8f4ae 196 DigitalOut myled(LED2);
simon 0:fb6bbc10ffa0 197
simon 0:fb6bbc10ffa0 198 int main() {
simon 0:fb6bbc10ffa0 199 while(1) {
simon 0:fb6bbc10ffa0 200 myled = 1;
simon 0:fb6bbc10ffa0 201 wait(0.2);
simon 0:fb6bbc10ffa0 202 myled = 0;
simon 0:fb6bbc10ffa0 203 wait(0.2);
simon 0:fb6bbc10ffa0 204 }
simon 0:fb6bbc10ffa0 205 }
kkalsi 2:42408ce8f4ae 206 */