test

Dependencies:   mbed MMA8452Q

Fork of HelloWorld by Simon Ford

Revision:
26:523ac79471d8
Parent:
25:16a041dd21db
Child:
27:0f602aca65f1
--- a/main.cpp	Tue Sep 05 20:18:59 2017 +0000
+++ b/main.cpp	Fri Sep 08 01:54:02 2017 +0000
@@ -9,75 +9,27 @@
 // Communication I2C
 //I2C i2c(p9,p10); // sda, scl
 
+int main() {
+    }
 
-void UARTInit()
-{
- uint16_t usFdiv;   
-    
- // Power up the UART3 it's disabled on powerup.
- LPC_SC->PCONP       |=  (1 << 25);
- 
-  // Enable the pins on the device to use UART3 
- LPC_PINCON->PINSEL1 |= (3 << 18);   /* Pin P0.25 used as TXD0 (Com0) */
- LPC_PINCON->PINSEL1 |= (3 << 20);   /* Pin P0.26 used as RXD0 (Com0) */
-    
- // Setup the PCLK for UART3
- LPC_SC->PCLKSEL1    &= ~(3 << 18); // Clean all to 0
- LPC_SC->PCLKSEL1    |=  (1 << 18); // PCLK = CCLK
 
- // Word select 8-bit character length and set DLAB
- LPC_UART3->LCR  =   0x83;  // 0000 0000 1000 0011
-
-//Baud rate calculation
- usFdiv = (SystemCoreClock / (16*9600));
- LPC_UART3->DLM  =  usFdiv / 256;
- LPC_UART3->DLL  =   usFdiv % 256;
 
- // Enable and reset UART3 FIFOs.
- LPC_UART3->FCR       = 0x7;
- 
-  // Enable the interrupt
- // NVIC_EnableIRQ(UART3_IRQn);
- 
- // Init the UART3 RX interrupt
- // LPC_UART3->IER = 0x01;
 
- // Clear DLAB
- LPC_UART3->LCR &= ~(1 << 7);
- 
-}
-
-char UART3Transmit(int out)
-{
-    LPC_UART3 -> THR = out;
-    while(! (LPC_UART3->LSR & (0x01 << 0x06)));
-
-    return 1;
-}
-
+// SPI COMMUNICATION
+/*
 int main() {
-    
- //UARTInit();
 
      float x, y, z ;
-    
      MMA8452Q acc(p9,p10,0x1d);     // acceleration object
-    //i2c.frequency(100000);
-    //int cmd[0] = 0x0D;
-    //12c.write(addr,cmd,1,true);
-    //i2c.read(addr,cmd,1);
      
-        //Clear display SPI
-         //cs = 0;
-         //wait(0.1);
-         //spi.write(0x76); // Clear display
-         //cs = 1;
-         //wait(0.1);
-         //cs = 1;
+         cs = 0;    //Clear display SPI
+         wait(0.1);
+         spi.write(0x76); // Clear display
+         cs = 1;
+         wait(0.1);
+         cs = 1;
          
-         //clear display UART
-         //UART3Transmit(0x76); // Clear display
-    // while (true) {       
+     while (true) {       
          x = acc.getAccX() ; 
          y = acc.getAccY() ;
          z = acc.getAccZ() ;
@@ -98,7 +50,6 @@
         pc.printf("valeur rad new= %d", resultatRAD);
         int degree = resultatRAD * 18000/31400; //Tranfo degree
         pc.printf("valeur deg new = %d", degree);
-        //int degreInt = degree;
         pc.printf("valeur deg new = %d", degree);
         
         // extracting digits
@@ -113,22 +64,7 @@
         ++i;
         }
          
-        // Pour la communication UART
-    
-         //UART3Transmit(0x77); // Decimal control command
-         //UART3Transmit(0x04);// Turn on decimal
-         
-         
-         //UART3Transmit(digits[3]);
-         //UART3Transmit(digits[2]);
-         //UART3Transmit(digits[1]);
-         //UART3Transmit(digits[0]);
-         //UART3Transmit(0xA5);
-         
-         // Pour la communication SPI
-        
-         cs = 0;
-        /* spi.write(0x77); // Decimal control command
+         spi.write(0x77); // Decimal control command    // Pour la communication SPI
          cs = 1;
          wait(0.01);
          cs = 0;
@@ -151,18 +87,109 @@
          spi.write(digits[0]);
          cs = 1; 
          */
+         /*     Test
+         cs = 0;
          wait(0.1);
          spi.write(0x5);
          cs = 1;
-         
+         */
     //    }
-        
-} 
+//} 
 
 
 
+// UART COMMUNICATION
+/*
+void UARTInit()
+{
+ uint16_t usFdiv;   
+    
+ LPC_SC->PCONP       |=  (1 << 25);  // Power up the UART3 it's disabled on powerup.
+  
+ LPC_PINCON->PINSEL1 |= (3 << 18);   // Pin P0.25 used as TXD0 (Com0)     // Enable the pins on the device to use UART3 
+ LPC_PINCON->PINSEL1 |= (3 << 20);   // Pin P0.26 used as RXD0 (Com0) 
+    
+ LPC_SC->PCLKSEL1    &= ~(3 << 18); // Clean all to 0    // Setup the PCLK for UART3
+ LPC_SC->PCLKSEL1    |=  (1 << 18); // PCLK = CCLK
 
-/* communication SPI 
+ LPC_UART3->LCR  =   0x83;  // 0000 0000 1000 0011       // Word select 8-bit character length and set DLAB
+
+ usFdiv = (SystemCoreClock / (16*9600));    //Baud rate calculation
+ LPC_UART3->DLM  =  usFdiv / 256;
+ LPC_UART3->DLL  =   usFdiv % 256;
+
+ LPC_UART3->FCR       = 0x7;     // Enable and reset UART3 FIFOs.
+
+ LPC_UART3->LCR &= ~(1 << 7);    // Clear DLAB
+}
+
+char UART3Transmit(int out)
+{
+    LPC_UART3 -> THR = out;
+    while(! (LPC_UART3->LSR & (0x01 << 0x06)));
+
+    return 1;
+}
+
+int main() {
+    
+ UARTInit();
+
+     float x, y, z ;
+    
+     MMA8452Q acc(p9,p10,0x1d);     // acceleration object
+         
+         UART3Transmit(0x76); // Clear display UART
+     while (true) {  
+          
+         x = acc.getAccX() ; 
+         y = acc.getAccY() ;
+         z = acc.getAccZ() ;
+         printf("X[%.3f] Y[%.3f] Z[%.3f]\n",x, y, z) ;
+         wait(0.1);
+
+        int X = x * 1000; //Pour enlever floating point et garder une précision
+        int Y = y * 1000;
+        int Z = z * 1000;
+
+        int angle = (1000-(((2*X*X+2*Y*Y)*1000/(X*X+Y*Y+Z*Z)))); //Calcul vectoriel pour calculer l'angle à l'horizontal
+        
+        pc.printf("avant acos = %d", angle);
+        
+        float ratioZaccel = angle/1000.0; //Remettre en floating point pour acos
+        int resultatRAD = 500*acos((ratioZaccel)); //Reponse en RAD
+        
+        pc.printf("valeur rad new= %d", resultatRAD);
+        int degree = resultatRAD * 18000/31400; //Tranfo degree
+        pc.printf("valeur deg new = %d", degree);
+        
+        pc.printf("valeur deg new = %d", degree);
+        
+        
+        int digit;      // extracting digits
+        int digits[4] = {0,0,0,0};
+        int i = 0;
+        while(degree > 0) {
+        digit = degree % 10; //to get the right most digit
+        digits[i]=digit;
+        pc.printf("digit %d = %d, degree int: %d", i, digits[i], degree);
+        degree /= 10;              //reduce the number by one digit
+        ++i;
+        }
+         
+         UART3Transmit(0x77); // Decimal control command    // Pour la communication UART
+         UART3Transmit(0x04);// Turn on decimal
+         
+         UART3Transmit(digits[3]);
+         UART3Transmit(digits[2]);
+         UART3Transmit(digits[1]);
+         UART3Transmit(digits[0]);      //UART3Transmit(0xA5);
+        }
+} 
+*/        
+
+
+/* // communication I2C 
 Serial pc(USBTX, USBRX); // tx, rx
 I2C i2c(p9,p10);   
 
@@ -180,7 +207,13 @@
     }
 }
  */
- /*
+// I2C write
+//i2c.frequency(100000);
+//int cmd[0] = 0x0D;
+//12c.write(addr,cmd,1,true);
+//i2c.read(addr,cmd,1);
+
+ /* // communication UART
 Serial pc(USBTX, USBRX); // tx, rx
 Serial mc(p9,p10);
 int main() {
@@ -194,9 +227,8 @@
 }
  */
 
-
 /*
-DigitalOut myled(LED2);
+DigitalOut myled(LED3);
 
 int main() {
     while(1) {