/*The Sensor Orientation Index. This number is two when the sensor is upward facing, one when the sensor is downward facing, and zero when orientation is undetermined.*/ #include #include #include #include #include #define DATA_PIN 3 SDI12 mySDI12(DATA_PIN); const int chipSelect = 10; unsigned long time; File logFile; Adafruit_MLX90614 sensor_52 = Adafruit_MLX90614(0x52); Adafruit_MLX90614 sensor_53 = Adafruit_MLX90614(0x53); Adafruit_MLX90614 sensor_03 = Adafruit_MLX90614(0x03); Adafruit_MLX90614 sensor_07 = Adafruit_MLX90614(0x07); byte addressRegister[8] = { 0B00000000, 0B00000000, 0B00000000, 0B00000000, 0B00000000, 0B00000000, 0B00000000, 0B00000000 }; uint8_t numSensors = 0; byte charToDec(char i){ if((i >= '0') && (i <= '9')) return i - '0'; if((i >= 'a') && (i <= 'z')) return i - 'a' + 10; if((i >= 'A') && (i <= 'Z')) return i - 'A' + 37; else return i; } void printBufferToScreen(){ String buffer = ""; mySDI12.read(); // consume address while(mySDI12.available()){ char c = mySDI12.read(); if(c == '+'){ buffer += ';'; } else if ((c != '\n') && (c != '\r')) { buffer += c; } } logFile.print(buffer); } void takeMeasurement(char i){ String command = ""; command += i; command += "M!"; mySDI12.sendCommand(command); delay(30); String sdiResponse = ""; delay(30); while (mySDI12.available()) { char c = mySDI12.read(); if ((c != '\a') && (c != '\r')) { sdiResponse += c; delay(5); } } mySDI12.clearBuffer(); unsigned long timerStart = millis(); while((millis() - timerStart) < (500)){ if(mySDI12.available()) { mySDI12.clearBuffer(); break; } } delay(30); mySDI12.clearBuffer(); command = ""; command += i; command += "D0!"; mySDI12.sendCommand(command); while(!(mySDI12.available()>1)){} delay(300); // let the data transfer printBufferToScreen(); mySDI12.clearBuffer(); } boolean checkActive(char i){ String myCommand = ""; myCommand = ""; myCommand += (char) i; myCommand += "!"; for(int j = 0; j < 3; j++){ mySDI12.sendCommand(myCommand); delay(30); if(mySDI12.available()) { printBufferToScreen(); mySDI12.clearBuffer(); return true; } } mySDI12.clearBuffer(); return false; } boolean isTaken(byte i){ i = charToDec(i); byte j = i / 8; byte k = i % 8; return addressRegister[j] & (1<