Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Files at this revision

API Documentation at this revision

Comitter:
Cheroukee
Date:
Mon Oct 02 16:54:00 2017 +0000
Parent:
20:f9211d147c74
Child:
23:c3f25b511448
Commit message:
Working sensor specific formatting

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
sensors.cpp Show annotated file Show diff for this revision Revisions of this file
sensors.h Show annotated file Show diff for this revision Revisions of this file
xbee.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Mon Oct 02 15:20:22 2017 +0000
+++ b/main.cpp	Mon Oct 02 16:54:00 2017 +0000
@@ -70,17 +70,15 @@
         if (finished_packet)
         {
             
-            process_frame(&current_frame);
-            
-            
+            process_frame(&current_frame);            
             //remote_at_command_query('N', 'D', 0x02);
         }
         
-        set_remote_xbee_dio4(toggle_led);
+        //set_remote_xbee_dio4(toggle_led);
         toggle_led = !toggle_led;
 
         loop_led = !loop_led;
-        wait(1);
+        wait_ms(10);
     }
 }
 #else
@@ -93,14 +91,27 @@
     DECLARE_ADDR64_COORD
     DECLARE_ADDR16_UNKNOWN_OR_BCAST
 
+    DigitalOut led_3(LED3);
+    led_3 = 1;
     while(1)
     {
-        SENSOR accel = (*p[0])();
-        
-        sprintf(sensor_buffer, "%3.2f%3.2f%3.2f", accel.Accelerometre.x, accel.Accelerometre.y, accel.Accelerometre.z);
-
-        transmit_request(sensor_buffer, 15, 0, USE_ADDR64_COORD, USE_ADDR16_UNKNOWN_OR_BCAST);
-        
+        for (int i = 0; i < 2; i++)
+        {
+            sensor_t sensor = (*p[i])();
+            
+            if (sensor.sensor_type == 1)
+            {
+                sprintf(sensor_buffer, "button::%u\n\r", sensor.sensor_result.Bouton.etat != 0 ? 1 : 0);
+                transmit_request(sensor_buffer, 8 + 1 + 2, 0, USE_ADDR64_COORD, USE_ADDR16_UNKNOWN_OR_BCAST);  
+                led_3 = !led_3;
+            }
+            else if (sensor.sensor_type == 2)
+            {
+                sprintf(sensor_buffer, "accel::%3.2f%3.2f%3.2f\n\r", sensor.sensor_result.Accelerometre.x, 
+                                        sensor.sensor_result.Accelerometre.y, sensor.sensor_result.Accelerometre.z);
+                transmit_request(sensor_buffer, 7 + 15 + 2, 0, USE_ADDR64_COORD, USE_ADDR16_UNKNOWN_OR_BCAST);
+            }
+        }        
         loop_led = !loop_led;
         wait(config.refresh_freq);
     }
--- a/sensors.cpp	Mon Oct 02 15:20:22 2017 +0000
+++ b/sensors.cpp	Mon Oct 02 16:54:00 2017 +0000
@@ -3,10 +3,10 @@
 MMA8452Q accel(p9, p10, 0x1D);
 DigitalIn Bouton1(p20);
 
-SENSOR readAccel(); 
-SENSOR readBouton1();
+sensor_t readAccel(); 
+sensor_t readBouton1();
 
-SENSOR (*p[2])();
+sensor_t (*p[2])();
 
 void initialize_sensors()
 {
@@ -15,29 +15,20 @@
     p[1] = readBouton1;
 }
 
-SENSOR readAccel()
+sensor_t readAccel()
 {
-    SENSOR Result;
-    Result.Accelerometre.x = accel.readX();
-    Result.Accelerometre.y = accel.readY();
-    Result.Accelerometre.z = accel.readZ();
+    sensor_t Result;
+    Result.sensor_type = type_accelerometre;
+    Result.sensor_result.Accelerometre.x = accel.readX();
+    Result.sensor_result.Accelerometre.y = accel.readY();
+    Result.sensor_result.Accelerometre.z = accel.readZ();
     return Result;
 }
 
-SENSOR readBouton1()
+sensor_t readBouton1()
 {
-    SENSOR Result;
-    Result.Bouton.etat = Bouton1;   
+    sensor_t Result;
+    Result.sensor_type = type_bouton;
+    Result.sensor_result.Bouton.etat = Bouton1;   
     return Result;
 }
-
-void Test()
-{
-    initialize_sensors();
-
-    Serial pc(USBTX, USBRX); // tx, rx
-    for(int i = 0; i<2;i++)
-    {
-        pc.printf("Result : %u \r\n",(*p[i])()); // Display URL
-    }
-}
\ No newline at end of file
--- a/sensors.h	Mon Oct 02 15:20:22 2017 +0000
+++ b/sensors.h	Mon Oct 02 16:54:00 2017 +0000
@@ -1,11 +1,10 @@
 #include "mbed.h"
 #include "MMA8452Q/MMA8452Q.h"
 
-enum Sensor_type
-{
-    Bouton,
-    Accelerometre
-};
+typedef enum{
+    type_bouton = 1,
+    type_accelerometre = 2
+} sensor_type_t;
 
 struct Accel_result
 {
@@ -16,19 +15,22 @@
 
 struct Bouton_result
 {
-    bool etat;
+    int etat;
 };
 
-typedef union Sensor_result
+typedef union 
 {
-    Sensor_type Sensor;
     struct Accel_result Accelerometre;
     struct Bouton_result Bouton;
-} SENSOR;
+} sensor_union_t;
 
-extern SENSOR (*p[2])();
+typedef struct {    
+    sensor_type_t sensor_type;
+    sensor_union_t sensor_result;
+} sensor_t;
+
+extern sensor_t (*p[2])();
 
 // Accelerometer - SDA, SCL, and I2C address
 
-void initialize_sensors();
-void Test();
\ No newline at end of file
+void initialize_sensors();
\ No newline at end of file
--- a/xbee.cpp	Mon Oct 02 15:20:22 2017 +0000
+++ b/xbee.cpp	Mon Oct 02 16:54:00 2017 +0000
@@ -354,71 +354,67 @@
     NVIC_EnableIRQ(UART1_IRQn);
     
     return finished_frame;   */
-     if (xbee.readable())
+    static int curr_length = 0;
+
+    frame_recv_state_t recv_state = wait_delimiter;
+    frame_t* frame = out_frame;
+    static char checksum = 0xFF;
+
+    bool finished_frame = false;
+
+    xbee_receive_led = !xbee_receive_led;
+    while(curr_length < max_length && !finished_frame)
     {
-        static int curr_length = 0;
-    
-        frame_recv_state_t recv_state = wait_delimiter;
-        frame_t* frame = out_frame;
-        static char checksum = 0xFF;
-    
-        bool finished_frame = false;
-    
-        xbee_receive_led = !xbee_receive_led;
-        while(curr_length < max_length && !finished_frame)
+        char current = xbee.getc();
+        switch(recv_state)
         {
-            char current = xbee.getc();
-            switch(recv_state)
+            case wait_delimiter:
             {
-                case wait_delimiter:
+                //pc.printf(":: delimiter x%x", current);
+                if (current == ZIGBEE_DELIMITER)
                 {
-                    //pc.printf(":: delimiter x%x", current);
-                    if (current == ZIGBEE_DELIMITER)
-                    {
-                        curr_length = 0;
-                        recv_state = read_length_msb;
-                        frame->length = 0;
-                    }                
-                    break;
-                }
-                case read_length_msb:  
+                    curr_length = 0;
+                    recv_state = read_length_msb;
+                    frame->length = 0;
+                }                
+                break;
+            }
+            case read_length_msb:  
+            {
+                frame->length = (current << 8);
+                recv_state = read_length_lsb;
+                break;
+            }
+            case read_length_lsb:
+            {                 
+                frame->length |= current;
+                //pc.printf("\n\rFrame length = %u", frame->length);  
+                checksum = 0xFF;
+                recv_state = read_frame_specific;
+                break;
+            }
+            case read_frame_specific:
+            {
+                //pc.printf(":: read_frame_specific x%x", current);   
+                frame->buffer[curr_length++] = current;                
+                checksum -= current;
+                if (curr_length >= frame->length)
                 {
-                    frame->length = (current << 8);
-                    recv_state = read_length_lsb;
-                    break;
+                    recv_state = read_checksum;
                 }
-                case read_length_lsb:
-                {                 
-                    frame->length |= current;
-                    //pc.printf("\n\rFrame length = %u", frame->length);  
-                    checksum = 0xFF;
-                    recv_state = read_frame_specific;
-                    break;
-                }
-                case read_frame_specific:
+                break;
+            }
+            case read_checksum:
+            {
+               // pc.printf(":: read_checksum x%x", current);   
+                recv_state = wait_delimiter;
+                if (checksum == current)
                 {
-                    //pc.printf(":: read_frame_specific x%x", current);   
-                    frame->buffer[curr_length++] = current;                
-                    checksum -= current;
-                    if (curr_length >= frame->length)
-                    {
-                        recv_state = read_checksum;
-                    }
-                    break;
+                    finished_frame = true;
                 }
-                case read_checksum:
-                {
-                   // pc.printf(":: read_checksum x%x", current);   
-                    recv_state = wait_delimiter;
-                    if (checksum == current)
-                    {
-                        finished_frame = true;
-                    }
-                    break;
-                }
-            }     
-        }
-        return finished_frame;    
+                break;
+            }
+        }     
     }
-    return false;
+    return finished_frame;    
 }