temp sensor over 433Mhz
BBC MicroBit with RF 433Mhz receiver reading Oregon-Scientific wireless temperature sensor. Originally written for the Raspberry Pi but easily converted for the little microbit.
OregonBit.cpp@0:13cb9cc98bca, 2016-07-26 (annotated)
- Committer:
- daw9000
- Date:
- Tue Jul 26 10:19:11 2016 +0000
- Revision:
- 0:13cb9cc98bca
- Child:
- 1:706c7b028278
x
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
daw9000 | 0:13cb9cc98bca | 1 | /* Program Oregon Written by David Wright, Jan 2015. */ |
daw9000 | 0:13cb9cc98bca | 2 | /* thanks and plagarised from various internet sources on oregon sensors. Paul(DISK91.com), ALTelectronics for their document on */ |
daw9000 | 0:13cb9cc98bca | 3 | /* Oregon Scientific RF protocol v1.0, kevinmehall on github for rtldr-433m-sensor, Alexander Yerezeyev and more .... */ |
daw9000 | 0:13cb9cc98bca | 4 | /* */ |
daw9000 | 0:13cb9cc98bca | 5 | /* This Program reads a 433Mhz transmission from an Oregon version 1 Protocol Temperature Sensor */ |
daw9000 | 0:13cb9cc98bca | 6 | /* */ |
daw9000 | 0:13cb9cc98bca | 7 | /* Programming uses the logic of first detecting the preamble portion of transmission by counting the number of short 1 pulses */ |
daw9000 | 0:13cb9cc98bca | 8 | /* Next the progam monitors the 3 sync pulses and translates the last sync pulse to determine the first data message bit either 1 or 0 */ |
daw9000 | 0:13cb9cc98bca | 9 | /* From knowing the first message data bit the program determines the next 31 message data bits using the logic as follows:- */ |
daw9000 | 0:13cb9cc98bca | 10 | /* Two SHORT pulses means that the message data bit is the same as the previous message data bit (we know first so can do this) */ |
daw9000 | 0:13cb9cc98bca | 11 | /* One LONG pulse means that the message data bit is opposite (inverse) of the previous message data bit. */ |
daw9000 | 0:13cb9cc98bca | 12 | /* */ |
daw9000 | 0:13cb9cc98bca | 13 | /* The resulting 32 bit message is reversed to form 8 nibbles(4 bit). These nibbles are decoded to produce the data values. */ |
daw9000 | 0:13cb9cc98bca | 14 | /* */ |
daw9000 | 0:13cb9cc98bca | 15 | /* This program is quite basic and simplistic in that there is no error checking and only really gets temperature, channel and low bat */ |
daw9000 | 0:13cb9cc98bca | 16 | /* I wrote this program to learn C programming from being a visual basic and java programmer and as an aid to learning to code */ |
daw9000 | 0:13cb9cc98bca | 17 | /* hardware interfaces on my Raspberry Pi B+. I found plenty of code for various Oregon sensors but none I could easily understand */ |
daw9000 | 0:13cb9cc98bca | 18 | /* from the C or Python code. Hence this program does nothing clever using bitwise or memory facilities or uses no rising clock edges */ |
daw9000 | 0:13cb9cc98bca | 19 | /* , falling clock edges, clock ticks etc. Just simple time measurement and ONs and OFFs. Also I dont do any hex conversions. */ |
daw9000 | 0:13cb9cc98bca | 20 | /* There are no hex conversions because for channel, temperature and low battery all the hex and decimal values are the same i.e. */ |
daw9000 | 0:13cb9cc98bca | 21 | /* only numbers 0 to 9 are used for each part of the message. The temp minus sign and low battery are determined from the raw binary */ |
daw9000 | 0:13cb9cc98bca | 22 | /* in nibble 2 (third nibble as it starts nibble zero). */ |
daw9000 | 0:13cb9cc98bca | 23 | /* */ |
daw9000 | 0:13cb9cc98bca | 24 | /* If you wish this program can be improved on by adding error checking by using the checksum (hex conversion needed) and/or */ |
daw9000 | 0:13cb9cc98bca | 25 | /* by storing values and checking against the second transmission of the same message (all messages sent twice, I sleep through the */ |
daw9000 | 0:13cb9cc98bca | 26 | /* second transmission Zzzzz). */ |
daw9000 | 0:13cb9cc98bca | 27 | |
daw9000 | 0:13cb9cc98bca | 28 | |
daw9000 | 0:13cb9cc98bca | 29 | #include "MicroBit.h" |
daw9000 | 0:13cb9cc98bca | 30 | |
daw9000 | 0:13cb9cc98bca | 31 | int thisPin; |
daw9000 | 0:13cb9cc98bca | 32 | int lastPin; |
daw9000 | 0:13cb9cc98bca | 33 | int preambleON; |
daw9000 | 0:13cb9cc98bca | 34 | int onShortLo; |
daw9000 | 0:13cb9cc98bca | 35 | int onShortHi; |
daw9000 | 0:13cb9cc98bca | 36 | int offShortLo; |
daw9000 | 0:13cb9cc98bca | 37 | int offShortHi; |
daw9000 | 0:13cb9cc98bca | 38 | int onLongLo; |
daw9000 | 0:13cb9cc98bca | 39 | int onLongHi; |
daw9000 | 0:13cb9cc98bca | 40 | int offLongLo; |
daw9000 | 0:13cb9cc98bca | 41 | int offLongHi; |
daw9000 | 0:13cb9cc98bca | 42 | int syncEnd0Lo; |
daw9000 | 0:13cb9cc98bca | 43 | int syncEnd0Hi; |
daw9000 | 0:13cb9cc98bca | 44 | long timeDiff; |
daw9000 | 0:13cb9cc98bca | 45 | long startedAt; |
daw9000 | 0:13cb9cc98bca | 46 | long endedAt; |
daw9000 | 0:13cb9cc98bca | 47 | int preambleFound; |
daw9000 | 0:13cb9cc98bca | 48 | int dataBits[32]; |
daw9000 | 0:13cb9cc98bca | 49 | int myPin = 1; // MicroBit P1 |
daw9000 | 0:13cb9cc98bca | 50 | MicroBit uBit; |
daw9000 | 0:13cb9cc98bca | 51 | |
daw9000 | 0:13cb9cc98bca | 52 | |
daw9000 | 0:13cb9cc98bca | 53 | long getTime(long returnUsecs) |
daw9000 | 0:13cb9cc98bca | 54 | { |
daw9000 | 0:13cb9cc98bca | 55 | returnUsecs = uBit.systemTime(); |
daw9000 | 0:13cb9cc98bca | 56 | /* struct timespec currentTime; |
daw9000 | 0:13cb9cc98bca | 57 | long microSecs; |
daw9000 | 0:13cb9cc98bca | 58 | long secs; |
daw9000 | 0:13cb9cc98bca | 59 | clock_gettime(CLOCK_MONOTONIC, ¤tTime); |
daw9000 | 0:13cb9cc98bca | 60 | microSecs = currentTime.tv_nsec * 0.001; |
daw9000 | 0:13cb9cc98bca | 61 | secs = currentTime.tv_sec; |
daw9000 | 0:13cb9cc98bca | 62 | returnUsecs = microSecs + secs * 1000; */ |
daw9000 | 0:13cb9cc98bca | 63 | returnUsecs = returnUsecs * 100; // microsecs |
daw9000 | 0:13cb9cc98bca | 64 | return(returnUsecs); |
daw9000 | 0:13cb9cc98bca | 65 | } |
daw9000 | 0:13cb9cc98bca | 66 | int getPinValue(int returnPinValue) |
daw9000 | 0:13cb9cc98bca | 67 | { |
daw9000 | 0:13cb9cc98bca | 68 | // returnPinValue = digitalRead(myPin); |
daw9000 | 0:13cb9cc98bca | 69 | returnPinValue = uBit.io.pin[myPin].getDigitalValue(); |
daw9000 | 0:13cb9cc98bca | 70 | return(returnPinValue); |
daw9000 | 0:13cb9cc98bca | 71 | } |
daw9000 | 0:13cb9cc98bca | 72 | int detectPreamble(int returnDetected) |
daw9000 | 0:13cb9cc98bca | 73 | { |
daw9000 | 0:13cb9cc98bca | 74 | |
daw9000 | 0:13cb9cc98bca | 75 | thisPin = getPinValue(thisPin); |
daw9000 | 0:13cb9cc98bca | 76 | if (!(thisPin == lastPin)) |
daw9000 | 0:13cb9cc98bca | 77 | { |
daw9000 | 0:13cb9cc98bca | 78 | endedAt = getTime(endedAt); // set timer end for last pin |
daw9000 | 0:13cb9cc98bca | 79 | timeDiff = endedAt - startedAt; // reset time |
daw9000 | 0:13cb9cc98bca | 80 | if (lastPin == 1) |
daw9000 | 0:13cb9cc98bca | 81 | { |
daw9000 | 0:13cb9cc98bca | 82 | if ((timeDiff >= onShortLo) && (timeDiff <= onShortHi)) // error of margin on pulse length |
daw9000 | 0:13cb9cc98bca | 83 | { |
daw9000 | 0:13cb9cc98bca | 84 | preambleON++; // looking for 12 short ON pulses. |
daw9000 | 0:13cb9cc98bca | 85 | } |
daw9000 | 0:13cb9cc98bca | 86 | else // not preamble |
daw9000 | 0:13cb9cc98bca | 87 | { |
daw9000 | 0:13cb9cc98bca | 88 | preambleON = 0; |
daw9000 | 0:13cb9cc98bca | 89 | } |
daw9000 | 0:13cb9cc98bca | 90 | } |
daw9000 | 0:13cb9cc98bca | 91 | else // check is this preamble, lastPin off |
daw9000 | 0:13cb9cc98bca | 92 | { |
daw9000 | 0:13cb9cc98bca | 93 | |
daw9000 | 0:13cb9cc98bca | 94 | |
daw9000 | 0:13cb9cc98bca | 95 | if (preambleON < 11) // last preamble is special as next low not short(thisPin) |
daw9000 | 0:13cb9cc98bca | 96 | { |
daw9000 | 0:13cb9cc98bca | 97 | if ((timeDiff > offShortLo) && (timeDiff < offShortHi)) // off ok |
daw9000 | 0:13cb9cc98bca | 98 | { |
daw9000 | 0:13cb9cc98bca | 99 | } |
daw9000 | 0:13cb9cc98bca | 100 | else // not preamble |
daw9000 | 0:13cb9cc98bca | 101 | { |
daw9000 | 0:13cb9cc98bca | 102 | preambleON = 0; |
daw9000 | 0:13cb9cc98bca | 103 | } |
daw9000 | 0:13cb9cc98bca | 104 | |
daw9000 | 0:13cb9cc98bca | 105 | } |
daw9000 | 0:13cb9cc98bca | 106 | } |
daw9000 | 0:13cb9cc98bca | 107 | |
daw9000 | 0:13cb9cc98bca | 108 | startedAt = endedAt; // set timer start for this pin |
daw9000 | 0:13cb9cc98bca | 109 | lastPin = thisPin; |
daw9000 | 0:13cb9cc98bca | 110 | } |
daw9000 | 0:13cb9cc98bca | 111 | if (preambleON == 12) |
daw9000 | 0:13cb9cc98bca | 112 | { |
daw9000 | 0:13cb9cc98bca | 113 | returnDetected = 1; |
daw9000 | 0:13cb9cc98bca | 114 | } |
daw9000 | 0:13cb9cc98bca | 115 | else |
daw9000 | 0:13cb9cc98bca | 116 | { |
daw9000 | 0:13cb9cc98bca | 117 | returnDetected = 0; |
daw9000 | 0:13cb9cc98bca | 118 | } |
daw9000 | 0:13cb9cc98bca | 119 | return(returnDetected); |
daw9000 | 0:13cb9cc98bca | 120 | } |
daw9000 | 0:13cb9cc98bca | 121 | int getSync() |
daw9000 | 0:13cb9cc98bca | 122 | { |
daw9000 | 0:13cb9cc98bca | 123 | // sync is long OFF, long ON, long OFF |
daw9000 | 0:13cb9cc98bca | 124 | |
daw9000 | 0:13cb9cc98bca | 125 | int sCount; |
daw9000 | 0:13cb9cc98bca | 126 | sCount = 1; |
daw9000 | 0:13cb9cc98bca | 127 | thisPin = getPinValue(thisPin); |
daw9000 | 0:13cb9cc98bca | 128 | lastPin = thisPin; //looking for state changes |
daw9000 | 0:13cb9cc98bca | 129 | while (sCount < 3) // 3 sync pulses |
daw9000 | 0:13cb9cc98bca | 130 | { |
daw9000 | 0:13cb9cc98bca | 131 | if (!(thisPin == lastPin)) |
daw9000 | 0:13cb9cc98bca | 132 | { |
daw9000 | 0:13cb9cc98bca | 133 | sCount ++; |
daw9000 | 0:13cb9cc98bca | 134 | if (sCount == 3) |
daw9000 | 0:13cb9cc98bca | 135 | { |
daw9000 | 0:13cb9cc98bca | 136 | startedAt = getTime(startedAt); // time this pulse to get first bit value |
daw9000 | 0:13cb9cc98bca | 137 | } |
daw9000 | 0:13cb9cc98bca | 138 | lastPin = thisPin; |
daw9000 | 0:13cb9cc98bca | 139 | } |
daw9000 | 0:13cb9cc98bca | 140 | thisPin = getPinValue(thisPin); // poll the pin state |
daw9000 | 0:13cb9cc98bca | 141 | } |
daw9000 | 0:13cb9cc98bca | 142 | while ((thisPin == lastPin)) |
daw9000 | 0:13cb9cc98bca | 143 | { |
daw9000 | 0:13cb9cc98bca | 144 | thisPin = getPinValue(thisPin); |
daw9000 | 0:13cb9cc98bca | 145 | } |
daw9000 | 0:13cb9cc98bca | 146 | endedAt = getTime(endedAt); |
daw9000 | 0:13cb9cc98bca | 147 | timeDiff = endedAt - startedAt; |
daw9000 | 0:13cb9cc98bca | 148 | startedAt = endedAt; // start timer for next bit. |
daw9000 | 0:13cb9cc98bca | 149 | if (timeDiff > syncEnd0Lo && timeDiff < syncEnd0Hi) |
daw9000 | 0:13cb9cc98bca | 150 | { |
daw9000 | 0:13cb9cc98bca | 151 | dataBits[0] = 0; |
daw9000 | 0:13cb9cc98bca | 152 | } |
daw9000 | 0:13cb9cc98bca | 153 | else |
daw9000 | 0:13cb9cc98bca | 154 | { |
daw9000 | 0:13cb9cc98bca | 155 | dataBits[0] = 1; |
daw9000 | 0:13cb9cc98bca | 156 | } |
daw9000 | 0:13cb9cc98bca | 157 | return; |
daw9000 | 0:13cb9cc98bca | 158 | } |
daw9000 | 0:13cb9cc98bca | 159 | |
daw9000 | 0:13cb9cc98bca | 160 | int getData() |
daw9000 | 0:13cb9cc98bca | 161 | { |
daw9000 | 0:13cb9cc98bca | 162 | // get next 31 data bits, we determined bit 0 in SYNC |
daw9000 | 0:13cb9cc98bca | 163 | int i; |
daw9000 | 0:13cb9cc98bca | 164 | int l; |
daw9000 | 0:13cb9cc98bca | 165 | int s; |
daw9000 | 0:13cb9cc98bca | 166 | i = 1; //first bit[0] was derived in Sync |
daw9000 | 0:13cb9cc98bca | 167 | s = 0; // short pulse |
daw9000 | 0:13cb9cc98bca | 168 | l = 0; // long pulse |
daw9000 | 0:13cb9cc98bca | 169 | |
daw9000 | 0:13cb9cc98bca | 170 | while (i < 32) |
daw9000 | 0:13cb9cc98bca | 171 | { |
daw9000 | 0:13cb9cc98bca | 172 | if (!(thisPin == lastPin)) // lastPin and thisPin are from getSync. |
daw9000 | 0:13cb9cc98bca | 173 | { |
daw9000 | 0:13cb9cc98bca | 174 | endedAt = getTime(endedAt); // timer started in getSync |
daw9000 | 0:13cb9cc98bca | 175 | timeDiff = endedAt - startedAt; |
daw9000 | 0:13cb9cc98bca | 176 | startedAt = endedAt; // next starts at this end |
daw9000 | 0:13cb9cc98bca | 177 | if (lastPin == 0) //lastPin was OFF |
daw9000 | 0:13cb9cc98bca | 178 | { |
daw9000 | 0:13cb9cc98bca | 179 | if ((timeDiff > offShortLo) && (timeDiff < offShortHi)) |
daw9000 | 0:13cb9cc98bca | 180 | { // short off detected |
daw9000 | 0:13cb9cc98bca | 181 | s++; |
daw9000 | 0:13cb9cc98bca | 182 | l=0; |
daw9000 | 0:13cb9cc98bca | 183 | } |
daw9000 | 0:13cb9cc98bca | 184 | if ((timeDiff > offLongLo) && (timeDiff < offLongHi)) |
daw9000 | 0:13cb9cc98bca | 185 | { // long off detected |
daw9000 | 0:13cb9cc98bca | 186 | l++; |
daw9000 | 0:13cb9cc98bca | 187 | s=0; |
daw9000 | 0:13cb9cc98bca | 188 | } |
daw9000 | 0:13cb9cc98bca | 189 | } |
daw9000 | 0:13cb9cc98bca | 190 | else // lastPin was ON |
daw9000 | 0:13cb9cc98bca | 191 | { |
daw9000 | 0:13cb9cc98bca | 192 | if ((timeDiff > onShortLo) && (timeDiff < onShortHi)) // half-time |
daw9000 | 0:13cb9cc98bca | 193 | { // short on detetcted |
daw9000 | 0:13cb9cc98bca | 194 | s++; |
daw9000 | 0:13cb9cc98bca | 195 | l=0; |
daw9000 | 0:13cb9cc98bca | 196 | } |
daw9000 | 0:13cb9cc98bca | 197 | if ((timeDiff > onLongLo) && (timeDiff < onLongHi)) // full-time |
daw9000 | 0:13cb9cc98bca | 198 | { // long on detected |
daw9000 | 0:13cb9cc98bca | 199 | l++; |
daw9000 | 0:13cb9cc98bca | 200 | s=0; |
daw9000 | 0:13cb9cc98bca | 201 | } |
daw9000 | 0:13cb9cc98bca | 202 | } |
daw9000 | 0:13cb9cc98bca | 203 | if (s == 2) |
daw9000 | 0:13cb9cc98bca | 204 | { // 2 short pulses this bit equals previous bit (we know 1st bit from sync) |
daw9000 | 0:13cb9cc98bca | 205 | dataBits[i] = dataBits[(i-1)]; |
daw9000 | 0:13cb9cc98bca | 206 | i++; |
daw9000 | 0:13cb9cc98bca | 207 | s=0; |
daw9000 | 0:13cb9cc98bca | 208 | l=0; |
daw9000 | 0:13cb9cc98bca | 209 | } |
daw9000 | 0:13cb9cc98bca | 210 | if (l == 1) |
daw9000 | 0:13cb9cc98bca | 211 | { // 1 long pulse this bit is inverse of previous bit (we know 1st bit from sync) |
daw9000 | 0:13cb9cc98bca | 212 | if (dataBits[(i-1)] == 0) |
daw9000 | 0:13cb9cc98bca | 213 | { |
daw9000 | 0:13cb9cc98bca | 214 | dataBits[i] = 1; |
daw9000 | 0:13cb9cc98bca | 215 | } |
daw9000 | 0:13cb9cc98bca | 216 | else |
daw9000 | 0:13cb9cc98bca | 217 | { |
daw9000 | 0:13cb9cc98bca | 218 | dataBits[i] = 0; |
daw9000 | 0:13cb9cc98bca | 219 | } |
daw9000 | 0:13cb9cc98bca | 220 | l=0; |
daw9000 | 0:13cb9cc98bca | 221 | s=0; |
daw9000 | 0:13cb9cc98bca | 222 | i++; |
daw9000 | 0:13cb9cc98bca | 223 | } |
daw9000 | 0:13cb9cc98bca | 224 | // update last pin to this pin value |
daw9000 | 0:13cb9cc98bca | 225 | lastPin = thisPin; |
daw9000 | 0:13cb9cc98bca | 226 | } |
daw9000 | 0:13cb9cc98bca | 227 | thisPin = getPinValue(thisPin); // get pin value |
daw9000 | 0:13cb9cc98bca | 228 | } |
daw9000 | 0:13cb9cc98bca | 229 | return; |
daw9000 | 0:13cb9cc98bca | 230 | } |
daw9000 | 0:13cb9cc98bca | 231 | |
daw9000 | 0:13cb9cc98bca | 232 | int processData() |
daw9000 | 0:13cb9cc98bca | 233 | { |
daw9000 | 0:13cb9cc98bca | 234 | int x = 0; |
daw9000 | 0:13cb9cc98bca | 235 | int y = 0; |
daw9000 | 0:13cb9cc98bca | 236 | int z= 0; |
daw9000 | 0:13cb9cc98bca | 237 | int nStart; |
daw9000 | 0:13cb9cc98bca | 238 | int nFinish; |
daw9000 | 0:13cb9cc98bca | 239 | int nibbleValue; |
daw9000 | 0:13cb9cc98bca | 240 | int nibbleValues[8]; |
daw9000 | 0:13cb9cc98bca | 241 | int temp; |
daw9000 | 0:13cb9cc98bca | 242 | int nib; |
daw9000 | 0:13cb9cc98bca | 243 | int nibble[4]; |
daw9000 | 0:13cb9cc98bca | 244 | int lowBat=0; |
daw9000 | 0:13cb9cc98bca | 245 | |
daw9000 | 0:13cb9cc98bca | 246 | for (x=0;x<8;x++) |
daw9000 | 0:13cb9cc98bca | 247 | { |
daw9000 | 0:13cb9cc98bca | 248 | for (y=0;y<4;y++){nibble[y]=0;} //initialise |
daw9000 | 0:13cb9cc98bca | 249 | nStart=(31-((x*4)+3)); // array index for nibble start |
daw9000 | 0:13cb9cc98bca | 250 | nFinish=nStart+4; |
daw9000 | 0:13cb9cc98bca | 251 | y = 3; // nibble index |
daw9000 | 0:13cb9cc98bca | 252 | // Reverse the bits in message data (dataBits) to create 8 nibbles of 4 bits. |
daw9000 | 0:13cb9cc98bca | 253 | for (z=nStart;z<nFinish;z++) // read 4 bits |
daw9000 | 0:13cb9cc98bca | 254 | { |
daw9000 | 0:13cb9cc98bca | 255 | if (y >= 0) |
daw9000 | 0:13cb9cc98bca | 256 | { |
daw9000 | 0:13cb9cc98bca | 257 | nibble[y]=dataBits[z];//reverse bits, y starts at 3 back to 0 |
daw9000 | 0:13cb9cc98bca | 258 | y--; |
daw9000 | 0:13cb9cc98bca | 259 | } |
daw9000 | 0:13cb9cc98bca | 260 | } |
daw9000 | 0:13cb9cc98bca | 261 | nibbleValue=0; |
daw9000 | 0:13cb9cc98bca | 262 | nib=8; |
daw9000 | 0:13cb9cc98bca | 263 | temp=0; |
daw9000 | 0:13cb9cc98bca | 264 | for (z=0;z<4;z++) // convert this nibble to decimal from binary |
daw9000 | 0:13cb9cc98bca | 265 | { |
daw9000 | 0:13cb9cc98bca | 266 | temp=nibbleValue; |
daw9000 | 0:13cb9cc98bca | 267 | nibbleValue=(nib * nibble[z]) + temp; |
daw9000 | 0:13cb9cc98bca | 268 | temp=nib; |
daw9000 | 0:13cb9cc98bca | 269 | if (temp > 1) nib = (temp / 2); |
daw9000 | 0:13cb9cc98bca | 270 | |
daw9000 | 0:13cb9cc98bca | 271 | } |
daw9000 | 0:13cb9cc98bca | 272 | nibbleValues[x] = nibbleValue; // store nibble decimal values |
daw9000 | 0:13cb9cc98bca | 273 | } |
daw9000 | 0:13cb9cc98bca | 274 | |
daw9000 | 0:13cb9cc98bca | 275 | // Print out the converted decimal nibble values |
daw9000 | 0:13cb9cc98bca | 276 | for (x=0;x<8;x++) |
daw9000 | 0:13cb9cc98bca | 277 | { |
daw9000 | 0:13cb9cc98bca | 278 | if (x==6) //channel number conversion |
daw9000 | 0:13cb9cc98bca | 279 | { |
daw9000 | 0:13cb9cc98bca | 280 | temp=99; |
daw9000 | 0:13cb9cc98bca | 281 | if (nibbleValues[x]==0) temp=1; |
daw9000 | 0:13cb9cc98bca | 282 | if (nibbleValues[x]==4) temp=2; |
daw9000 | 0:13cb9cc98bca | 283 | if (nibbleValues[x]==8) temp=3; |
daw9000 | 0:13cb9cc98bca | 284 | printf(" Channel : %d\n",temp); |
daw9000 | 0:13cb9cc98bca | 285 | } |
daw9000 | 0:13cb9cc98bca | 286 | if (x==2) |
daw9000 | 0:13cb9cc98bca | 287 | { |
daw9000 | 0:13cb9cc98bca | 288 | // printf(" Temperature : "); |
daw9000 | 0:13cb9cc98bca | 289 | uBit.display.scroll("Temp :"); |
daw9000 | 0:13cb9cc98bca | 290 | if ((nibbleValues[x]==10) || (nibbleValues[x]==2)) uBit.display.scroll("-"); // printf("-"); // 8 = low bat, 2=minus, 10=minus+low bat |
daw9000 | 0:13cb9cc98bca | 291 | if ((nibbleValues[x]==8) || (nibbleValues[x]==10)) lowBat=1; else lowBat=0; |
daw9000 | 0:13cb9cc98bca | 292 | |
daw9000 | 0:13cb9cc98bca | 293 | } |
daw9000 | 0:13cb9cc98bca | 294 | if ((x==3) || (x==4)) uBit.display.scroll(nibbleValues[x]);// printf("%d",nibbleValues[x]); |
daw9000 | 0:13cb9cc98bca | 295 | if (x==5) |
daw9000 | 0:13cb9cc98bca | 296 | { |
daw9000 | 0:13cb9cc98bca | 297 | // printf("."); |
daw9000 | 0:13cb9cc98bca | 298 | // printf("%d degC.\n",nibbleValues[x]); |
daw9000 | 0:13cb9cc98bca | 299 | uBit.display.scroll("."); |
daw9000 | 0:13cb9cc98bca | 300 | uBit.display.scroll(" degC."); |
daw9000 | 0:13cb9cc98bca | 301 | uBit.display.scroll(nibbleValues[x]); |
daw9000 | 0:13cb9cc98bca | 302 | } |
daw9000 | 0:13cb9cc98bca | 303 | if (lowBat==1) uBit.display.scroll("Low Battery"); // printf("Low Battery. \n"); |
daw9000 | 0:13cb9cc98bca | 304 | } |
daw9000 | 0:13cb9cc98bca | 305 | return; |
daw9000 | 0:13cb9cc98bca | 306 | } |
daw9000 | 0:13cb9cc98bca | 307 | int main() |
daw9000 | 0:13cb9cc98bca | 308 | { |
daw9000 | 0:13cb9cc98bca | 309 | int p; |
daw9000 | 0:13cb9cc98bca | 310 | uBit.init(); |
daw9000 | 0:13cb9cc98bca | 311 | // on short 1720, on long 3180, off short 1219, off long 2680 |
daw9000 | 0:13cb9cc98bca | 312 | // sync 1 off 4200, sync 2 on 5700, sync 3 off 5200 (sync 3 off long 6680) |
daw9000 | 0:13cb9cc98bca | 313 | onShortLo = 1500; |
daw9000 | 0:13cb9cc98bca | 314 | onShortHi = 2400; |
daw9000 | 0:13cb9cc98bca | 315 | offShortLo = 970; |
daw9000 | 0:13cb9cc98bca | 316 | offShortHi = 1950; |
daw9000 | 0:13cb9cc98bca | 317 | onLongLo = 2980; |
daw9000 | 0:13cb9cc98bca | 318 | onLongHi = 3880; |
daw9000 | 0:13cb9cc98bca | 319 | offLongLo = 1950; |
daw9000 | 0:13cb9cc98bca | 320 | offLongHi = 2900; |
daw9000 | 0:13cb9cc98bca | 321 | // syncBeginLo = 4000; |
daw9000 | 0:13cb9cc98bca | 322 | // syncBeginHi = 4400; |
daw9000 | 0:13cb9cc98bca | 323 | // syncLo = 5500; |
daw9000 | 0:13cb9cc98bca | 324 | // syncHi = 5900; |
daw9000 | 0:13cb9cc98bca | 325 | // syncEnd1Lo = 5000; |
daw9000 | 0:13cb9cc98bca | 326 | // syncEnd1Hi = 5400; |
daw9000 | 0:13cb9cc98bca | 327 | syncEnd0Lo = 6480; |
daw9000 | 0:13cb9cc98bca | 328 | syncEnd0Hi = 6880; |
daw9000 | 0:13cb9cc98bca | 329 | // wiringPiSetup(); |
daw9000 | 0:13cb9cc98bca | 330 | // pinMode(myPin, INPUT); |
daw9000 | 0:13cb9cc98bca | 331 | uBit.io.pin[myPin].setDigitalValue(0); |
daw9000 | 0:13cb9cc98bca | 332 | preambleFound = 0; |
daw9000 | 0:13cb9cc98bca | 333 | preambleON = 0; |
daw9000 | 0:13cb9cc98bca | 334 | // printf("Waiting for transmission (approx. every 30s).\n"); |
daw9000 | 0:13cb9cc98bca | 335 | // printf("Press Ctrl-C to exit.\n"); |
daw9000 | 0:13cb9cc98bca | 336 | uBit.display.scroll("Waiting..."); |
daw9000 | 0:13cb9cc98bca | 337 | while (1) |
daw9000 | 0:13cb9cc98bca | 338 | { // loop forever or ctrl-c |
daw9000 | 0:13cb9cc98bca | 339 | |
daw9000 | 0:13cb9cc98bca | 340 | thisPin = getPinValue(thisPin); |
daw9000 | 0:13cb9cc98bca | 341 | lastPin = thisPin; |
daw9000 | 0:13cb9cc98bca | 342 | endedAt = getTime(endedAt); // set initial timer end |
daw9000 | 0:13cb9cc98bca | 343 | startedAt = endedAt; |
daw9000 | 0:13cb9cc98bca | 344 | |
daw9000 | 0:13cb9cc98bca | 345 | while (preambleFound == 0) // constantly monitor for preamble |
daw9000 | 0:13cb9cc98bca | 346 | { |
daw9000 | 0:13cb9cc98bca | 347 | preambleFound = detectPreamble(preambleFound); |
daw9000 | 0:13cb9cc98bca | 348 | } |
daw9000 | 0:13cb9cc98bca | 349 | if (preambleFound == 1) |
daw9000 | 0:13cb9cc98bca | 350 | { |
daw9000 | 0:13cb9cc98bca | 351 | getSync(); |
daw9000 | 0:13cb9cc98bca | 352 | getData(); |
daw9000 | 0:13cb9cc98bca | 353 | processData(); |
daw9000 | 0:13cb9cc98bca | 354 | preambleFound = 0; |
daw9000 | 0:13cb9cc98bca | 355 | preambleON = 0; |
daw9000 | 0:13cb9cc98bca | 356 | uBit.sleep(10); // avoid second xmission of same data |
daw9000 | 0:13cb9cc98bca | 357 | } |
daw9000 | 0:13cb9cc98bca | 358 | } |
daw9000 | 0:13cb9cc98bca | 359 | exit(0); |
daw9000 | 0:13cb9cc98bca | 360 | } |