#include <Adafruit_NeoPixel.h>
#include <Wire.h>
#include "RTClib.h"
#define PIN 25 // Pinnen vi bruker til Neopixlene
// Det er en feil i biblioteket her på WOKWI så vi må simulere med 69 pixler
#define NUMPIXELS 68 // Antall neopixler på en hel sirkel
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
RTC_DS1307 rtc;
#include "funksjoner.h" // Inkluder den nye header-filen
#include "animasjoner.h" // Inkluderer animasjonene
timePlan plan[40];
// Statusbits for animasjon:
bool erFriminutt = false; // Blir True når det blir friminutt
bool erTime = false; // Blir True når det blir time
bool erFerdig = false; // Blir True når skoledagen er over
bool erHelg = false; // Blir True når det er helg
byte gjeldende = 0; // Gjeldende aktivitet, Aktiviteten som er akkurat nå
byte forrige = 0; // Forrige aktivitet, Aktiviteten vi hadde for 1 millisekund siden
uint32_t fagFarge[10] = {
strip.Color(0, 0, 0), //fagFarge[0] Ingen farge
strip.Color(0,255,0), //fagFarge[1] Grønn
strip.Color(102,205,170), //fagFarge[2] ?
strip.Color(0,128,128), //fagFarge[3] Grønn + blå
strip.Color(205,92,92), //fagFarge[4] ?
strip.Color(255,0,0), //fagFarge[5] Rød
strip.Color(60,179,113), //fagFarge[6] ?
strip.Color(0,100,0), //fagFarge[7] Lys grønn
strip.Color(188,143,143) //fagFarge[8] ?
};
int igjen = 0;
void setup() {
Serial.begin(115200);
strip.begin();
strip.show(); // Setter alle pixlene til 'AV'
if (! rtc.begin()) {
Serial.println("Kan ikke finne klokken, kanskje tom for batteri??");
Serial.flush();
abort();
}
if (!rtc.isrunning()) {
Serial.println("Klokken er feil!");
}
fyllPlan(); // Fyller timeplanen inni funksjoner.h
}
void loop() {
// STILL KLOKKEN! Skriv "tid" for å stille
if (Serial.available()) {
String kommando = Serial.readStringUntil('\n');
if (kommando == "tid") {
stillKlokke();
}
}
DateTime now = rtc.now();
gjeldende = fagNummer(now, plan);
if(gjeldende != forrige){
Serial.print("NY AKTIVITET!!!");
switch(gjeldende){
case 0:
if(now.dayOfTheWeek() == 5){
erHelg = true;
}
else{
erFerdig = true;
}
break;
case 1:
erFriminutt = true;
break;
default:
erTime = true;
break;
}
forrige = gjeldende; // Gjør at vi bare kjører dette en gang hver gang vi
}
igjen = tidIgjen(now.dayOfTheWeek(), now.hour(), now.minute(), now.second());
Serial.print("Akkurat nå har vi: ");
Serial.print(fag(now, plan));
Serial.print(" (");
Serial.print(fagNummer(now, plan));
Serial.println(")");
Serial.print("Klokken er: ");
Serial.print(now.hour());
Serial.print(":");
Serial.print(now.minute());
Serial.print(":");
Serial.println(now.second());
Serial.print("Dag i uken: ");
Serial.println(now.dayOfTheWeek());
if( igjen > 0){
Serial.print("Det er ");
Serial.print(igjen);
Serial.println(" sek igjen av timen");
}
//*************** ANIMASJONER ********************
if (erFriminutt){
friminuttAnimasjon();
erFriminutt = false;
}
if (erTime){
alarm(strip.Color(130, 0, 0), 25);
blink();
alarm(strip.Color(130, 0, 0), 25);
skruAv();
erTime = false;
}
if (erFerdig){
ring(strip.Color(74, 129, 130), 30);
runde(strip.Color(74, 129, 130), 50);
skruAv();
erFerdig = false;
}
if (erHelg){
HelgAnimasjon();
erHelg = false;
}
//************************************************
// Oppdater LEDstrip mellom strip.clear() og strip.show()
strip.clear();
nedTelling(igjen, fagFarge[gjeldende]);
strip.show();
delay(100);
}