temp sensor over 433Mhz

Dependencies:   FastIO

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.

Committer:
daw9000
Date:
Tue Jul 26 10:19:11 2016 +0000
Revision:
0:13cb9cc98bca
Child:
1:706c7b028278
x

Who changed what in which revision?

UserRevisionLine numberNew 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, &currentTime);
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 }