/*
Pelle Lindvall TE20T
*/
// include the Servo library
#include <Servo.h>
Servo myServo; // create a servo object
// Include the display library for OLED
#include "U8glib.h"
// Create new SSD1306 I2C display with 128x64 resolution
U8GLIB_SSD1306_128X64 myOled(U8G_I2C_OPT_NONE);
// Include the Neopixel library
#include <Adafruit_NeoPixel.h>
// Declare and initialise global GPIO pin constant for Neopixel ring
const byte neoPin = 4;
// Declare and initialise global constant for number of pixels
const byte neoPixels = 16;
// Declare and initialise variable for Neopixel brightness
byte neoBright = 80;
// Create new Neopixel ring object
Adafruit_NeoPixel myRing = Adafruit_NeoPixel(neoPixels, neoPin, NEO_GRB);
//Globala variabler som kan användas i alla funktioner
int angle1; // variable to hold the angle for the servo motor
int angle2; // variable to hold the angle for the servo motor
int servoPin=2; // styr servomotorn med GPIO 2
int analogPin=A0; // Analog ingång för sensorn
int ledNr1; //det antal pixlar jag vill tända i ringen
int ledNr2; //det antal pixlar jag vill tända i ringen
int sensorVal1; // en variabel som sparar sensorvärdet som heltal
int sensorVal2; // en variabel som sparar sensorvärdet som heltal
int minVal1=953; // en variabel för sensorns minsta värde
int minVal2=1015; // en variabel för sensorns minsta värde
int maxVal1= 115; // en varibel för sensorns största värde
int maxVal2=8; // en varibel för sensorns största värde
int minVal3=984;
int maxVal3=61;
int sensorVal = (sensorVal1 + sensorVal2) / 2; //totala sensor värdet delat på 2 för servo och neopixel ring
float celsius; // en variabel för att spara temperaturen som decimaltal
int temp; // en variabel för att spara temperaturen som heltal
int low_level1; // en variabel för att spara "gränser" så att man enklare kan skriva ut saker
int low_level2; // en variabel för att spara "gränser" så att man enklare kan skriva ut saker
int high_level1; // en variabel för att spara "gränser" så att man enklare kan skriva ut saker
int high_level2; // en variabel för att spara "gränser" så att man enklare kan skriva ut saker
int low_level3; // en variabel för att spara "gränser" så att man enklare kan skriva ut saker
int high_level3; // en variabel för att spara "gränser" så att man enklare kan skriva ut saker
// Declare and initialise global variables for display resolution
const int logo_width = 64;
const int logo_height = 64;
//Varmt och ljust
static unsigned char Glass[] U8G_PROGMEM = {
0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x07, 0x00, 0x00,
0x00, 0x00, 0xe0, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x1f, 0x00, 0x00,
0x00, 0x00, 0xe0, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00,
0x00, 0x00, 0xf8, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00,
0x00, 0x00, 0xfc, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00,
0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x7f, 0x00, 0x00,
0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff,
0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x1f, 0x00, 0x00,
0x00, 0x00, 0xc0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00,
0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff,
0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 };
//Varmt och mörkt
static unsigned char Eld[] U8G_PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x0f, 0x00, 0x00,
0x00, 0x80, 0x3f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00,
0xe0, 0x1f, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0xf0, 0x1f, 0x00, 0x00,
0x00, 0x80, 0x3f, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00,
0xf0, 0x0f, 0x00, 0x00, 0x00, 0x90, 0x3f, 0x00, 0xf0, 0x03, 0x00, 0x08,
0x00, 0xfc, 0x7f, 0x00, 0xf0, 0x07, 0x00, 0x08, 0x00, 0xff, 0xff, 0x00,
0xf0, 0x0f, 0x00, 0x1a, 0xc0, 0xff, 0xff, 0x01, 0xf0, 0x7f, 0x00, 0x1c,
0xe0, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0x5b, 0x70, 0xf8, 0xff, 0x03,
0xf8, 0xff, 0x01, 0x7f, 0x30, 0xfc, 0xff, 0x03, 0xf8, 0xff, 0x01, 0x6f,
0x30, 0xfc, 0xff, 0x03, 0xf8, 0xff, 0x01, 0xfe, 0x01, 0xfc, 0xff, 0x07,
0xf8, 0xff, 0x81, 0x7f, 0x00, 0xfc, 0xff, 0x03, 0xf8, 0xff, 0x01, 0x7f,
0x00, 0xfc, 0xff, 0x07, 0xf8, 0xff, 0xc0, 0xff, 0x00, 0xfe, 0xff, 0x03,
0xf8, 0xff, 0xe0, 0xff, 0x05, 0xbe, 0xff, 0x03, 0xf8, 0xff, 0xe0, 0xff,
0x07, 0xbe, 0xff, 0x03, 0xf8, 0xdf, 0xc1, 0xff, 0x00, 0xbe, 0xff, 0x03,
0xf8, 0xdf, 0x41, 0xb7, 0x81, 0xff, 0xff, 0x03, 0xf0, 0xcf, 0x81, 0x33,
0xf0, 0xff, 0xff, 0x03, 0xf0, 0xcf, 0x03, 0x20, 0xf8, 0xff, 0xff, 0x03,
0xf0, 0xc7, 0x1f, 0x00, 0xf8, 0xff, 0xff, 0x03, 0xe0, 0xc1, 0x3f, 0x00,
0xf8, 0xff, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x7f, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
//Kallt och mörkt
static unsigned char Kamin1_bits[] U8G_PROGMEM = {
0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x48, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x8c,
0x30, 0x70, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1c, 0x31, 0x78, 0x00, 0x00,
0x00, 0x00, 0x1e, 0x0e, 0x70, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1f,
0xf0, 0x71, 0x00, 0x00, 0x00, 0xb8, 0xc4, 0x1f, 0xf8, 0x4f, 0x3a, 0x00,
0x00, 0xf0, 0xe8, 0x7f, 0xff, 0x2f, 0x1e, 0x00, 0x00, 0xe0, 0xeb, 0xff,
0xff, 0xaf, 0x0f, 0x00, 0x00, 0x00, 0xf6, 0xab, 0xaa, 0x5f, 0x00, 0x00,
0x00, 0x00, 0x50, 0x01, 0x00, 0x95, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
0xf0, 0x07, 0xfc, 0x0f, 0xf8, 0x1f, 0xf8, 0x0f, 0xf0, 0x01, 0xfd, 0x03,
0xfa, 0x07, 0xf4, 0x0f, 0x00, 0xd5, 0x07, 0xaa, 0x0f, 0x54, 0x1f, 0x00,
0xc0, 0xbf, 0xfc, 0x7f, 0xf9, 0xbf, 0xf5, 0x03, 0xc0, 0xeb, 0xfd, 0xd7,
0xfb, 0xe7, 0xf5, 0x03, 0xc0, 0x5b, 0xfc, 0x37, 0xf8, 0x2f, 0xf0, 0x01,
0xc0, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0xf0, 0x03, 0xc0, 0x07, 0xfc, 0x0f,
0xf0, 0x1f, 0xe0, 0x01, 0xc0, 0x07, 0xfc, 0x0f, 0xf0, 0x1f, 0xe0, 0x03,
0xc0, 0x07, 0xf4, 0x0f, 0xf8, 0x1f, 0xd0, 0x03, 0xc0, 0x07, 0xf2, 0x0f,
0xe4, 0x1f, 0xc8, 0x03, 0xc0, 0x03, 0xf2, 0x0f, 0xe4, 0x1f, 0xc8, 0x01,
0xc0, 0x03, 0xf2, 0x07, 0xe4, 0x0f, 0x88, 0x03, 0xc0, 0x01, 0xfa, 0x03,
0xe4, 0x0f, 0xc8, 0x01, 0xc0, 0x03, 0xfe, 0x07, 0xfc, 0x0f, 0xf8, 0x03,
0xc0, 0x04, 0xff, 0x09, 0xfe, 0x13, 0xfc, 0x03, 0xc0, 0x88, 0xff, 0x11,
0xff, 0x23, 0xfe, 0x03, 0x40, 0xc8, 0xff, 0x91, 0xff, 0x23, 0xff, 0x01,
0xc0, 0xf8, 0xff, 0xe1, 0xff, 0xa3, 0xff, 0x03, 0xc0, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x01, 0xc0, 0x27, 0x04, 0x11, 0x88, 0x40, 0xf2, 0x03,
0xc0, 0xfb, 0xff, 0x7f, 0xff, 0xfd, 0xf7, 0x03, 0xc0, 0xfb, 0xdf, 0x7f,
0xff, 0xfd, 0xf7, 0x03, 0xc0, 0x23, 0x82, 0x24, 0x92, 0x88, 0xf4, 0x01,
0xc0, 0xdf, 0x03, 0x00, 0x00, 0xe0, 0xfd, 0x03, 0xc0, 0xdf, 0x03, 0x80,
0x00, 0xe0, 0xfd, 0x03, 0xc0, 0xdf, 0x03, 0x80, 0x11, 0xe0, 0xfd, 0x03,
0xc0, 0xdf, 0x03, 0x88, 0x3b, 0xe0, 0xfd, 0x01, 0xc0, 0x5f, 0x00, 0x88,
0x19, 0x20, 0xfc, 0x03, 0xc0, 0xdf, 0x03, 0xcc, 0x73, 0xe0, 0xfd, 0x03,
0xc0, 0xdf, 0x03, 0xec, 0x73, 0xe0, 0xfd, 0x03, 0xc0, 0xdf, 0x03, 0xcc,
0x73, 0xe0, 0xfd, 0x01, 0xc0, 0xdf, 0x03, 0xec, 0x6f, 0xe0, 0xfd, 0x03,
0xc0, 0x9f, 0x02, 0xbf, 0x2f, 0xa1, 0xfc, 0x01, 0xc0, 0x5f, 0xc1, 0xff,
0xf6, 0xa1, 0xfc, 0x03, 0xc0, 0xdf, 0xc3, 0xaf, 0xff, 0xe3, 0xfd, 0x03,
0xc0, 0xdf, 0x03, 0xe7, 0xbf, 0xe0, 0xfd, 0x03, 0xc0, 0xdf, 0xe3, 0x5f,
0xf5, 0xe3, 0xfd, 0x01, 0xc0, 0xdf, 0xf3, 0xff, 0xff, 0xe7, 0xfd, 0x03,
0xc0, 0x1f, 0xe0, 0x7f, 0x77, 0x07, 0xfc, 0x01, 0xc0, 0xdf, 0x83, 0xaa,
0xed, 0xe6, 0xfd, 0x03, 0xc0, 0xdf, 0x83, 0xff, 0xff, 0xe0, 0xfd, 0x03,
0xc0, 0xdf, 0x43, 0x00, 0x80, 0xe0, 0xfd, 0x03, 0xc0, 0xdf, 0x43, 0x00,
0x00, 0xe1, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xc0, 0xff, 0xfd, 0x7f, 0xff, 0xef, 0xff, 0x03, 0xc0, 0xff, 0xfd, 0x7f,
0xff, 0xef, 0xff, 0x03, 0xc0, 0xff, 0xfd, 0x7f, 0xff, 0xef, 0xff, 0x03,
0xc0, 0xff, 0xfd, 0x7f, 0xff, 0xcf, 0xff, 0x03 };
//Kallt och ljust
static unsigned char skiing1_bits[] U8G_PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
0x04, 0x00, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0xc0, 0xff,
0xff, 0x01, 0x00, 0x00, 0x14, 0x00, 0xc0, 0xff, 0xff, 0x01, 0x00, 0x00,
0x40, 0x00, 0xc0, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x01, 0xc0, 0xff,
0xff, 0x03, 0x00, 0x00, 0x00, 0x04, 0xc0, 0xf8, 0xdf, 0x07, 0x00, 0x00,
0x00, 0x10, 0xc0, 0xf8, 0x8f, 0x07, 0x00, 0x00, 0x00, 0x40, 0xe0, 0xf8,
0x8f, 0x07, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xfc, 0x0f, 0x07, 0x00, 0x00,
0x00, 0x00, 0xc4, 0xfc, 0x0f, 0x06, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xfc,
0x1f, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x1f, 0x0e, 0x00, 0x00,
0x00, 0x00, 0xc0, 0xf8, 0x1f, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0x3f, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x3f, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0xf8, 0x7f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x83, 0x00, 0x00,
0x00, 0x00, 0x80, 0x07, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f,
0xfc, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7e, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
0xfc, 0x0f, 0x04, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xfd, 0x0f, 0x08, 0x00,
0x00, 0x00, 0x00, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
0xff, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x1f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0xfc, 0x1f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00,
0xc0, 0x7f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b };
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600); //
myServo.attach(servoPin); // attaches the servo on servoPin to the servo object
// analogPin ska vara INPUT
pinMode(A0, INPUT); //fast A0 ska ju vara INPUT, men för säkerhets skull
pinMode(A1, INPUT);
// Initialise the ring
myRing.begin();
myRing.setBrightness(neoBright);
myRing.show();
}
void loop(void) {
sensorVal1=analogRead(A0); // läs och spara sensorvärdet
sensorVal2=analogRead(A1); // läs och spara sensorvärdet
int sensorVal = (sensorVal1 + sensorVal2) / 2; //Totala sensorvärdet
if (sensorVal1>maxVal1) maxVal1 = sensorVal1; //gör om max värdet till det högsta värdet som sensor1 visar
if (sensorVal1<minVal1) minVal1 = sensorVal1; //gör om minsta värdet till det minsta värdet som sensor1 visar
if (sensorVal2>maxVal2) maxVal2 = sensorVal2; //gör om max värdet till det högsta värdet som sensor2 visar
if (sensorVal2<minVal2) minVal2 = sensorVal2; //gör om minsta värdet till det minsta värdet som sensor2 visar
if (sensorVal>maxVal3) maxVal3 = sensorVal; //gör om totala max värdet till båda sensorernas totala max värde/2
if (sensorVal<minVal3) minVal3 = sensorVal; //gör om totala min värdet till båda sensorernas totala min värde/2
low_level1=3*minVal1; //nedre gränsvärdet som delar in sensorvärdena i tre områden
high_level1=0.60*maxVal1; //övre gränsvärdet som delar in sensorvärdena i tre områden
low_level2=4*minVal2; //nedre gränsvärdet som delar in sensorvärdena i tre områden
high_level2=0.60*maxVal2; //övre gränsvärdet som delar in sensorvärdena i tre områden
low_level3=1.10*minVal3; //nedre gränsvärdet som delar in sensorvärdena i tre områden
high_level3=0.90*maxVal3; //övre gränsvärdet som delar in sensorvärdena i tre områden
ledNr1 = map(sensorVal, minVal3, maxVal3, neoPixels, 0 ); // skala om sensorvärdet till antal pixlar i ringen som ska lysa
angle1 = map(sensorVal, minVal3, maxVal3, 180, 0); // skala om sensorvärdet till vinkeln som servomotorn ska stå i
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
celsius = 1 / (log(1 / (1023. / sensorVal1 - 1)) / BETA + 1.0 / 298.15) - 273.15; //temperaturen som decimaltal
temp = (int)celsius; // temperaturen fast nu som ett heltal, decimaler stryks, ej rätt avrundat
// Här följer utskrifter till monitorn som vi kan använda för att kontrollera värden från sensorn
Serial.print(sensorVal1);
Serial.print(" ");
Serial.print(sensorVal2);
Serial.print(" ");
Serial.print(low_level1);
Serial.print(" ");
Serial.print(high_level1);
Serial.print(" ");
Serial.print(low_level2);
Serial.print(" ");
Serial.print(high_level2);
Serial.print(" ");
Serial.print(ledNr1);
Serial.print(" ");
Serial.println(angle1);
// Slå på oled-ringen
f_neopixel();
// Styr servot
f_servo();
//Nedan följer koden för att skriva på oled-displayen
myOled.firstPage();
do {
f_oled();
}
while( myOled.nextPage() );
delay(20);
}
//funktionen som styr servomotorn
void f_servo(void) {
if(sensorVal1<low_level1) { //vid höga temperaturer slår vinkeln mellan 150 och 180 grader
for (angle1=150; angle1<=180; angle1=angle1+5){
myServo.write(angle1); // set the servo position
delay(10);
}
for (angle1=180; angle1>=150; angle1=angle1-5) {
myServo.write(angle1); // set the servo position
delay(10);
}
}
else if(sensorVal1>high_level1) { //vid låga temperaturer slår vinkeln mellan 0 och 30 grader
for (angle1=0; angle1<=30; angle1=angle1+5){
myServo.write(angle1); // set the servo position
delay(10);
}
for (angle1=30; angle1>=0; angle1=angle1-5) {
myServo.write(angle1); // set the servo position
delay(10);
}
}
else myServo.write(angle1); // när temperaturen är i mittområdet används vinkeln som beräknades i loopen
}
//funktionen som styr neopixelringen
void f_neopixel(void) {
if(sensorVal1<low_level1) { //vid höga temperaturer blinkar alla pixlar i rött
for(int i = 0; i <neoPixels; i++){
myRing.setPixelColor(i, myRing.Color(255, 0, 0));
myRing.show();
}
delay(300);
for(int i = 0; i < neoPixels; i++){ // övriga pixlar är svagt gröna
myRing.setPixelColor(i, myRing.Color(0, 0, 0));
myRing.show();
}
delay(300);
}
else if(sensorVal1>high_level1) { //vid låga temperaturer blinkar alla pixlar i blått
for(int i = 0; i <neoPixels; i++){
myRing.setPixelColor(i, myRing.Color(0, 0, 255));
myRing.show();
}
delay(300);
for(int i = 0; i < neoPixels; i++){ // övriga pixlar är svagt gröna
myRing.setPixelColor(i, myRing.Color(0, 0, 0));
myRing.show();
}
delay(300);
}
else { //när temperaturen är i mittområdet tänds det antal pixlar som beräknades i loopen i lila
for(int i = 0; i <ledNr1; i++){
myRing.setPixelColor(i, myRing.Color(255, 0, 255));
myRing.show();
}
for(int i = ledNr1; i < neoPixels; i++){ // övriga pixlar är svagt gröna
myRing.setPixelColor(i, myRing.Color(0, 30, 0));
myRing.show();
}
}
}
// funktionen som styr OLED-skärmen
void f_oled(void) {
myOled.setFont(u8g_font_helvB10); // här väljer jag typsnitt och storlek
char buf1[22]; // det får plats 22 tecken i buf1
//Varmt och ljust
if(sensorVal1<low_level1 && sensorVal2<low_level2){ //när det är varmt och ljust händer detta på OLED-skärmen
myOled.drawStr(0, 30, "Ät glass");
// Draw image
myOled.drawXBMP(64, 0, logo_width, logo_height, Glass);
}
//kallt och mörkt
else if(sensorVal1>high_level1 && sensorVal2>high_level2){ //när det är kallt och mörkt händer detta på OLED-skärmen
myOled.drawStr(0, 30, "Varm dig");
// Draw image
myOled.drawXBMP(64, 0, logo_width, logo_height, Kamin1_bits);
}
//Varmt och mörkt
else if(sensorVal1<low_level1 && sensorVal2>high_level2){ //när det är varmt och mörkt händer detta på OLED-skärmen
myOled.drawStr(0, 30, "Kvallsmys");
// Draw image
myOled.drawXBMP(64, 0, logo_width, logo_height, Eld);
}
else if(sensorVal1>high_level1 && sensorVal2<low_level2){ //när det är kallt och ljust händer detta på OLED-skärmen
myOled.drawStr(0, 30, "Skidor");
// Draw image
myOled.drawXBMP(64, 0, logo_width, logo_height, skiing1_bits);
}
else { //när temperaturen är i mittområdet händer detta på OLED-skärmen
myOled.drawStr(0, 30, "Inga problem");
}
//nedan finns koden som alltid skriver ut temperaturen på OLED-skärmen
char buf2[3]; // det får plats 3 tecken i buf2
dtostrf (celsius, 3 , 0, buf2); // gör om variabelvärdet på celsius (float) till 3 tecken med 0 decimaler
myOled.drawStr(0, 45, buf2); // skriver ut innehållet i buf2, temperaturen
myOled.drawStr(25, 45, "C"); // lägger till ett C efter temperaturen
}