Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //copyright Piers Walter. Do not distribute without permission.
- #include <SPI.h>
- //include LCD library
- #include <LiquidCrystal.h>
- LiquidCrystal lcd(2,3,4,5,6,8);//LCD pins, intialize
- char* day[7] = {"MON ","TUE ","WED ","THU ","FRI ","SAT ","SUN "}; //set char string, remember that to print monday would be lcd.print(day[0])
- unsigned long oldmillisec;
- int setBtn = A2;
- int downBtn = A2;
- int upBtn = A2;
- int exitBtn = A2;
- int volume = 0;
- int volumeMapped = 0;
- const int slaveSelectPin = 7;
- int light =0;
- int screenlight =0;
- int scrLed =10;
- /*byte degree[8] = {
- B00110,
- B01001,
- B01001,
- B00110,
- B00000,
- B00000,
- B00000,
- };*/
- long msecPerHour=0;//hourly increment
- long msecPerMinute=0;//minute inrement
- long msecPerDay=0;//daily increment
- long totalSecPerDay=300;//dependent on crystal
- int DAY, HOURS, MINS, SECS;
- unsigned int MILLISECS;
- unsigned int currentSECS,lastSECS;
- //int temp;
- //int temp_address = 72;
- int zero = 0;
- void setup()
- {
- lcd.begin(16,2);//LCD width by height
- lcd.print("Initialized");
- oldmillisec=millis();
- pinMode(setBtn,INPUT);
- pinMode(downBtn,INPUT);
- pinMode(upBtn,INPUT);
- pinMode(exitBtn,INPUT);
- pinMode(slaveSelectPin,OUTPUT);
- SPI.begin();
- SPI.setDataMode(0);
- }
- void loop()
- {
- boolean hourState=false;
- boolean minuteState=false;
- boolean dayState=false;
- boolean msecminState=false;
- while(digitalRead(7)==HIGH){
- hourState = true;}
- while(hourState){
- lcd.setCursor(0,0);
- lcd.print("Set Hours ");
- lcd.setCursor(6,1);
- if(HOURS<10)lcd.print("0");
- lcd.print(HOURS);
- if(digitalRead(upBtn)==HIGH){HOURS++;tone(6,2500,15);}
- if(digitalRead(downBtn)==HIGH){HOURS--;tone(6,2500,15);}
- if(HOURS>23) HOURS -= 24;
- if(HOURS<0) HOURS+=24;
- delay(200);
- if(digitalRead(exitBtn)==HIGH){hourState=false;
- clear();}
- if(digitalRead(setBtn)==HIGH){minuteState=true;
- hourState=false;
- delay(200);}}
- while(minuteState==true){
- lcd.setCursor(0,0);
- lcd.print("Set Minutes ");
- lcd.setCursor(9,1);
- if(MINS<10)lcd.print("0");
- lcd.print(MINS);
- if(digitalRead(upBtn)==HIGH)MINS++;
- if(digitalRead(downBtn)==HIGH)MINS--;
- if(MINS>59) MINS -= 60;
- if(MINS<0) MINS+=60;
- delay(100);
- if(digitalRead(exitBtn)==HIGH){minuteState=false;
- clear();}
- if(digitalRead(setBtn)==HIGH){dayState=true;break;
- delay(200);}
- }
- while(dayState){
- lcd.setCursor(0,0);
- lcd.print("Set Days ");
- lcd.setCursor(2,1);
- lcd.print(day[DAY]);
- if(digitalRead(upBtn)==HIGH){DAY++;tone(6,2500,15);}
- if(digitalRead(downBtn)==HIGH){DAY--;tone(6,2500,15);}
- if(DAY>6) DAY -= 7;
- if(DAY<0) DAY += 7;
- delay(100);
- if(digitalRead(exitBtn)==HIGH){dayState=false;
- clear();}
- if(digitalRead(setBtn)==HIGH){msecminState=true;dayState=false;}}
- while(msecminState==true){
- lcd.setCursor(0,0);
- lcd.print("secs/day add ");
- if(digitalRead(upBtn)==HIGH){totalSecPerDay = totalSecPerDay++;tone(6,2500,15);}
- if(digitalRead(downBtn)==HIGH){totalSecPerDay = totalSecPerDay--;tone(6,2500,15);}
- long totalMsecPerDay = totalSecPerDay * 1000;
- msecPerMinute = totalMsecPerDay/1440;
- totalMsecPerDay = totalMsecPerDay % 1440;//remainder needs to be distributed hourly
- msecPerHour=totalMsecPerDay/24;
- totalMsecPerDay=totalMsecPerDay%24;//remainder needs to be distributed daily.
- msecPerDay=totalMsecPerDay;
- lcd.setCursor(0,1);
- lcd.print(" ");
- delay(10);
- lcd.setCursor(0,1);
- lcd.print(totalSecPerDay);
- delay(50);
- if(digitalRead(setBtn)==HIGH){
- clear();
- }
- if(digitalRead(exitBtn)==HIGH){
- msecminState=false;
- lcd.print(" ");
- lcd.print(day[DAY]);
- if(HOURS<10){ lcd.print("0");}
- lcd.print(HOURS);
- lcd.print(":");
- if(MINS<10){lcd.print("0");}
- lcd.print(MINS);
- lcd.print(":");
- if(SECS<10){lcd.print("0");}
- lcd.print(SECS);}}
- unsigned long msec = millis();
- unsigned long elapsed = msec - oldmillisec;
- oldmillisec = msec;//remember where we are
- MILLISECS += elapsed; //increase millisecs by elapsed amount
- currentSECS=SECS;
- while(MILLISECS>=1000){
- MILLISECS -= 1000; SECS +=1;}
- if(currentSECS!=SECS){digitalWrite(13,HIGH);
- delay(20);
- clear();
- }
- if(digitalRead(exitBtn)==HIGH)SECS=0;
- while(SECS>=60){SECS -=60; MINS++;
- MILLISECS+=msecPerMinute;}//add msecminute correction to elapsed
- while(MINS>=60){MINS-=60; HOURS++; MILLISECS += msecPerHour;tone(6,2500,15);delay(120);tone(6,2500,15);}
- while(HOURS>=24){HOURS-=24; DAY++; MILLISECS += msecPerDay;}
- while(DAY>=7){DAY-=7;}
- if(digitalRead(A0)==HIGH){volume ++;
- delay(10);}
- if(digitalRead(A1)==HIGH){volume --;
- delay(10);}
- if(volume>100){volume=100;}
- if(volume<0){volume=0;}
- volumeMapped = map(volume,0,100,0,127);
- digitalWrite(slaveSelectPin,LOW);
- SPI.transfer(0);
- SPI.transfer(volumeMapped);
- digitalWrite(slaveSelectPin,HIGH);
- lcd.setCursor(0,0);
- lcd.print(" ");
- lcd.print("Volume");
- lcd.print("=");
- lcd.print(volume);
- lcd.print("%");
- lcd.setCursor(0,1);
- lcd.print(" ");
- lcd.print(day[DAY]);
- if(HOURS<10){ lcd.print("0");}
- lcd.print(HOURS);
- lcd.print(":");
- if(MINS<10){lcd.print("0");}
- lcd.print(MINS);
- lcd.print(":");
- if(SECS<10){lcd.print("0");}
- lcd.print(SECS);
- delay(100);
- }
- void clear(){lcd.setCursor(0,0);
- lcd.print(" ");
- lcd.setCursor(0,0);
- lcd.setCursor(0,1);
- lcd.print(" ");
- delay(10);}
- void digitalPotWrite(int value)
- {
- //take the SS pin low to select the chip:
- digitalWrite(slaveSelectPin, LOW);
- //send in the address and value via SPI:
- SPI.transfer(0);
- SPI.transfer(value);
- // take the SS pin high to de-select the chip:
- digitalWrite(slaveSelectPin, HIGH);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement