send GPS data via LoRaWAN
Dependencies: TinyGPS mbed ADXL345_I2C Sht31
EEAB-P1/Eeabp1.cpp@2:829187d4fd5e, 2017-06-25 (annotated)
- Committer:
- koyo_take
- Date:
- Sun Jun 25 00:04:16 2017 +0000
- Revision:
- 2:829187d4fd5e
- Parent:
- 1:195da8230785
add samples to use sensors
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
koyo_take | 0:97a57be77fbb | 1 | #include "Eeabp1.h" |
koyo_take | 0:97a57be77fbb | 2 | //#include "rtos.h" |
koyo_take | 0:97a57be77fbb | 3 | |
koyo_take | 0:97a57be77fbb | 4 | //Thread thread; |
koyo_take | 0:97a57be77fbb | 5 | static const int lora_msg_max_len = 11; |
koyo_take | 0:97a57be77fbb | 6 | |
koyo_take | 1:195da8230785 | 7 | Eeabp1::Eeabp1() : pwr_en(P0_0), led(P0_23), |
koyo_take | 1:195da8230785 | 8 | lora_power(P0_5), lora_reset(P0_22), grove_power(P0_6), |
koyo_take | 1:195da8230785 | 9 | grv_sel2a(P0_19), grv_sel2g(P0_18), grv_sel1a(P0_17), grv_sel1g(P0_16), |
koyo_take | 1:195da8230785 | 10 | grv_p1s1a(P0_2), grv_p1s2a(P0_1), |
koyo_take | 1:195da8230785 | 11 | grv_p2s1a(P0_4), grv_p2s2a(P0_3) |
koyo_take | 0:97a57be77fbb | 12 | { |
koyo_take | 0:97a57be77fbb | 13 | this->led_state = LED_OFF; |
koyo_take | 0:97a57be77fbb | 14 | this->led = 0; |
koyo_take | 0:97a57be77fbb | 15 | this->serial = new RawSerial(P0_9, P0_11); |
koyo_take | 0:97a57be77fbb | 16 | this->serial->baud(9600); /* use for LoRa */ |
koyo_take | 0:97a57be77fbb | 17 | this->pwr_en = 1; // メイン電源投入 |
koyo_take | 0:97a57be77fbb | 18 | this->lora_power = 0; |
koyo_take | 0:97a57be77fbb | 19 | this->lora_reset = 0; |
koyo_take | 0:97a57be77fbb | 20 | this->grove_power = 0; |
koyo_take | 0:97a57be77fbb | 21 | this->lora_enabled = false; |
koyo_take | 0:97a57be77fbb | 22 | this->grove_enabled = false; |
koyo_take | 1:195da8230785 | 23 | // Grove端子をHiZに |
koyo_take | 1:195da8230785 | 24 | this->grv_sel1g = 1; |
koyo_take | 1:195da8230785 | 25 | this->grv_sel1a = 1; |
koyo_take | 1:195da8230785 | 26 | this->grv_sel2g = 1; |
koyo_take | 1:195da8230785 | 27 | this->grv_sel2a = 1; |
koyo_take | 1:195da8230785 | 28 | grv_p1s1do = NULL, grv_p1s2do = NULL, grv_p1s1di = NULL, grv_p1s2di = NULL; |
koyo_take | 1:195da8230785 | 29 | grv_p2s1do = NULL, grv_p2s2do = NULL, grv_p2s1di = NULL, grv_p2s2di = NULL; |
koyo_take | 1:195da8230785 | 30 | temp_humid_sensor = NULL; |
koyo_take | 0:97a57be77fbb | 31 | } |
koyo_take | 0:97a57be77fbb | 32 | |
koyo_take | 0:97a57be77fbb | 33 | int Eeabp1::setLedState(EeabLedState state) |
koyo_take | 0:97a57be77fbb | 34 | { |
koyo_take | 0:97a57be77fbb | 35 | this->led_state = state; |
koyo_take | 0:97a57be77fbb | 36 | |
koyo_take | 0:97a57be77fbb | 37 | if (this->led_state == LED_OFF) { |
koyo_take | 0:97a57be77fbb | 38 | this->led = 0; |
koyo_take | 0:97a57be77fbb | 39 | } else { |
koyo_take | 0:97a57be77fbb | 40 | this->led = 1; |
koyo_take | 0:97a57be77fbb | 41 | } |
koyo_take | 0:97a57be77fbb | 42 | |
koyo_take | 0:97a57be77fbb | 43 | return 0; |
koyo_take | 0:97a57be77fbb | 44 | } |
koyo_take | 0:97a57be77fbb | 45 | |
koyo_take | 0:97a57be77fbb | 46 | void Eeabp1::loop(void) |
koyo_take | 0:97a57be77fbb | 47 | { |
koyo_take | 0:97a57be77fbb | 48 | switch (this->led_state) { |
koyo_take | 0:97a57be77fbb | 49 | case LED_OFF: |
koyo_take | 0:97a57be77fbb | 50 | /* fall through */ |
koyo_take | 0:97a57be77fbb | 51 | case LED_ON: |
koyo_take | 0:97a57be77fbb | 52 | break; |
koyo_take | 0:97a57be77fbb | 53 | case LED_BLINK_FAST: |
koyo_take | 0:97a57be77fbb | 54 | case LED_BLINK_MID: |
koyo_take | 0:97a57be77fbb | 55 | case LED_BLINK_SLOW: |
koyo_take | 0:97a57be77fbb | 56 | this->led = !this->led; |
koyo_take | 0:97a57be77fbb | 57 | break; |
koyo_take | 0:97a57be77fbb | 58 | } |
koyo_take | 0:97a57be77fbb | 59 | } |
koyo_take | 0:97a57be77fbb | 60 | |
koyo_take | 0:97a57be77fbb | 61 | int Eeabp1::debug(const char * format, ...) |
koyo_take | 0:97a57be77fbb | 62 | { |
koyo_take | 0:97a57be77fbb | 63 | char tmp[80]; |
koyo_take | 0:97a57be77fbb | 64 | int ret; |
koyo_take | 0:97a57be77fbb | 65 | |
koyo_take | 0:97a57be77fbb | 66 | std::va_list arg; |
koyo_take | 0:97a57be77fbb | 67 | va_start(arg, format); |
koyo_take | 0:97a57be77fbb | 68 | vsnprintf(tmp, sizeof(tmp), format, arg); |
koyo_take | 0:97a57be77fbb | 69 | va_end(arg); |
koyo_take | 0:97a57be77fbb | 70 | |
koyo_take | 0:97a57be77fbb | 71 | delete this->serial; |
koyo_take | 0:97a57be77fbb | 72 | this->serial = new RawSerial(P0_8, P0_10); |
koyo_take | 0:97a57be77fbb | 73 | ret = this->serial->puts(tmp); |
koyo_take | 0:97a57be77fbb | 74 | delete this->serial; |
koyo_take | 0:97a57be77fbb | 75 | this->serial = new RawSerial(P0_9, P0_11); |
koyo_take | 0:97a57be77fbb | 76 | |
koyo_take | 0:97a57be77fbb | 77 | return ret; |
koyo_take | 0:97a57be77fbb | 78 | } |
koyo_take | 0:97a57be77fbb | 79 | |
koyo_take | 0:97a57be77fbb | 80 | int Eeabp1::setLoRaPower(bool on) |
koyo_take | 0:97a57be77fbb | 81 | { |
koyo_take | 0:97a57be77fbb | 82 | int ret; |
koyo_take | 0:97a57be77fbb | 83 | |
koyo_take | 0:97a57be77fbb | 84 | if (on) { |
koyo_take | 0:97a57be77fbb | 85 | if (lora_enabled) |
koyo_take | 0:97a57be77fbb | 86 | return 0; /* power is already on, do nothing */ |
koyo_take | 0:97a57be77fbb | 87 | |
koyo_take | 0:97a57be77fbb | 88 | this->lora_power= 1; |
koyo_take | 0:97a57be77fbb | 89 | this->lora_reset = 1; |
koyo_take | 0:97a57be77fbb | 90 | wait_us(500000); |
koyo_take | 0:97a57be77fbb | 91 | serial->printf("mod set_echo off\r\n"); // ローカルエコー:無効 |
koyo_take | 0:97a57be77fbb | 92 | wait(1); |
koyo_take | 0:97a57be77fbb | 93 | flushSerial(); |
koyo_take | 1:195da8230785 | 94 | serial->printf("mod factory_reset\r\n"); // ファクトリーリセットを行い鍵をリフレッシュ |
koyo_take | 1:195da8230785 | 95 | ret = chkSerialCharOk(); |
koyo_take | 1:195da8230785 | 96 | if (ret != 0) |
koyo_take | 1:195da8230785 | 97 | return ret; |
koyo_take | 1:195da8230785 | 98 | serial->printf("mod set_echo off\r\n"); // ローカルエコー:無効 |
koyo_take | 1:195da8230785 | 99 | wait(1); |
koyo_take | 0:97a57be77fbb | 100 | serial->printf("lorawan join otaa\r\n"); // Gatewayに接続(OTAA) |
koyo_take | 0:97a57be77fbb | 101 | ret = chkSerialCharRes('a'); // 成功 ">> accepted" 失敗 ">> unsuccess" |
koyo_take | 0:97a57be77fbb | 102 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 103 | return ret; |
koyo_take | 0:97a57be77fbb | 104 | serial->printf("lorawan set_dr 2\r\n"); // データレートの設定(11byte) |
koyo_take | 0:97a57be77fbb | 105 | ret = chkSerialCharOk(); |
koyo_take | 0:97a57be77fbb | 106 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 107 | return ret; |
koyo_take | 0:97a57be77fbb | 108 | |
koyo_take | 0:97a57be77fbb | 109 | this->lora_enabled = true; |
koyo_take | 0:97a57be77fbb | 110 | } else { /* off */ |
koyo_take | 0:97a57be77fbb | 111 | if (!lora_enabled) |
koyo_take | 0:97a57be77fbb | 112 | return 0; /* power is already off, do nothing */ |
koyo_take | 0:97a57be77fbb | 113 | |
koyo_take | 0:97a57be77fbb | 114 | lora_power= 0; |
koyo_take | 0:97a57be77fbb | 115 | lora_enabled = false; |
koyo_take | 0:97a57be77fbb | 116 | } |
koyo_take | 0:97a57be77fbb | 117 | |
koyo_take | 0:97a57be77fbb | 118 | return 0; |
koyo_take | 0:97a57be77fbb | 119 | } |
koyo_take | 0:97a57be77fbb | 120 | |
koyo_take | 0:97a57be77fbb | 121 | int Eeabp1::sendLoRaString(const char * format, ...) |
koyo_take | 0:97a57be77fbb | 122 | { |
koyo_take | 0:97a57be77fbb | 123 | char str[lora_msg_max_len+1] = {0x00, }; |
koyo_take | 0:97a57be77fbb | 124 | char msg[64]; |
koyo_take | 0:97a57be77fbb | 125 | char *p = msg; |
koyo_take | 0:97a57be77fbb | 126 | |
koyo_take | 0:97a57be77fbb | 127 | std::va_list arg; |
koyo_take | 0:97a57be77fbb | 128 | va_start(arg, format); |
koyo_take | 0:97a57be77fbb | 129 | vsnprintf(str, sizeof(str), format, arg); |
koyo_take | 0:97a57be77fbb | 130 | va_end(arg); |
koyo_take | 0:97a57be77fbb | 131 | |
koyo_take | 0:97a57be77fbb | 132 | p += sprintf(msg, "lorawan tx ucnf 16 "); |
koyo_take | 0:97a57be77fbb | 133 | for (unsigned int i = 0; i < strlen(str); i++) { |
koyo_take | 0:97a57be77fbb | 134 | p += sprintf(p, "%02x", str[i]); |
koyo_take | 0:97a57be77fbb | 135 | } |
koyo_take | 0:97a57be77fbb | 136 | sprintf(p, "\r\n"); |
koyo_take | 0:97a57be77fbb | 137 | |
koyo_take | 0:97a57be77fbb | 138 | flushSerial(); |
koyo_take | 0:97a57be77fbb | 139 | serial->puts(msg); |
koyo_take | 0:97a57be77fbb | 140 | |
koyo_take | 0:97a57be77fbb | 141 | return 0; |
koyo_take | 0:97a57be77fbb | 142 | } |
koyo_take | 0:97a57be77fbb | 143 | |
koyo_take | 0:97a57be77fbb | 144 | void Eeabp1::setGrovePower(bool on) |
koyo_take | 0:97a57be77fbb | 145 | { |
koyo_take | 0:97a57be77fbb | 146 | if (on) { |
koyo_take | 0:97a57be77fbb | 147 | if (grove_enabled) |
koyo_take | 0:97a57be77fbb | 148 | return; /* power is already on, do nothing */ |
koyo_take | 0:97a57be77fbb | 149 | |
koyo_take | 0:97a57be77fbb | 150 | grove_power = 1; |
koyo_take | 0:97a57be77fbb | 151 | } else { |
koyo_take | 0:97a57be77fbb | 152 | if (!grove_enabled) |
koyo_take | 0:97a57be77fbb | 153 | return; /* power is already off, do nothing */ |
koyo_take | 0:97a57be77fbb | 154 | |
koyo_take | 1:195da8230785 | 155 | // Grove端子をHiZに |
koyo_take | 1:195da8230785 | 156 | grv_sel1g = 1; |
koyo_take | 1:195da8230785 | 157 | grv_sel1a = 1; |
koyo_take | 1:195da8230785 | 158 | grv_sel2g = 1; |
koyo_take | 1:195da8230785 | 159 | grv_sel2a = 1; |
koyo_take | 0:97a57be77fbb | 160 | grove_power = 0; |
koyo_take | 0:97a57be77fbb | 161 | } |
koyo_take | 0:97a57be77fbb | 162 | } |
koyo_take | 0:97a57be77fbb | 163 | |
koyo_take | 1:195da8230785 | 164 | int Eeabp1::setGrovePortType(EeabGrovePort port, EeabGrovePortType type) |
koyo_take | 1:195da8230785 | 165 | { |
koyo_take | 1:195da8230785 | 166 | switch (port) { |
koyo_take | 1:195da8230785 | 167 | case GROVE_CH1: |
koyo_take | 1:195da8230785 | 168 | if (type == GROVE_ANALOG) { |
koyo_take | 1:195da8230785 | 169 | grv_sel1g = 1; |
koyo_take | 1:195da8230785 | 170 | grv_sel1a = 0; |
koyo_take | 1:195da8230785 | 171 | } else { |
koyo_take | 1:195da8230785 | 172 | grv_sel1g = 0; |
koyo_take | 1:195da8230785 | 173 | grv_sel1a = 1; |
koyo_take | 1:195da8230785 | 174 | } |
koyo_take | 1:195da8230785 | 175 | break; |
koyo_take | 1:195da8230785 | 176 | case GROVE_CH2: |
koyo_take | 1:195da8230785 | 177 | if (type == GROVE_ANALOG) { |
koyo_take | 1:195da8230785 | 178 | grv_sel2g = 1; |
koyo_take | 1:195da8230785 | 179 | grv_sel2a = 0; |
koyo_take | 1:195da8230785 | 180 | } else { |
koyo_take | 1:195da8230785 | 181 | grv_sel2g = 0; |
koyo_take | 1:195da8230785 | 182 | grv_sel2a = 1; |
koyo_take | 1:195da8230785 | 183 | } |
koyo_take | 1:195da8230785 | 184 | break; |
koyo_take | 1:195da8230785 | 185 | default: |
koyo_take | 1:195da8230785 | 186 | /* do nothing */ |
koyo_take | 1:195da8230785 | 187 | break; |
koyo_take | 1:195da8230785 | 188 | } |
koyo_take | 1:195da8230785 | 189 | |
koyo_take | 1:195da8230785 | 190 | return 0; |
koyo_take | 1:195da8230785 | 191 | } |
koyo_take | 1:195da8230785 | 192 | |
koyo_take | 1:195da8230785 | 193 | int Eeabp1::setGroveDioDirection(EeabGrovePort port, EeabGroveDioDirection dir, Callback<void()> f) |
koyo_take | 1:195da8230785 | 194 | { |
koyo_take | 1:195da8230785 | 195 | switch (port) { |
koyo_take | 1:195da8230785 | 196 | case GROVE_CH1: |
koyo_take | 1:195da8230785 | 197 | if(dir == GROVE_DIO_OUT) { |
koyo_take | 1:195da8230785 | 198 | if (grv_p1s1di) { |
koyo_take | 1:195da8230785 | 199 | delete grv_p1s1di; |
koyo_take | 1:195da8230785 | 200 | grv_p1s1di = NULL; |
koyo_take | 1:195da8230785 | 201 | } |
koyo_take | 1:195da8230785 | 202 | grv_p1s1do = new DigitalOut(P0_13); |
koyo_take | 1:195da8230785 | 203 | |
koyo_take | 1:195da8230785 | 204 | if (grv_p1s2di) { |
koyo_take | 1:195da8230785 | 205 | delete grv_p1s2di; |
koyo_take | 1:195da8230785 | 206 | grv_p1s2di = NULL; |
koyo_take | 1:195da8230785 | 207 | } |
koyo_take | 1:195da8230785 | 208 | grv_p1s2do = new DigitalOut(P0_12); |
koyo_take | 1:195da8230785 | 209 | } else { /* GROVE_DIO_IN */ |
koyo_take | 1:195da8230785 | 210 | if (grv_p1s1do) { |
koyo_take | 1:195da8230785 | 211 | delete grv_p1s1do; |
koyo_take | 1:195da8230785 | 212 | grv_p1s1do = NULL; |
koyo_take | 1:195da8230785 | 213 | } |
koyo_take | 1:195da8230785 | 214 | grv_p1s1di = new InterruptIn(P0_13); |
koyo_take | 1:195da8230785 | 215 | if (f) |
koyo_take | 1:195da8230785 | 216 | grv_p1s1di->rise(f); |
koyo_take | 1:195da8230785 | 217 | |
koyo_take | 1:195da8230785 | 218 | if (grv_p1s2do) { |
koyo_take | 1:195da8230785 | 219 | delete grv_p1s2do; |
koyo_take | 1:195da8230785 | 220 | grv_p1s2do = NULL; |
koyo_take | 1:195da8230785 | 221 | } |
koyo_take | 1:195da8230785 | 222 | grv_p1s2di = new InterruptIn(P0_12); |
koyo_take | 1:195da8230785 | 223 | grv_p1s2di->rise(f); |
koyo_take | 1:195da8230785 | 224 | } |
koyo_take | 1:195da8230785 | 225 | break; |
koyo_take | 1:195da8230785 | 226 | case GROVE_CH2: |
koyo_take | 1:195da8230785 | 227 | if(dir == GROVE_DIO_OUT) { |
koyo_take | 1:195da8230785 | 228 | if (grv_p2s1di) { |
koyo_take | 1:195da8230785 | 229 | delete grv_p2s1di; |
koyo_take | 1:195da8230785 | 230 | grv_p2s1di = NULL; |
koyo_take | 1:195da8230785 | 231 | } |
koyo_take | 1:195da8230785 | 232 | grv_p2s1do = new DigitalOut(P0_15); |
koyo_take | 1:195da8230785 | 233 | |
koyo_take | 1:195da8230785 | 234 | if (grv_p2s2di) { |
koyo_take | 1:195da8230785 | 235 | delete grv_p2s2di; |
koyo_take | 1:195da8230785 | 236 | grv_p2s2di = NULL; |
koyo_take | 1:195da8230785 | 237 | } |
koyo_take | 1:195da8230785 | 238 | grv_p2s2do = new DigitalOut(P0_14); |
koyo_take | 1:195da8230785 | 239 | } else { /* GROVE_DIO_IN */ |
koyo_take | 1:195da8230785 | 240 | if (grv_p2s1do) { |
koyo_take | 1:195da8230785 | 241 | delete grv_p2s1do; |
koyo_take | 1:195da8230785 | 242 | grv_p2s1do = NULL; |
koyo_take | 1:195da8230785 | 243 | } |
koyo_take | 1:195da8230785 | 244 | grv_p2s1di = new InterruptIn(P0_15); |
koyo_take | 1:195da8230785 | 245 | if (f) |
koyo_take | 1:195da8230785 | 246 | grv_p2s1di->rise(f); |
koyo_take | 1:195da8230785 | 247 | |
koyo_take | 1:195da8230785 | 248 | if (grv_p2s2do) { |
koyo_take | 1:195da8230785 | 249 | delete grv_p2s2do; |
koyo_take | 1:195da8230785 | 250 | grv_p2s2do = NULL; |
koyo_take | 1:195da8230785 | 251 | } |
koyo_take | 1:195da8230785 | 252 | grv_p2s2di = new InterruptIn(P0_14); |
koyo_take | 1:195da8230785 | 253 | grv_p2s2di->rise(f); |
koyo_take | 1:195da8230785 | 254 | } |
koyo_take | 1:195da8230785 | 255 | break; |
koyo_take | 1:195da8230785 | 256 | default: |
koyo_take | 1:195da8230785 | 257 | /* do nothing */ |
koyo_take | 1:195da8230785 | 258 | break; |
koyo_take | 1:195da8230785 | 259 | } |
koyo_take | 1:195da8230785 | 260 | |
koyo_take | 1:195da8230785 | 261 | return 0; |
koyo_take | 1:195da8230785 | 262 | } |
koyo_take | 1:195da8230785 | 263 | |
koyo_take | 1:195da8230785 | 264 | int Eeabp1::setGroveDio(EeabGrovePort port, EeabGroveDio val) |
koyo_take | 1:195da8230785 | 265 | { |
koyo_take | 1:195da8230785 | 266 | switch (port) { |
koyo_take | 1:195da8230785 | 267 | case GROVE_CH1: |
koyo_take | 1:195da8230785 | 268 | *grv_p1s1do = val; |
koyo_take | 1:195da8230785 | 269 | *grv_p1s2do = val; |
koyo_take | 1:195da8230785 | 270 | break; |
koyo_take | 1:195da8230785 | 271 | case GROVE_CH2: |
koyo_take | 1:195da8230785 | 272 | *grv_p2s1do = val; |
koyo_take | 1:195da8230785 | 273 | *grv_p2s2do = val; |
koyo_take | 1:195da8230785 | 274 | break; |
koyo_take | 1:195da8230785 | 275 | default: |
koyo_take | 1:195da8230785 | 276 | break; |
koyo_take | 1:195da8230785 | 277 | } |
koyo_take | 1:195da8230785 | 278 | |
koyo_take | 1:195da8230785 | 279 | return 0; |
koyo_take | 1:195da8230785 | 280 | } |
koyo_take | 1:195da8230785 | 281 | |
koyo_take | 1:195da8230785 | 282 | int Eeabp1::getGroveDio(EeabGrovePort port, EeabGroveSig sig) |
koyo_take | 1:195da8230785 | 283 | { |
koyo_take | 1:195da8230785 | 284 | switch (port) { |
koyo_take | 1:195da8230785 | 285 | case GROVE_CH1: |
koyo_take | 1:195da8230785 | 286 | if (grv_p1s1di == NULL) |
koyo_take | 1:195da8230785 | 287 | return -1; |
koyo_take | 1:195da8230785 | 288 | return (sig == GROVE_SIG1) ? |
koyo_take | 1:195da8230785 | 289 | grv_p1s1di->read() : grv_p1s2di->read(); |
koyo_take | 1:195da8230785 | 290 | case GROVE_CH2: |
koyo_take | 1:195da8230785 | 291 | if (grv_p2s1di == NULL) |
koyo_take | 1:195da8230785 | 292 | return -1; |
koyo_take | 1:195da8230785 | 293 | return (sig == GROVE_SIG1) ? |
koyo_take | 1:195da8230785 | 294 | grv_p2s1di->read() : grv_p2s2di->read(); |
koyo_take | 1:195da8230785 | 295 | default: |
koyo_take | 1:195da8230785 | 296 | break; |
koyo_take | 1:195da8230785 | 297 | } |
koyo_take | 1:195da8230785 | 298 | |
koyo_take | 1:195da8230785 | 299 | return -1; |
koyo_take | 1:195da8230785 | 300 | } |
koyo_take | 1:195da8230785 | 301 | |
koyo_take | 1:195da8230785 | 302 | float Eeabp1::getGroveAnalog(EeabGrovePort port, EeabGroveSig sig) |
koyo_take | 1:195da8230785 | 303 | { |
koyo_take | 1:195da8230785 | 304 | switch (port) { |
koyo_take | 1:195da8230785 | 305 | case GROVE_CH1: |
koyo_take | 1:195da8230785 | 306 | return (sig == GROVE_SIG1) ? |
koyo_take | 1:195da8230785 | 307 | grv_p1s1a.read() : grv_p1s2a.read(); |
koyo_take | 1:195da8230785 | 308 | case GROVE_CH2: |
koyo_take | 1:195da8230785 | 309 | return (sig == GROVE_SIG1) ? |
koyo_take | 1:195da8230785 | 310 | grv_p2s1a.read() : grv_p2s2a.read(); |
koyo_take | 1:195da8230785 | 311 | default: |
koyo_take | 1:195da8230785 | 312 | break; |
koyo_take | 1:195da8230785 | 313 | } |
koyo_take | 1:195da8230785 | 314 | |
koyo_take | 1:195da8230785 | 315 | return -1; |
koyo_take | 1:195da8230785 | 316 | } |
koyo_take | 1:195da8230785 | 317 | |
koyo_take | 1:195da8230785 | 318 | int Eeabp1::enableTempHumidSensor(void) |
koyo_take | 1:195da8230785 | 319 | { |
koyo_take | 1:195da8230785 | 320 | temp_humid_sensor = new Sht31(P0_30, P0_7); |
koyo_take | 1:195da8230785 | 321 | return 0; |
koyo_take | 1:195da8230785 | 322 | } |
koyo_take | 1:195da8230785 | 323 | |
koyo_take | 1:195da8230785 | 324 | float Eeabp1::getTemp(void) |
koyo_take | 1:195da8230785 | 325 | { |
koyo_take | 1:195da8230785 | 326 | if (!temp_humid_sensor) |
koyo_take | 1:195da8230785 | 327 | return -1; |
koyo_take | 1:195da8230785 | 328 | |
koyo_take | 1:195da8230785 | 329 | return temp_humid_sensor->readTemperature(); |
koyo_take | 1:195da8230785 | 330 | } |
koyo_take | 1:195da8230785 | 331 | |
koyo_take | 1:195da8230785 | 332 | float Eeabp1::getHumid(void) |
koyo_take | 1:195da8230785 | 333 | { |
koyo_take | 1:195da8230785 | 334 | if (!temp_humid_sensor) |
koyo_take | 1:195da8230785 | 335 | return -1; |
koyo_take | 1:195da8230785 | 336 | |
koyo_take | 1:195da8230785 | 337 | return temp_humid_sensor->readHumidity(); |
koyo_take | 1:195da8230785 | 338 | } |
koyo_take | 1:195da8230785 | 339 | |
koyo_take | 1:195da8230785 | 340 | int Eeabp1::enableAccelerometer(void) |
koyo_take | 1:195da8230785 | 341 | { |
koyo_take | 1:195da8230785 | 342 | accelerometer = new ADXL345_I2C(P0_30, P0_7); |
koyo_take | 1:195da8230785 | 343 | |
koyo_take | 1:195da8230785 | 344 | this->debug("Device ID is: 0x%02x\n", accelerometer->getDeviceID()); |
koyo_take | 1:195da8230785 | 345 | wait(.001); |
koyo_take | 1:195da8230785 | 346 | |
koyo_take | 1:195da8230785 | 347 | // These are here to test whether any of the initialization fails. It will print the failure |
koyo_take | 1:195da8230785 | 348 | if (accelerometer->setPowerControl(0x00)) { |
koyo_take | 1:195da8230785 | 349 | this->debug("didn't intitialize power control\n"); |
koyo_take | 1:195da8230785 | 350 | return -1; |
koyo_take | 1:195da8230785 | 351 | } |
koyo_take | 1:195da8230785 | 352 | wait(.001); |
koyo_take | 1:195da8230785 | 353 | |
koyo_take | 1:195da8230785 | 354 | //Full resolution, +/-16g, 4mg/LSB. |
koyo_take | 1:195da8230785 | 355 | if(accelerometer->setDataFormatControl(0x0B)) { |
koyo_take | 1:195da8230785 | 356 | this->debug("didn't set data format\n"); |
koyo_take | 1:195da8230785 | 357 | return -1; |
koyo_take | 1:195da8230785 | 358 | } |
koyo_take | 1:195da8230785 | 359 | wait(.001); |
koyo_take | 1:195da8230785 | 360 | |
koyo_take | 1:195da8230785 | 361 | //3.2kHz data rate. |
koyo_take | 1:195da8230785 | 362 | if(accelerometer->setDataRate(ADXL345_3200HZ)) { |
koyo_take | 1:195da8230785 | 363 | this->debug("didn't set data rate\n"); |
koyo_take | 1:195da8230785 | 364 | return -1; |
koyo_take | 1:195da8230785 | 365 | } |
koyo_take | 1:195da8230785 | 366 | wait(.001); |
koyo_take | 1:195da8230785 | 367 | |
koyo_take | 1:195da8230785 | 368 | //Measurement mode. |
koyo_take | 1:195da8230785 | 369 | if(accelerometer->setPowerControl(MeasurementMode)) { |
koyo_take | 1:195da8230785 | 370 | this->debug("didn't set the power control to measurement\n"); |
koyo_take | 1:195da8230785 | 371 | return -1; |
koyo_take | 1:195da8230785 | 372 | } |
koyo_take | 1:195da8230785 | 373 | |
koyo_take | 1:195da8230785 | 374 | return 0; |
koyo_take | 1:195da8230785 | 375 | } |
koyo_take | 1:195da8230785 | 376 | |
koyo_take | 1:195da8230785 | 377 | int Eeabp1::getAcc(int *x, int *y, int *z) |
koyo_take | 1:195da8230785 | 378 | { |
koyo_take | 1:195da8230785 | 379 | int readings[3] = {0, 0, 0}; |
koyo_take | 1:195da8230785 | 380 | accelerometer->getOutput(readings); |
koyo_take | 1:195da8230785 | 381 | *x = readings[0]; |
koyo_take | 1:195da8230785 | 382 | *y = readings[1]; |
koyo_take | 1:195da8230785 | 383 | *z = readings[2]; |
koyo_take | 1:195da8230785 | 384 | |
koyo_take | 1:195da8230785 | 385 | return 0; |
koyo_take | 1:195da8230785 | 386 | } |
koyo_take | 1:195da8230785 | 387 | |
koyo_take | 0:97a57be77fbb | 388 | /* private functions */ |
koyo_take | 0:97a57be77fbb | 389 | void Eeabp1::flushSerial() |
koyo_take | 0:97a57be77fbb | 390 | { |
koyo_take | 0:97a57be77fbb | 391 | while(serial->readable() == true) { |
koyo_take | 0:97a57be77fbb | 392 | serial->getc(); |
koyo_take | 0:97a57be77fbb | 393 | wait_us(1000); |
koyo_take | 0:97a57be77fbb | 394 | } |
koyo_take | 0:97a57be77fbb | 395 | } |
koyo_take | 0:97a57be77fbb | 396 | |
koyo_take | 0:97a57be77fbb | 397 | int Eeabp1::chkSerialChar(const char ch,uint16_t timeout_ms) |
koyo_take | 0:97a57be77fbb | 398 | { |
koyo_take | 0:97a57be77fbb | 399 | uint32_t timeoutCount = 0; |
koyo_take | 0:97a57be77fbb | 400 | |
koyo_take | 0:97a57be77fbb | 401 | while(serial->readable() == false) { |
koyo_take | 0:97a57be77fbb | 402 | wait_us(50); |
koyo_take | 0:97a57be77fbb | 403 | timeoutCount++; |
koyo_take | 0:97a57be77fbb | 404 | if((timeoutCount / 20) >= timeout_ms) |
koyo_take | 0:97a57be77fbb | 405 | return -2; |
koyo_take | 0:97a57be77fbb | 406 | } |
koyo_take | 0:97a57be77fbb | 407 | |
koyo_take | 0:97a57be77fbb | 408 | return (serial->getc() == ch) ? 0 : -1; |
koyo_take | 0:97a57be77fbb | 409 | } |
koyo_take | 0:97a57be77fbb | 410 | |
koyo_take | 0:97a57be77fbb | 411 | int Eeabp1::waitSerialChar(const char ch,uint16_t timeout_ms) |
koyo_take | 0:97a57be77fbb | 412 | { |
koyo_take | 0:97a57be77fbb | 413 | uint32_t timeoutCount = 0; |
koyo_take | 0:97a57be77fbb | 414 | |
koyo_take | 0:97a57be77fbb | 415 | do { |
koyo_take | 0:97a57be77fbb | 416 | while(serial->readable() == false) { |
koyo_take | 0:97a57be77fbb | 417 | wait_us(50); |
koyo_take | 0:97a57be77fbb | 418 | timeoutCount++; |
koyo_take | 0:97a57be77fbb | 419 | if((timeoutCount / 20) >= timeout_ms) |
koyo_take | 0:97a57be77fbb | 420 | return -2; |
koyo_take | 0:97a57be77fbb | 421 | } |
koyo_take | 0:97a57be77fbb | 422 | } while(serial->getc() != ch); |
koyo_take | 0:97a57be77fbb | 423 | |
koyo_take | 0:97a57be77fbb | 424 | return 0; |
koyo_take | 0:97a57be77fbb | 425 | } |
koyo_take | 0:97a57be77fbb | 426 | |
koyo_take | 0:97a57be77fbb | 427 | int Eeabp1::chkSerialCharOk() |
koyo_take | 0:97a57be77fbb | 428 | { |
koyo_take | 0:97a57be77fbb | 429 | int ret; |
koyo_take | 0:97a57be77fbb | 430 | ret = waitSerialChar('>',4000); |
koyo_take | 0:97a57be77fbb | 431 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 432 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 433 | |
koyo_take | 0:97a57be77fbb | 434 | ret = chkSerialChar('>',2000); |
koyo_take | 0:97a57be77fbb | 435 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 436 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 437 | |
koyo_take | 0:97a57be77fbb | 438 | ret = chkSerialChar(' ',2000); |
koyo_take | 0:97a57be77fbb | 439 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 440 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 441 | |
koyo_take | 0:97a57be77fbb | 442 | ret = chkSerialChar('O',2000); |
koyo_take | 0:97a57be77fbb | 443 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 444 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 445 | |
koyo_take | 0:97a57be77fbb | 446 | ret = chkSerialChar('k',2000); |
koyo_take | 0:97a57be77fbb | 447 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 448 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 449 | |
koyo_take | 0:97a57be77fbb | 450 | ret = waitSerialChar('>',4000); |
koyo_take | 0:97a57be77fbb | 451 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 452 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 453 | |
koyo_take | 0:97a57be77fbb | 454 | wait_us(1000); |
koyo_take | 0:97a57be77fbb | 455 | |
koyo_take | 0:97a57be77fbb | 456 | return 0; |
koyo_take | 0:97a57be77fbb | 457 | } |
koyo_take | 0:97a57be77fbb | 458 | |
koyo_take | 0:97a57be77fbb | 459 | int Eeabp1::chkSerialCharRes(char chkchr) |
koyo_take | 0:97a57be77fbb | 460 | { |
koyo_take | 0:97a57be77fbb | 461 | int ret; |
koyo_take | 0:97a57be77fbb | 462 | ret = waitSerialChar('>', 10000); |
koyo_take | 0:97a57be77fbb | 463 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 464 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 465 | |
koyo_take | 0:97a57be77fbb | 466 | ret = chkSerialChar('>',2000); |
koyo_take | 0:97a57be77fbb | 467 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 468 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 469 | |
koyo_take | 0:97a57be77fbb | 470 | ret = chkSerialChar(' ',2000); |
koyo_take | 0:97a57be77fbb | 471 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 472 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 473 | |
koyo_take | 0:97a57be77fbb | 474 | ret = chkSerialChar('O',2000); |
koyo_take | 0:97a57be77fbb | 475 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 476 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 477 | |
koyo_take | 0:97a57be77fbb | 478 | ret = chkSerialChar('k',2000); |
koyo_take | 0:97a57be77fbb | 479 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 480 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 481 | |
koyo_take | 0:97a57be77fbb | 482 | ret = waitSerialChar('>',16000); |
koyo_take | 0:97a57be77fbb | 483 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 484 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 485 | |
koyo_take | 0:97a57be77fbb | 486 | ret = chkSerialChar('>',2000); |
koyo_take | 0:97a57be77fbb | 487 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 488 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 489 | |
koyo_take | 0:97a57be77fbb | 490 | ret = chkSerialChar(' ',2000); |
koyo_take | 0:97a57be77fbb | 491 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 492 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 493 | |
koyo_take | 1:195da8230785 | 494 | ret = waitSerialChar(chkchr,4000); |
koyo_take | 0:97a57be77fbb | 495 | if (ret != 0) |
koyo_take | 1:195da8230785 | 496 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 497 | |
koyo_take | 0:97a57be77fbb | 498 | ret = waitSerialChar('>',4000); |
koyo_take | 0:97a57be77fbb | 499 | if (ret != 0) |
koyo_take | 0:97a57be77fbb | 500 | return __LINE__; |
koyo_take | 0:97a57be77fbb | 501 | |
koyo_take | 0:97a57be77fbb | 502 | wait_us(1000); |
koyo_take | 0:97a57be77fbb | 503 | |
koyo_take | 0:97a57be77fbb | 504 | return 0; |
koyo_take | 0:97a57be77fbb | 505 | } |