/*
 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
}