Code APP3
Dependencies: mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial
Fork of APP3_Lab by
Revision 21:04fae6a95131, committed 2017-10-02
- 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
--- 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(¤t_frame); - - + process_frame(¤t_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; }