Con questo progetto si avrà un timer per la lavatrice.
Basta selezionare il tipo di lavaggio (cotone 60°, cotone 40°, etc etc) e l'ora in cui si desidera che la lavatrice finisca il lavaggio:
/*
Collegare lo schermo LCD nei pin 13,12,11,10,9,8 dell'arduino
Collegare un button (per set orologio) nel pin 7
Collegare il rotary encoder nei pin 2-3 e il button pin nel pin 4
Collegare il modulo RTC: SCL-->pin AN5 SDA-->pin AN4
*/
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,13,11,10,9,8);
int ora;
int minuti;
int oraA = 13;
int minutiA = 00;
int val;
int button2 = 7;
int encoder0PinA = 3;
int encoder0PinB = 2;
int encoder0Pos = 0;
int button = 4;
int encoder0PinALast = LOW;
int n = LOW;
int oraextra = 1;
boolean OldButtonState = false;
boolean NewButtonState = false;
boolean OldButtonState2 = false;
boolean NewButtonState2 = false;
char* lavo[]={" Cotone 60' "," Cotone 40' "," Sintetici 60' "," Sintetici 40' "," Misti 40' "," Rapido 30' "," Delicati 40' "," Lana 30' "};
int timelavoore[]={2, 2, 1, 1, 1, 0, 0, 0};
int timelavominuti[]={20, 5, 30, 20, 0, 30, 45, 40};
int lavaggio = 1;
int oraX;
int minutiX;
void setup() {
Serial.begin(9600);
pinMode(7, INPUT);
pinMode(4, INPUT);
pinMode(3, INPUT);
pinMode(2, INPUT);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0,0);
lcd.println(" BUON GIORNO ");
lcd.setCursor(0,1);
lcd.println(" Wash-timer 1.0 ");
delay(1500);
lcd.clear();
ora = RTC.get(DS1307_HR, true);
minuti = RTC.get(DS1307_MIN, false);
}
void loop(){
ora = RTC.get(DS1307_HR, true);
minuti = RTC.get(DS1307_MIN, false);
visualizza_ora();
visualizza_allarme();
if (ButtonPressed()){
washtype();
SetAlarm();
}
if (ButtonPressed2()){
SetClock();
}
if (ora == oraX && minuti == minutiX){
allarme();
delay(1000);
Collegare lo schermo LCD nei pin 13,12,11,10,9,8 dell'arduino
Collegare un button (per set orologio) nel pin 7
Collegare il rotary encoder nei pin 2-3 e il button pin nel pin 4
Collegare il modulo RTC: SCL-->pin AN5 SDA-->pin AN4
*/
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,13,11,10,9,8);
int ora;
int minuti;
int oraA = 13;
int minutiA = 00;
int val;
int button2 = 7;
int encoder0PinA = 3;
int encoder0PinB = 2;
int encoder0Pos = 0;
int button = 4;
int encoder0PinALast = LOW;
int n = LOW;
int oraextra = 1;
boolean OldButtonState = false;
boolean NewButtonState = false;
boolean OldButtonState2 = false;
boolean NewButtonState2 = false;
char* lavo[]={" Cotone 60' "," Cotone 40' "," Sintetici 60' "," Sintetici 40' "," Misti 40' "," Rapido 30' "," Delicati 40' "," Lana 30' "};
int timelavoore[]={2, 2, 1, 1, 1, 0, 0, 0};
int timelavominuti[]={20, 5, 30, 20, 0, 30, 45, 40};
int lavaggio = 1;
int oraX;
int minutiX;
void setup() {
Serial.begin(9600);
pinMode(7, INPUT);
pinMode(4, INPUT);
pinMode(3, INPUT);
pinMode(2, INPUT);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0,0);
lcd.println(" BUON GIORNO ");
lcd.setCursor(0,1);
lcd.println(" Wash-timer 1.0 ");
delay(1500);
lcd.clear();
ora = RTC.get(DS1307_HR, true);
minuti = RTC.get(DS1307_MIN, false);
}
void loop(){
ora = RTC.get(DS1307_HR, true);
minuti = RTC.get(DS1307_MIN, false);
visualizza_ora();
visualizza_allarme();
if (ButtonPressed()){
washtype();
SetAlarm();
}
if (ButtonPressed2()){
SetClock();
}
if (ora == oraX && minuti == minutiX){
allarme();
delay(1000);
//fai partire il relè che attiverà la lavatrice
}
}
void allarme(){
lcd.setCursor(0,1);
lcd.print(" Avvio lavatrice ");
lcd.setCursor(0,0);
lcd.print(" ");
delay(500);
lcd.setCursor(0,0);
lcd.print(" Avvio lavatrice ");
lcd.setCursor(0,1);
lcd.print(" ");
delay(500);
}
void visualizza_ora(){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.print("Orario ");
if (ora <10){
lcd.setCursor(9,0);
lcd.print("0");
lcd.print(ora);
}
else {
lcd.setCursor(9,0);
lcd.print(ora);
}
lcd.setCursor(11,0);
lcd.print(":");
if (minuti <10){
lcd.setCursor(12,0);
lcd.print("0");
lcd.print(minuti);
}
else {
lcd.setCursor(12,0);
lcd.print(minuti);
}
lcd.print(" ");
}
void visualizza_allarme(){
lcd.setCursor(0,1);
lcd.print("Avvia alle:");
if (oraX <10){
lcd.setCursor(11,1);
lcd.print("0");
lcd.print(oraX);
}
else {
lcd.setCursor(11,1);
lcd.print(oraX);
}
lcd.setCursor(13,1);
lcd.print(":");
if (minutiX <10){
lcd.setCursor(14,1);
lcd.print("0");
lcd.print(minutiX);
}
else {
lcd.setCursor(14,1);
lcd.print(minutiX);
}
}
void SetAlarm(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Fine lavaggio: ");
while (!ButtonPressed()){
setOraA();
lcd.setCursor(6,1);
if (oraA < 10){
lcd.setCursor(6,1);
lcd.print("0");
lcd.print(oraA);
}
else
{
lcd.setCursor(6,1);
lcd.print(oraA);
}
}
while (!ButtonPressed()){
setMinutiA();
lcd.setCursor(8,1);
lcd.print(":");
if (minutiA < 10){
lcd.setCursor(9,1);
lcd.print("0");
lcd.print(minutiA);
}
else
{
lcd.setCursor(9,1);
lcd.print(minutiA);
}
}
minutiX = minutiA - timelavominuti[lavaggio];
if(minutiX < 0){
minutiX = 60 + (minutiA - timelavominuti[lavaggio]);
oraextra = 1;
} else {oraextra = 0;}
oraX = oraA - timelavoore[lavaggio] - oraextra;
if(oraX < 0){
oraX = 23 + (oraA -timelavoore[lavaggio]);
}
}
void SetClock(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Imposta l'orario");
while (!ButtonPressed()){
setOra();
lcd.setCursor(6,1);
if (ora < 10){
lcd.setCursor(6,1);
lcd.print("0");
lcd.print(ora);
}
else
{
lcd.setCursor(6,1);
lcd.print(ora);
}
}
while (!ButtonPressed()){
setMinuti();
lcd.setCursor(8,1);
lcd.print(":");
if (minuti < 10){
lcd.setCursor(9,1);
lcd.print("0");
lcd.print(minuti);
}
else
{
lcd.setCursor(9,1);
lcd.print(minuti);
}
}
RTC.stop();
RTC.set(DS1307_MIN, minuti);
RTC.set(DS1307_HR,ora);
RTC.start();
}
void setOraA() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
oraA--;
if (oraA < 0){
oraA = 23;
}
}
else {
oraA++;
if (oraA >= 24){
oraA = 00;
}
}
}
encoder0PinALast = n;
}
void setMinutiA() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
minutiA--;
if (minutiA < 0){
minutiA = 59;
}
}
else {
minutiA++;
if (minutiA >= 59){
minutiA = 00;
}
}
}
encoder0PinALast = n;
}
void setOra() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
ora--;
if (ora < 0){
ora = 23;
}
}
else {
ora++;
if (ora >= 24){
ora = 00;
}
}
Serial.print ("Ora impostata: ");
Serial.println (ora);
}
encoder0PinALast = n;
}
void setMinuti() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
minuti--;
if (minuti < 0){
minuti = 59;
}
}
else {
minuti++;
if (minuti >= 59){
minuti = 00;
}
}
Serial.print ("Minuti impostati: ");
Serial.println (minuti);
}
encoder0PinALast = n;
}
boolean ButtonPressed() {
boolean WasIt;
NewButtonState = !digitalRead(button);
if ((!OldButtonState) && (NewButtonState)) {
WasIt = true;
}
else {
WasIt = false;
}
OldButtonState = NewButtonState;
return(WasIt);
}
boolean ButtonPressed2() {
boolean WasIt2; // as in, "Was It pressed?"
NewButtonState2 = !digitalRead(button2);
if ((!OldButtonState2) && (NewButtonState2)) {
WasIt2 = true;
}
else {
WasIt2 = false;
}
OldButtonState2 = NewButtonState2;
return(WasIt2);
}
void washtype(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Scegli lavaggio");
while(!ButtonPressed()){
menulavaggio();
lcd.setCursor(0,1);
lcd.print(lavo[lavaggio]);
}
}
void menulavaggio() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
lavaggio--;
if (lavaggio <0){
lavaggio = 7;
}
}
else {
lavaggio++;
if (lavaggio > 7){
lavaggio = 0;
}
}
}
encoder0PinALast = n;
}
}
}
void allarme(){
lcd.setCursor(0,1);
lcd.print(" Avvio lavatrice ");
lcd.setCursor(0,0);
lcd.print(" ");
delay(500);
lcd.setCursor(0,0);
lcd.print(" Avvio lavatrice ");
lcd.setCursor(0,1);
lcd.print(" ");
delay(500);
}
void visualizza_ora(){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.print("Orario ");
if (ora <10){
lcd.setCursor(9,0);
lcd.print("0");
lcd.print(ora);
}
else {
lcd.setCursor(9,0);
lcd.print(ora);
}
lcd.setCursor(11,0);
lcd.print(":");
if (minuti <10){
lcd.setCursor(12,0);
lcd.print("0");
lcd.print(minuti);
}
else {
lcd.setCursor(12,0);
lcd.print(minuti);
}
lcd.print(" ");
}
void visualizza_allarme(){
lcd.setCursor(0,1);
lcd.print("Avvia alle:");
if (oraX <10){
lcd.setCursor(11,1);
lcd.print("0");
lcd.print(oraX);
}
else {
lcd.setCursor(11,1);
lcd.print(oraX);
}
lcd.setCursor(13,1);
lcd.print(":");
if (minutiX <10){
lcd.setCursor(14,1);
lcd.print("0");
lcd.print(minutiX);
}
else {
lcd.setCursor(14,1);
lcd.print(minutiX);
}
}
void SetAlarm(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Fine lavaggio: ");
while (!ButtonPressed()){
setOraA();
lcd.setCursor(6,1);
if (oraA < 10){
lcd.setCursor(6,1);
lcd.print("0");
lcd.print(oraA);
}
else
{
lcd.setCursor(6,1);
lcd.print(oraA);
}
}
while (!ButtonPressed()){
setMinutiA();
lcd.setCursor(8,1);
lcd.print(":");
if (minutiA < 10){
lcd.setCursor(9,1);
lcd.print("0");
lcd.print(minutiA);
}
else
{
lcd.setCursor(9,1);
lcd.print(minutiA);
}
}
minutiX = minutiA - timelavominuti[lavaggio];
if(minutiX < 0){
minutiX = 60 + (minutiA - timelavominuti[lavaggio]);
oraextra = 1;
} else {oraextra = 0;}
oraX = oraA - timelavoore[lavaggio] - oraextra;
if(oraX < 0){
oraX = 23 + (oraA -timelavoore[lavaggio]);
}
}
void SetClock(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Imposta l'orario");
while (!ButtonPressed()){
setOra();
lcd.setCursor(6,1);
if (ora < 10){
lcd.setCursor(6,1);
lcd.print("0");
lcd.print(ora);
}
else
{
lcd.setCursor(6,1);
lcd.print(ora);
}
}
while (!ButtonPressed()){
setMinuti();
lcd.setCursor(8,1);
lcd.print(":");
if (minuti < 10){
lcd.setCursor(9,1);
lcd.print("0");
lcd.print(minuti);
}
else
{
lcd.setCursor(9,1);
lcd.print(minuti);
}
}
RTC.stop();
RTC.set(DS1307_MIN, minuti);
RTC.set(DS1307_HR,ora);
RTC.start();
}
void setOraA() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
oraA--;
if (oraA < 0){
oraA = 23;
}
}
else {
oraA++;
if (oraA >= 24){
oraA = 00;
}
}
}
encoder0PinALast = n;
}
void setMinutiA() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
minutiA--;
if (minutiA < 0){
minutiA = 59;
}
}
else {
minutiA++;
if (minutiA >= 59){
minutiA = 00;
}
}
}
encoder0PinALast = n;
}
void setOra() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
ora--;
if (ora < 0){
ora = 23;
}
}
else {
ora++;
if (ora >= 24){
ora = 00;
}
}
Serial.print ("Ora impostata: ");
Serial.println (ora);
}
encoder0PinALast = n;
}
void setMinuti() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
minuti--;
if (minuti < 0){
minuti = 59;
}
}
else {
minuti++;
if (minuti >= 59){
minuti = 00;
}
}
Serial.print ("Minuti impostati: ");
Serial.println (minuti);
}
encoder0PinALast = n;
}
boolean ButtonPressed() {
boolean WasIt;
NewButtonState = !digitalRead(button);
if ((!OldButtonState) && (NewButtonState)) {
WasIt = true;
}
else {
WasIt = false;
}
OldButtonState = NewButtonState;
return(WasIt);
}
boolean ButtonPressed2() {
boolean WasIt2; // as in, "Was It pressed?"
NewButtonState2 = !digitalRead(button2);
if ((!OldButtonState2) && (NewButtonState2)) {
WasIt2 = true;
}
else {
WasIt2 = false;
}
OldButtonState2 = NewButtonState2;
return(WasIt2);
}
void washtype(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Scegli lavaggio");
while(!ButtonPressed()){
menulavaggio();
lcd.setCursor(0,1);
lcd.print(lavo[lavaggio]);
}
}
void menulavaggio() {
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
lavaggio--;
if (lavaggio <0){
lavaggio = 7;
}
}
else {
lavaggio++;
if (lavaggio > 7){
lavaggio = 0;
}
}
}
encoder0PinALast = n;
}