soc-2

Dependencies:   PinDetect libmDot mbed-rtos mbed

Fork of thermostat_fan_demo--sensor by Multi-Hackers

Committer:
socie123
Date:
Sat Oct 24 06:03:09 2015 +0000
Revision:
5:838b35b0a3c3
Parent:
3:d55b476ea5e6
soc-2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bbayer 0:18a657d5431f 1 // ---------------------------------------------
bbayer 0:18a657d5431f 2 // MultiTech Thermostat & Fan Demo (Sensor unit)
bbayer 0:18a657d5431f 3 //
bbayer 0:18a657d5431f 4 // This program runs on a MultiTech mDot with:
bbayer 3:d55b476ea5e6 5 // - 1 MultiTech UDK
bbayer 2:d12fedc86ea5 6 // - 1 Arduino base shield
bbayer 0:18a657d5431f 7 // - 2 Grove COM08211P push buttons
bbayer 0:18a657d5431f 8 // - 1 Grove SEN23292P v1.2 temperature sensor
bbayer 0:18a657d5431f 9 // ---------------------------------------------
bbayer 0:18a657d5431f 10
bbayer 0:18a657d5431f 11 #include "mbed.h"
bbayer 0:18a657d5431f 12 #include "mDot.h"
bbayer 0:18a657d5431f 13 #include "PinDetect.h"
bbayer 0:18a657d5431f 14
bbayer 0:18a657d5431f 15 mDot* dot;
socie123 5:838b35b0a3c3 16 //Ticker ledTick;
socie123 5:838b35b0a3c3 17 //Ticker temperatureMonitorTick;
bbayer 0:18a657d5431f 18 Ticker periodicSendTick;
bbayer 0:18a657d5431f 19
socie123 5:838b35b0a3c3 20 //PinDetect up_button(PB_1); //A0 on Arduino base shield
socie123 5:838b35b0a3c3 21 //PinDetect down_button(PB_0); //A1 on Arduino base shield
bbayer 2:d12fedc86ea5 22 AnalogIn temperatureSensor(PC_1); //A2 on Arduino base shield
socie123 5:838b35b0a3c3 23 //DigitalOut transmitLED(LED1);
socie123 5:838b35b0a3c3 24 //DigitalOut buttonPressLED(PA_1); //D6 on Arduino base shield
bbayer 0:18a657d5431f 25
bbayer 0:18a657d5431f 26 // Configuration variables
socie123 5:838b35b0a3c3 27 static std::string config_network_name = "watchlink";
socie123 5:838b35b0a3c3 28 static std::string config_network_pass = "watchlink";
bbayer 1:bf2afd6890a2 29 static uint8_t config_frequency_sub_band = 1;
bbayer 0:18a657d5431f 30
bbayer 0:18a657d5431f 31 //Global Variables
socie123 5:838b35b0a3c3 32 //static uint16_t setPoint = 21; //21 C is standard room temp
bbayer 0:18a657d5431f 33 static volatile bool timeToReadTemperature = true;
bbayer 0:18a657d5431f 34 static volatile bool dataChanged = true;
socie123 5:838b35b0a3c3 35 //static volatile bool thermostatActivated = false;
socie123 5:838b35b0a3c3 36 //static uint16_t sentSetPoint;
bbayer 0:18a657d5431f 37
bbayer 0:18a657d5431f 38 //Function prototypes
socie123 5:838b35b0a3c3 39 //void ledTock();
bbayer 0:18a657d5431f 40 void periodicSendTock();
socie123 5:838b35b0a3c3 41 //void temperatureMonitorTock();
socie123 5:838b35b0a3c3 42 //void up_button_callback();
socie123 5:838b35b0a3c3 43 //void down_button_callback();
bbayer 0:18a657d5431f 44 void printError(mDot* dot, int32_t returnCode);
bbayer 0:18a657d5431f 45 void printVersion();
bbayer 0:18a657d5431f 46 bool setFrequencySubBand(uint8_t subBand);
bbayer 0:18a657d5431f 47 bool setNetworkName(const std::string name);
bbayer 0:18a657d5431f 48 bool setNetworkPassphrase(const std::string passphrase);
bbayer 0:18a657d5431f 49 bool setPower(uint8_t power);
bbayer 0:18a657d5431f 50 bool setAck(uint8_t retries);
bbayer 0:18a657d5431f 51 bool joinNetwork();
bbayer 0:18a657d5431f 52 bool send(const std::string text);
bbayer 0:18a657d5431f 53
bbayer 0:18a657d5431f 54
bbayer 0:18a657d5431f 55 int main()
bbayer 0:18a657d5431f 56 {
bbayer 0:18a657d5431f 57 //Start LED startup sequence
socie123 5:838b35b0a3c3 58 //ledTick.attach(&ledTock, 0.1);
bbayer 0:18a657d5431f 59
bbayer 0:18a657d5431f 60 printf("\r\n\r\n");
bbayer 0:18a657d5431f 61 printf("=====================================\r\n");
bbayer 0:18a657d5431f 62 printf("MTS Thermostat/Fan Demo (Sensor unit)\r\n");
bbayer 0:18a657d5431f 63 printf("=====================================\r\n");
bbayer 0:18a657d5431f 64 printVersion();
bbayer 0:18a657d5431f 65
bbayer 0:18a657d5431f 66 // get the mDot handle
bbayer 0:18a657d5431f 67 dot = mDot::getInstance();
bbayer 0:18a657d5431f 68
bbayer 0:18a657d5431f 69 // reset to default config so we know what state we're in
bbayer 0:18a657d5431f 70 dot->resetNetworkSession();
bbayer 0:18a657d5431f 71 dot->resetConfig();
bbayer 0:18a657d5431f 72
bbayer 0:18a657d5431f 73 // set up the mDot with our network information
bbayer 0:18a657d5431f 74 setNetworkName(config_network_name);
bbayer 0:18a657d5431f 75 setNetworkPassphrase(config_network_pass);
bbayer 0:18a657d5431f 76 setFrequencySubBand(config_frequency_sub_band);
bbayer 0:18a657d5431f 77 setPower(7); // Reduce latency for 868 units
bbayer 0:18a657d5431f 78 setAck(0); // Disable ack for less latency
bbayer 0:18a657d5431f 79
bbayer 0:18a657d5431f 80 while (!joinNetwork()) { wait(2); dot->resetNetworkSession(); }
bbayer 0:18a657d5431f 81
socie123 5:838b35b0a3c3 82 //Stop LED startup sequence & configure them for operation
socie123 5:838b35b0a3c3 83 //ledTick.detach();
socie123 5:838b35b0a3c3 84 //transmitLED = 1;
socie123 5:838b35b0a3c3 85 //buttonPressLED = 1;
bbayer 0:18a657d5431f 86
bbayer 0:18a657d5431f 87 // Configure timers
socie123 5:838b35b0a3c3 88 periodicSendTick.attach(&periodicSendTock, 1*60);
socie123 5:838b35b0a3c3 89 //temperatureMonitorTick.attach(&temperatureMonitorTock, 0.15);
bbayer 0:18a657d5431f 90
bbayer 0:18a657d5431f 91 // Setup Interrupt callback function
socie123 5:838b35b0a3c3 92 //up_button.attach_deasserted(&up_button_callback);
socie123 5:838b35b0a3c3 93 //down_button.attach_deasserted(&down_button_callback);
bbayer 0:18a657d5431f 94
bbayer 0:18a657d5431f 95 // Start sampling buttons using interrupts
socie123 5:838b35b0a3c3 96 //up_button.setSampleFrequency();
socie123 5:838b35b0a3c3 97 //down_button.setSampleFrequency();
bbayer 0:18a657d5431f 98
bbayer 0:18a657d5431f 99 uint16_t temperature = 0;
socie123 5:838b35b0a3c3 100 //while (1) {
socie123 5:838b35b0a3c3 101 //if (timeToReadTemperature) {
socie123 5:838b35b0a3c3 102 uint16_t B = 4100; //B value of the thermistor
bbayer 0:18a657d5431f 103 uint16_t analogReading;
bbayer 0:18a657d5431f 104 float resistance;
bbayer 0:18a657d5431f 105
bbayer 0:18a657d5431f 106 analogReading = temperatureSensor.read_u16();
bbayer 0:18a657d5431f 107
bbayer 0:18a657d5431f 108 // get the resistance of the sensor
bbayer 0:18a657d5431f 109 resistance=(65534-analogReading)*10000/analogReading;
bbayer 0:18a657d5431f 110 // convert to temperature via datasheet
bbayer 0:18a657d5431f 111 temperature=1/(log(resistance/10000)/B+1/298.15)-273.15;
bbayer 0:18a657d5431f 112 //printf("read: %d, res: %d, temp: %d,set: %d\r\n", analogReading, (uint16_t)resistance, temperature, setPoint);
bbayer 0:18a657d5431f 113
socie123 5:838b35b0a3c3 114 //if (!thermostatActivated && temperature > setPoint) {
socie123 5:838b35b0a3c3 115 //thermostatActivated = true;
socie123 5:838b35b0a3c3 116 //dataChanged = true;
socie123 5:838b35b0a3c3 117 //}
socie123 5:838b35b0a3c3 118 //else if (thermostatActivated && temperature < setPoint) {
socie123 5:838b35b0a3c3 119 //thermostatActivated = false;
socie123 5:838b35b0a3c3 120 //dataChanged = true;
socie123 5:838b35b0a3c3 121 //}
bbayer 0:18a657d5431f 122
socie123 5:838b35b0a3c3 123 //timeToReadTemperature = false;
socie123 5:838b35b0a3c3 124 //}
socie123 5:838b35b0a3c3 125
socie123 5:838b35b0a3c3 126 dataChanged = true;
bbayer 0:18a657d5431f 127
socie123 5:838b35b0a3c3 128
bbayer 0:18a657d5431f 129 if (dataChanged) {
socie123 5:838b35b0a3c3 130
bbayer 0:18a657d5431f 131 char latestData[100];
socie123 5:838b35b0a3c3 132 //transmitLED = 1;
socie123 5:838b35b0a3c3 133 // sentSetPoint = setPoint;
socie123 5:838b35b0a3c3 134 sprintf(latestData, "temp: %d", temperature);
bbayer 0:18a657d5431f 135 printf("%s\r\n", latestData);
bbayer 0:18a657d5431f 136
bbayer 0:18a657d5431f 137 if (send(latestData)) {
bbayer 0:18a657d5431f 138 dataChanged = false;
bbayer 0:18a657d5431f 139 }
socie123 5:838b35b0a3c3 140 //transmitLED = 0;
bbayer 0:18a657d5431f 141 }
socie123 5:838b35b0a3c3 142 //}
socie123 5:838b35b0a3c3 143 //return true;
bbayer 0:18a657d5431f 144 }
bbayer 0:18a657d5431f 145
socie123 5:838b35b0a3c3 146 void printVersion()
socie123 5:838b35b0a3c3 147 {
socie123 5:838b35b0a3c3 148 printf("%s\r\n\r\n", dot->getId().c_str());
bbayer 0:18a657d5431f 149 }
bbayer 0:18a657d5431f 150
bbayer 0:18a657d5431f 151 void periodicSendTock() {
bbayer 0:18a657d5431f 152 dataChanged = true;
bbayer 0:18a657d5431f 153 }
bbayer 0:18a657d5431f 154
bbayer 0:18a657d5431f 155 bool setFrequencySubBand(uint8_t subBand)
bbayer 0:18a657d5431f 156 {
bbayer 0:18a657d5431f 157 int32_t returnCode;
bbayer 0:18a657d5431f 158 printf("Setting frequency sub band to '%d'...\r\n", subBand);
bbayer 0:18a657d5431f 159 if ((returnCode = dot->setFrequencySubBand(subBand)) != mDot::MDOT_OK) {
bbayer 0:18a657d5431f 160 printError(dot, returnCode);
bbayer 0:18a657d5431f 161 return false;
bbayer 0:18a657d5431f 162 }
bbayer 0:18a657d5431f 163 return true;
bbayer 0:18a657d5431f 164 }
bbayer 0:18a657d5431f 165
bbayer 0:18a657d5431f 166 bool setNetworkName(const std::string name)
bbayer 0:18a657d5431f 167 {
bbayer 0:18a657d5431f 168 int32_t returnCode;
bbayer 0:18a657d5431f 169 printf("Setting network name to '%s'...\r\n", name.c_str());
bbayer 0:18a657d5431f 170 if ((returnCode = dot->setNetworkName(name)) != mDot::MDOT_OK)
bbayer 0:18a657d5431f 171 {
bbayer 0:18a657d5431f 172 printError(dot, returnCode);
bbayer 0:18a657d5431f 173 return false;
bbayer 0:18a657d5431f 174 }
bbayer 0:18a657d5431f 175 return true;
bbayer 0:18a657d5431f 176 }
bbayer 0:18a657d5431f 177
bbayer 0:18a657d5431f 178 bool setNetworkPassphrase(const std::string passphrase)
bbayer 0:18a657d5431f 179 {
bbayer 0:18a657d5431f 180 int32_t returnCode;
bbayer 0:18a657d5431f 181 printf("Setting passphrase to '%s'...\r\n", passphrase.c_str());
bbayer 0:18a657d5431f 182 if ((returnCode = dot->setNetworkPassphrase(passphrase)) != mDot::MDOT_OK)
bbayer 0:18a657d5431f 183 {
bbayer 0:18a657d5431f 184 printError(dot, returnCode);
bbayer 0:18a657d5431f 185 return false;
bbayer 0:18a657d5431f 186 }
bbayer 0:18a657d5431f 187 return true;
bbayer 0:18a657d5431f 188 }
bbayer 0:18a657d5431f 189
bbayer 0:18a657d5431f 190 bool setPower(uint8_t power)
bbayer 0:18a657d5431f 191 {
bbayer 0:18a657d5431f 192 int32_t returnCode;
bbayer 0:18a657d5431f 193 printf("Setting tx power to '%d'...\r\n", power);
bbayer 0:18a657d5431f 194 if ((returnCode = dot->setTxPower(power)) != mDot::MDOT_OK) {
bbayer 0:18a657d5431f 195 printError(dot, returnCode);
bbayer 0:18a657d5431f 196 return false;
bbayer 0:18a657d5431f 197 }
bbayer 0:18a657d5431f 198 return true;
bbayer 0:18a657d5431f 199 }
bbayer 0:18a657d5431f 200
bbayer 0:18a657d5431f 201
bbayer 0:18a657d5431f 202 bool joinNetwork()
bbayer 0:18a657d5431f 203 {
bbayer 0:18a657d5431f 204 int32_t returnCode;
bbayer 0:18a657d5431f 205 printf("\r\nJoining network...\r\n");
bbayer 0:18a657d5431f 206 if ((returnCode = dot->joinNetworkOnce()) != mDot::MDOT_OK) {
bbayer 0:18a657d5431f 207 printError(dot, returnCode);
bbayer 0:18a657d5431f 208 return false;
bbayer 0:18a657d5431f 209 }
bbayer 0:18a657d5431f 210 printf("Network Joined!\r\n");
bbayer 0:18a657d5431f 211 return true;
bbayer 0:18a657d5431f 212 }
bbayer 0:18a657d5431f 213
bbayer 0:18a657d5431f 214 bool setAck(uint8_t retries)
bbayer 0:18a657d5431f 215 {
bbayer 0:18a657d5431f 216 int32_t returnCode;
bbayer 0:18a657d5431f 217 printf("Setting ack to '%d'...\r\n", retries);
bbayer 0:18a657d5431f 218 if ((returnCode = dot->setAck(retries)) != mDot::MDOT_OK)
bbayer 0:18a657d5431f 219 {
bbayer 0:18a657d5431f 220 printError(dot, returnCode);
bbayer 0:18a657d5431f 221 return false;
bbayer 0:18a657d5431f 222 }
bbayer 0:18a657d5431f 223 return true;
bbayer 0:18a657d5431f 224 }
bbayer 0:18a657d5431f 225
bbayer 0:18a657d5431f 226 bool send(const std::string text)
bbayer 0:18a657d5431f 227 {
bbayer 0:18a657d5431f 228 int32_t returnCode;
bbayer 0:18a657d5431f 229 uint32_t timeTillSend = dot->getNextTxMs();
bbayer 0:18a657d5431f 230 if (timeTillSend != 0) {
bbayer 0:18a657d5431f 231 printf("waiting %lu ms to send\r\n", timeTillSend);
bbayer 0:18a657d5431f 232 return false;
bbayer 0:18a657d5431f 233 }
bbayer 0:18a657d5431f 234
bbayer 0:18a657d5431f 235 printf("Sending data... ");
bbayer 0:18a657d5431f 236 std::vector<uint8_t> data(text.begin(), text.end());
bbayer 0:18a657d5431f 237 if ((returnCode = dot->send(data, 1)) != mDot::MDOT_OK)
bbayer 0:18a657d5431f 238 {
bbayer 0:18a657d5431f 239 printError(dot, returnCode);
bbayer 0:18a657d5431f 240 return false;
bbayer 0:18a657d5431f 241 }
bbayer 0:18a657d5431f 242 printf("Data sent!\r\n");
bbayer 0:18a657d5431f 243 return true;
bbayer 0:18a657d5431f 244 }
bbayer 0:18a657d5431f 245
bbayer 0:18a657d5431f 246 void printError(mDot* dot, int32_t returnCode)
bbayer 0:18a657d5431f 247 {
bbayer 0:18a657d5431f 248 std::string error = mDot::getReturnCodeString(returnCode) + " - " + dot->getLastError();
bbayer 0:18a657d5431f 249 printf("%s\r\n", error.c_str());
socie123 5:838b35b0a3c3 250 }
bbayer 0:18a657d5431f 251