ADC Sensor LoRa Demo
Dependencies: libmDot mbed-rtos mbed-src
Diff: main.cpp
- Revision:
- 0:d9c1041494ec
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Jul 18 00:02:04 2015 +0000 @@ -0,0 +1,110 @@ +/* + * ADC Sensor Demo + * + * Analog inputs are read and pushed to the LoRa gateway. + * + * Analog sensors should be wired to mDot pins 16 and 17. + * + */ + +#include "mbed.h" +#include "mDot.h" +#include <string> +#include <vector> + +/* + * LoRa settings + * + * For Conduit AEP settings can be found at: + * + * https://<ip-address>/lora_network.html + * + * For Conduit mlinux: + * + * /var/config/lora/lora-network-server.conf + * + */ +static std::string config_network_name = "testtest"; +static std::string config_network_pass = "memememe"; +static uint8_t config_frequency_sub_band = 5; + +enum { + MSG_TYPE_ADC0, + MSG_TYPE_ADC1, +}; + +AnalogIn adc0(PA_1); // PIN16 on mDot +AnalogIn adc1(PA_4); // PIN17 on mDot + +Serial debug(USBTX, USBRX); + +int main() { + int32_t rc; + + debug.baud(115200); + + mDot *mdot = mDot::getInstance(); + + mdot->resetConfig(); + + printf("mDot version: %s\r\n", mdot->getId().c_str()); + + // Activity Status on UDK2 + mdot->setActivityLedPin(LED1); + mdot->setActivityLedEnable(true); + + if ((rc = mdot->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) { + printf("failed to set frequency sub-band: %d\r\n", rc); + return 1; + } + + if ((rc = mdot->setNetworkName(config_network_name)) != mDot::MDOT_OK) { + printf("failed to set network name: %d\r\n", rc); + return 1; + } + + if ((rc = mdot->setNetworkPassphrase(config_network_pass)) != mDot::MDOT_OK) { + printf("failed to set network pass phrase: %d\r\n", rc); + return 1; + } + + while ((rc = mdot->joinNetwork()) != mDot::MDOT_OK) { + printf("failed to join network: %d\r\n", rc); + if (mdot->getFrequencyBand() == mDot::FB_868){ + rc = mdot->getNextTxMs(); + } else { + rc = 0; + } + + wait(1); + } + + while (true) { + std::vector<uint8_t> lora_pl; + + // Read analog inputs + uint16_t adc0_value = adc0.read_u16(); + uint16_t adc1_value = adc1.read_u16(); + + // Pack ADC0 TLV + lora_pl.clear(); + lora_pl.push_back(MSG_TYPE_ADC0); + lora_pl.push_back(2); + lora_pl.push_back(((char *) &adc0_value)[1]); + lora_pl.push_back(((char *) &adc0_value)[0]); + + // Pack ADC1 TLV + lora_pl.push_back(MSG_TYPE_ADC1); + lora_pl.push_back(2); + lora_pl.push_back(((char *) &adc1_value)[1]); + lora_pl.push_back(((char *) &adc1_value)[0]); + + // Send message + while ((rc = mdot->send(lora_pl)) != mDot::MDOT_OK) { + printf("failed to send message: %d\r\n", rc); + wait(1); + } + + wait(5); + } +}