takeshi yoshida / Mbed 2 deprecated 2016_lambdaController

Dependencies:   mbed

Dependents:  

Committer:
gakuburu
Date:
Tue Aug 23 08:30:41 2016 +0000
Revision:
3:9f80eee7aa78
Parent:
2:82c94d2c727a
Child:
4:c35227d14896
bugs fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gakuburu 0:1b682aa7d935 1 #include "LambdaController.h"
gakuburu 0:1b682aa7d935 2
gakuburu 0:1b682aa7d935 3 LambdaController::LambdaController(PinName tx, PinName rx) :
gakuburu 3:9f80eee7aa78 4 twe_lite(tx, rx)
gakuburu 3:9f80eee7aa78 5 {
gakuburu 3:9f80eee7aa78 6 is_axis_initialized = false;
gakuburu 0:1b682aa7d935 7
gakuburu 3:9f80eee7aa78 8 buffer_head = -1;
gakuburu 3:9f80eee7aa78 9 twe_lite.baud(115200);
gakuburu 3:9f80eee7aa78 10 twe_lite.attach(this, &LambdaController::data_receive_isr, Serial::RxIrq);
gakuburu 0:1b682aa7d935 11
gakuburu 3:9f80eee7aa78 12 error_count = 0;
gakuburu 3:9f80eee7aa78 13 error_id = NoDataError;
gakuburu 3:9f80eee7aa78 14 error_detection_timer.attach(this, &LambdaController::error_detection_isr,
gakuburu 3:9f80eee7aa78 15 timeout_time);
gakuburu 0:1b682aa7d935 16 }
gakuburu 0:1b682aa7d935 17
gakuburu 3:9f80eee7aa78 18 void LambdaController::data_receive_isr()
gakuburu 3:9f80eee7aa78 19 {
gakuburu 3:9f80eee7aa78 20 int data;
gakuburu 3:9f80eee7aa78 21 int i;
gakuburu 0:1b682aa7d935 22
gakuburu 3:9f80eee7aa78 23 while (twe_lite.readable()) {
gakuburu 3:9f80eee7aa78 24 data = twe_lite.getc();
gakuburu 3:9f80eee7aa78 25
gakuburu 3:9f80eee7aa78 26 if (data == 0x3A) {
gakuburu 3:9f80eee7aa78 27 buffer_head = 0;
gakuburu 3:9f80eee7aa78 28 }
gakuburu 3:9f80eee7aa78 29
gakuburu 3:9f80eee7aa78 30 if (buffer_head < 10 && buffer_head != -1) {
gakuburu 3:9f80eee7aa78 31 received_buffer[buffer_head] = data;
gakuburu 3:9f80eee7aa78 32 buffer_head++;
gakuburu 3:9f80eee7aa78 33 } else {
gakuburu 3:9f80eee7aa78 34 error_id = InvalidDataError;
gakuburu 3:9f80eee7aa78 35 buffer_head = -1;
gakuburu 3:9f80eee7aa78 36 }
gakuburu 0:1b682aa7d935 37
gakuburu 3:9f80eee7aa78 38 if (buffer_head == 10) {
gakuburu 3:9f80eee7aa78 39 if(received_buffer[0] == 0x3A) {
gakuburu 3:9f80eee7aa78 40 for (i = 0; i < 10; i++) {
gakuburu 3:9f80eee7aa78 41 received_data[i] = received_buffer[i];
gakuburu 3:9f80eee7aa78 42 }
gakuburu 3:9f80eee7aa78 43
gakuburu 3:9f80eee7aa78 44 if (!is_axis_initialized) {
gakuburu 3:9f80eee7aa78 45 initialize_axis();
gakuburu 3:9f80eee7aa78 46 is_axis_initialized = true;
gakuburu 3:9f80eee7aa78 47 }
gakuburu 0:1b682aa7d935 48
gakuburu 3:9f80eee7aa78 49 error_count = 0;
gakuburu 3:9f80eee7aa78 50 error_id = NoError;
gakuburu 3:9f80eee7aa78 51 } else {
gakuburu 3:9f80eee7aa78 52 buffer_head = -1;
gakuburu 3:9f80eee7aa78 53 error_id = InvalidDataError;
gakuburu 3:9f80eee7aa78 54 }
gakuburu 3:9f80eee7aa78 55 }
gakuburu 3:9f80eee7aa78 56
gakuburu 3:9f80eee7aa78 57 if(data == EOF) {
gakuburu 3:9f80eee7aa78 58 error_id = SerialBusyError;
gakuburu 3:9f80eee7aa78 59 break;
gakuburu 3:9f80eee7aa78 60 }
gakuburu 3:9f80eee7aa78 61 }
gakuburu 0:1b682aa7d935 62 }
gakuburu 0:1b682aa7d935 63
gakuburu 3:9f80eee7aa78 64 void LambdaController::error_detection_isr()
gakuburu 3:9f80eee7aa78 65 {
gakuburu 3:9f80eee7aa78 66 if (error_count < error_threshold) {
gakuburu 3:9f80eee7aa78 67 error_count++;
gakuburu 3:9f80eee7aa78 68 } else {
gakuburu 3:9f80eee7aa78 69 error_id = TimeoutError;
gakuburu 3:9f80eee7aa78 70 }
gakuburu 0:1b682aa7d935 71 }
gakuburu 0:1b682aa7d935 72
gakuburu 3:9f80eee7aa78 73 uint8_t LambdaController::get_all_switch()
gakuburu 3:9f80eee7aa78 74 {
gakuburu 3:9f80eee7aa78 75 return received_data[1];
gakuburu 0:1b682aa7d935 76 }
gakuburu 0:1b682aa7d935 77
gakuburu 3:9f80eee7aa78 78 bool LambdaController::get_switch(int num)
gakuburu 3:9f80eee7aa78 79 {
gakuburu 3:9f80eee7aa78 80 bool status = false;
gakuburu 3:9f80eee7aa78 81 if (num < 8 && num >= 0) {
gakuburu 3:9f80eee7aa78 82 if (get_all_switch() & (1 << num)) {
gakuburu 3:9f80eee7aa78 83 status = true;
gakuburu 3:9f80eee7aa78 84 } else {
gakuburu 3:9f80eee7aa78 85 status = false;
gakuburu 3:9f80eee7aa78 86 }
gakuburu 3:9f80eee7aa78 87 } else {
gakuburu 3:9f80eee7aa78 88 status = false;
gakuburu 3:9f80eee7aa78 89 }
gakuburu 0:1b682aa7d935 90
gakuburu 3:9f80eee7aa78 91 return status;
gakuburu 0:1b682aa7d935 92 }
gakuburu 0:1b682aa7d935 93
gakuburu 3:9f80eee7aa78 94 int LambdaController::get_raw_axis(AxisId id)
gakuburu 3:9f80eee7aa78 95 {
gakuburu 3:9f80eee7aa78 96 uint8_t *data;
gakuburu 3:9f80eee7aa78 97 int value;
gakuburu 0:1b682aa7d935 98
gakuburu 3:9f80eee7aa78 99 data = &received_data[(int) id * 2 + 2];
gakuburu 3:9f80eee7aa78 100 value = (data[0] << 8) | (data[1]);
gakuburu 0:1b682aa7d935 101
gakuburu 3:9f80eee7aa78 102 return value;
gakuburu 0:1b682aa7d935 103 }
gakuburu 0:1b682aa7d935 104
gakuburu 3:9f80eee7aa78 105 double LambdaController::get_axis(AxisId id)
gakuburu 3:9f80eee7aa78 106 {
gakuburu 3:9f80eee7aa78 107 double value = 0;
gakuburu 0:1b682aa7d935 108
gakuburu 3:9f80eee7aa78 109 value = (double) (get_raw_axis(id) - axis_center[(int) id]) / 512.0;
gakuburu 0:1b682aa7d935 110
gakuburu 3:9f80eee7aa78 111 if (value > -axis_threshold && value < axis_threshold) {
gakuburu 3:9f80eee7aa78 112 value = 0.0;
gakuburu 3:9f80eee7aa78 113 } else if (value < -1.0) {
gakuburu 3:9f80eee7aa78 114 value = -1.0;
gakuburu 3:9f80eee7aa78 115 } else if (value > 1.0) {
gakuburu 3:9f80eee7aa78 116 value = 1;
gakuburu 3:9f80eee7aa78 117 }
gakuburu 0:1b682aa7d935 118
gakuburu 3:9f80eee7aa78 119 return value;
gakuburu 0:1b682aa7d935 120 }
gakuburu 0:1b682aa7d935 121
gakuburu 3:9f80eee7aa78 122 void LambdaController::initialize_axis(void)
gakuburu 3:9f80eee7aa78 123 {
gakuburu 3:9f80eee7aa78 124 int i;
gakuburu 3:9f80eee7aa78 125 for (i = 0; i < 4; i++) {
gakuburu 3:9f80eee7aa78 126 initialize_axis((AxisId) i);
gakuburu 3:9f80eee7aa78 127 }
gakuburu 0:1b682aa7d935 128 }
gakuburu 0:1b682aa7d935 129
gakuburu 3:9f80eee7aa78 130 void LambdaController::initialize_axis(AxisId id)
gakuburu 3:9f80eee7aa78 131 {
gakuburu 3:9f80eee7aa78 132 axis_center[(int) id] = get_raw_axis(id);
gakuburu 0:1b682aa7d935 133 }
gakuburu 0:1b682aa7d935 134
gakuburu 3:9f80eee7aa78 135 LambdaController::ErrorFactor LambdaController::get_error()
gakuburu 3:9f80eee7aa78 136 {
gakuburu 3:9f80eee7aa78 137 return error_id;
gakuburu 0:1b682aa7d935 138 }
gakuburu 0:1b682aa7d935 139
gakuburu 1:e270b8b60070 140 void LambdaController::debug(const char *format, ...)
gakuburu 0:1b682aa7d935 141 {
gakuburu 3:9f80eee7aa78 142 /*
gakuburu 0:1b682aa7d935 143 va_list arg;
gakuburu 0:1b682aa7d935 144
gakuburu 0:1b682aa7d935 145 va_start(arg, format);
gakuburu 1:e270b8b60070 146 twe_lite.vprintf(format, arg);
gakuburu 0:1b682aa7d935 147 va_end(arg);
gakuburu 3:9f80eee7aa78 148 */
gakuburu 3:9f80eee7aa78 149 }