Nu har jag kommit igång med programmerandet och just nu verkar det gå skit bra, men å andra sidan så har jag inte laddat ner och testat programmet än. Dessutom måste jag göra en enkel simulator så tiden kan snabbas upp några tusen gånger. Så att en dag motsvarar en sekund så att det går att simulera ett års skiftschema på 5 minuter.
Så här ser programmet i stort ut.
Kod: Markera allt
switch(year){
case 16:
leapdays = 1;
break;
case 20:
leapdays = 2;
break;
case 24:
leapdays = 3;
break;
case 28:
leapdays = 4;
break;
case 32:
leapdays = 5;
break;
case 40:
leapdays = 6;
break;
}
Första delen, se om något av åren som varit eller är har något skottår och då lägga värde i "leapdays". Efter tiden räknas från januari 2015 (passade bra med skiftet då).
Nästa steg blir att räkna hur många dagar som har gått det aktuella året "nu", detta sker i 12 steg januari (0 dagar) till december + 31 dagar sista december.
Efter som programmet får aktuell månad från RTC:n så räknar jag inte med januari först utan januari kommer i febuari osv.
Kod: Markera allt
switch(month){
case 1:
c_month = 0 + leapdays; ;
break;
case 2:
c_month = 31 + leapdays;
break;
case 3:
c_month = 59 + leapdays ;
break;
case 4:
c_month = 90 + leapdays;
break;
case 5:
c_month = 120 + leapdays;
break;
case 6:
c_month = 151 + leapdays;
break;
case 7:
c_month = 181 + leapdays;
break;
case 8:
c_month = 212 + leapdays;
break;
case 9:
c_month = 243 + leapdays;
break;
case 10:
c_month = 273 + leapdays;
break;
case 11:
c_month = 304 + leapdays;
break;
case 12:
c_month = 234 + leapdays;
break;
}
Man vill ju kunna ställa in vilket lag man tillhör, från A - E. Efter som jag tillhör B-lag så får det bli 0 dagar i skillnad från default. Dvs B-Lag är default inställningen, går man på nått annat lag blir det till att lägga på extra dagar för att komma till samma punkt i 35 dagars perioden. Här är det feltänkt fullständigt ser jag nu. Dagarna stämmer inte.
Det är dagar som ska tas bort och inte läggas till.......
Kod: Markera allt
switch(teamA-E) {
case 1: // A-team
nr_day + 21; // +21 day from deafault start
break;
case 2: // B-team
nr_day + 0; // default
break;
case 3: //C-team
nr_day + 14; // +14 day from default start
break;
case 4: //D-team
nr_day + 28; // +28 day from default start
break;
case 5: // E-team
nr_day + 7; // +7 day from default start
break;
}
Nästa steg blir att räkna fram antal dagar som gått från 1 januari 2015, och samtidigt dela det med 35 dagar som en hel skiftcykel är. Då får man fram vilket skiftlag som gör vad på inställt datum.
Kod: Markera allt
c_year = year - 15; // how many hole year from start year
nr_days = (c_year * 365) + c_month + dayOfMonth;
if (nr_day != c_days) {
c_days++;
day1_35++; }
if (day1-35 >> 35 ) {
day1_35 = 1; }
Och sedan en tabell som säger vilka dagar i den här 35 dagars listan som motsvarar vilka skift utifrån att perioden börjar måndag med två förmiddagsskift.
Kod: Markera allt
// start with two AM shift at monday
if(day1_35 == 1 || 2 || 12 || 13 || 14 || 24) {
skift = F;}
if (day1_35 == 3 || 4 || 15 || 16 || 26 || 27 || 28) {
skift = E;}
if(day1_35 == 5 || 7 || 17 || 18 || 30) {
skift = N; }
if(day1_35 == 29) {
skift = SE; } // short afternon shift
if(day1_35 == 8) {
skift = LN; } //Long night shift
if(day1_35 == 8 || 9 || 10 || 11 || 19 || 20 || 21 || 22 || 23 || 31 || 32 || 33 || 34 || 35 ) {
skift = L; } // L = Freeshift
Där har vi skiftschemat enligt den på första inlägget i arduino tappning. Det finns säkert många sätt att göra detta på och jag har ju som sagt inte testa om det fungerar än.
Detta är den viktigaste delen av koden, för att få till det. Det som fattas är ju såklart vilka tider F,E,N,SE,LN motsvarar temperatur justeringen, och en massa lcd.print();
Om det här fungerar utan allt för mycket ingrepp så kommer jag att säga var det inte krångligare än så här. Varför i h-lvete har jag inte gjort det tidigare.