// Custom Libraries from: https://wokwi.com/projects/371042933135787009
// For Programming the Attiny85: https://www.instructables.com/How-to-Program-an-Attiny85-From-an-Arduino-Uno/
// https://homemadehardware.com/guides/programming-an-attiny85/
#include <TinyWireM.h>
#include "LiquidCrystal_I2C.h"
#define GPIO_ADDR 0x27 // (PCA8574A A0-A2 @5V) typ. A0-A3 Gnd 0x20 / 0x38 for A
LiquidCrystal_I2C lcd(GPIO_ADDR, 16, 2); // set address & 16 chars / 2 lines
const byte sensorPin = A3; // Set Analog Input Pin For Temperature Sensor
const byte sPin0 = PB1;
const byte sPin1 = PB4;
const byte sPin2 = PB5;
// Create Global Variables:
float temperature = 0; // Create Variable To Store Temperature
float tempSum = 0;
int measurementCounter = 0;
// Create Global Constants:
const long delTime_Main = 500; // Set Main Loop Delay
const bool sArray0[] = {0, 1, 0, 1, 0, 1, 0, 1};
const bool sArray1[] = {0, 0, 1, 1, 0, 0, 1, 1};
const bool sArray2[] = {0, 0, 0, 0, 1, 1, 1, 1};
const int measureTime = 20;
const int numMeasures = 10;
void setup() {
TinyWireM.begin();
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(sPin0,OUTPUT);
pinMode(sPin1,OUTPUT);
pinMode(sPin2,OUTPUT);
}
void loop() {
// Read Temperature:
// temperature = analogRead(sensorPin); // Insert math here to convert input value to temperature
readSensors();
// Clear Previous Temperature From Display:
lcd.setCursor(0, 1);
lcd.print(" ");
// Display Temperature:
lcd.setCursor(0, 0);
lcd.print("Temperature:");
lcd.setCursor(0, 1);
lcd.print(temperature);
lcd.print((char)223);
lcd.print("F");
// Wait:
// delay(delTime_Main);
}
void readSensors() { // Cycle through the mux and read the sensors
tempSum = 0;
measurementCounter = 0;
for (int i=0; i<8; i++) {
digitalWrite(sPin0, sArray0[i]);
digitalWrite(sPin1, sArray1[i]);
digitalWrite(sPin2, sArray2[i]);
for (int j=0; j<numMeasures; j++) {
delay(measureTime);
tempSum = tempSum + analogRead(sensorPin);
measurementCounter = measurementCounter + 1;
}
}
temperature = tempSum/measurementCounter;
}