/*** * Shutter automation * * Dec-2011 First release * */ #include #include // Delay for small shutter (15s) unsigned int smallShutter=15000; // Delay for medium shutter (20s) unsigned int mediumShutter=20000; // Delay for big shutter (25s) unsigned int bigShutter=25000; // Setup pin number for relays int pinShutter1Up = 22; int pinShutter1Down = 23; int pinShutter2Up = 24; int pinShutter2Down = 25; int pinShutter3Up = 26; int pinShutter3Down = 27; int pinShutter4Up = 28; int pinShutter4Down = 29; int pinShutter5Up = 30; int pinShutter5Down = 31; int pinShutter6Up = 32; int pinShutter6Down = 33; int pinShutter7Up = 34; int pinShutter7Down = 35; int pinShutter8Up = 36; int pinShutter8Down = 37; // Setup pin number for wall switch int pinSwitch1Up=38; int pinSwitch1Down=39; int pinSwitch2Up=40; int pinSwitch2Down=41; int pinSwitch3Up=42; int pinSwitch3Down=43; int pinSwitch4Up=44; int pinSwitch4Down=45; int pinSwitch5Up=46; int pinSwitch5Down=47; int pinSwitch6Up=48; int pinSwitch6Down=49; int pinSwitch7Up=51; int pinSwitch7Down=50; int pinSwitch8Up=52; int pinSwitch8Down=53; // Setup pin number for centralized switch int pinSwitchCentralizationUp=A14; int pinSwitchCentralizationDown=A15; // set the LCD address to 0x27 for a 16 chars and 4 lines display LiquidCrystal_I2C lcd(0x27, 16, 4); // Switch status boolean sw1Up; boolean sw1Down; boolean sw1UpChange; boolean sw1DownChange; boolean sw2Up; boolean sw2Down; boolean sw2UpChange; boolean sw2DownChange; boolean sw3Up; boolean sw3Down; boolean sw3UpChange; boolean sw3DownChange; boolean sw4Up; boolean sw4Down; boolean sw4UpChange; boolean sw4DownChange; boolean sw5Up; boolean sw5Down; boolean sw5UpChange; boolean sw5DownChange; boolean sw6Up; boolean sw6Down; boolean sw6UpChange; boolean sw6DownChange; boolean sw7Up; boolean sw7Down; boolean sw7UpChange; boolean sw7DownChange; boolean sw8Up; boolean sw8Down; boolean sw8UpChange; boolean sw8DownChange; boolean swCentralizationUp; boolean swCentralizationDown; boolean swCentralizationUpChange; boolean swCentralizationDownChange; // Setup void setup() { // Set ports pinMode(pinSwitchCentralizationUp, INPUT); pinMode(pinSwitchCentralizationDown, INPUT); pinMode(pinShutter1Up, OUTPUT); pinMode(pinShutter1Down, OUTPUT); pinMode(pinSwitch1Up, INPUT); pinMode(pinSwitch1Down, INPUT); pinMode(pinShutter2Up, OUTPUT); pinMode(pinShutter2Down, OUTPUT); pinMode(pinSwitch2Up, INPUT); pinMode(pinSwitch2Down, INPUT); pinMode(pinShutter3Up, OUTPUT); pinMode(pinShutter3Down, OUTPUT); pinMode(pinSwitch3Up, INPUT); pinMode(pinSwitch3Down, INPUT); pinMode(pinShutter4Up, OUTPUT); pinMode(pinShutter4Down, OUTPUT); pinMode(pinSwitch4Up, INPUT); pinMode(pinSwitch4Down, INPUT); pinMode(pinShutter5Up, OUTPUT); pinMode(pinShutter5Down, OUTPUT); pinMode(pinSwitch5Up, INPUT); pinMode(pinSwitch5Down, INPUT); pinMode(pinShutter6Up, OUTPUT); pinMode(pinShutter6Down, OUTPUT); pinMode(pinSwitch6Up, INPUT); pinMode(pinSwitch6Down, INPUT); pinMode(pinShutter7Up, OUTPUT); pinMode(pinShutter7Down, OUTPUT); pinMode(pinSwitch7Up, INPUT); pinMode(pinSwitch7Down, INPUT); pinMode(pinShutter8Up, OUTPUT); pinMode(pinShutter8Down, OUTPUT); pinMode(pinSwitch8Up, INPUT); pinMode(pinSwitch8Down, INPUT); // Set all output to off digitalWrite(pinShutter1Up, LOW); digitalWrite(pinShutter1Down, LOW); digitalWrite(pinShutter2Up, LOW); digitalWrite(pinShutter2Down, LOW); digitalWrite(pinShutter3Up, LOW); digitalWrite(pinShutter3Down, LOW); digitalWrite(pinShutter4Up, LOW); digitalWrite(pinShutter4Down, LOW); digitalWrite(pinShutter5Up, LOW); digitalWrite(pinShutter5Down, LOW); digitalWrite(pinShutter6Up, LOW); digitalWrite(pinShutter6Down, LOW); digitalWrite(pinShutter7Up, LOW); digitalWrite(pinShutter7Down, LOW); digitalWrite(pinShutter8Up, LOW); digitalWrite(pinShutter8Down, LOW); // Init LCD lcd.init(); lcd.backlight(); lcd.clear(); lcd.print("Volet v0.2 111229"); // Default change status initChange(); setUpDown(false); } void setUpDown(boolean b) { sw1Up=b; sw1Down=b; sw2Up=b; sw2Down=b; sw3Up=b; sw3Down=b; sw4Up=b; sw4Down=b; sw5Up=b; sw5Down=b; sw6Up=b; sw6Down=b; sw7Up=b; sw7Down=b; sw8Up=b; sw8Down=b; swCentralizationUp=b; swCentralizationDown=b; } void initChange() { sw1UpChange=digitalRead(pinSwitch1Up); sw1DownChange=digitalRead(pinSwitch1Down); sw2UpChange=digitalRead(pinSwitch2Up); sw2DownChange=digitalRead(pinSwitch2Down); sw3UpChange=digitalRead(pinSwitch3Up); sw3DownChange=digitalRead(pinSwitch3Down); sw4UpChange=digitalRead(pinSwitch4Up); sw4DownChange=digitalRead(pinSwitch4Down); sw5UpChange=digitalRead(pinSwitch5Up); sw5DownChange=digitalRead(pinSwitch5Down); sw6UpChange=digitalRead(pinSwitch6Up); sw6DownChange=digitalRead(pinSwitch6Down); sw7UpChange=digitalRead(pinSwitch7Up); sw7DownChange=digitalRead(pinSwitch7Down); sw8UpChange=digitalRead(pinSwitch8Up); sw8DownChange=digitalRead(pinSwitch8Down); swCentralizationUpChange=digitalRead(pinSwitchCentralizationUp); swCentralizationDownChange=digitalRead(pinSwitchCentralizationDown); } // Task to read the wall switch // Each time the switch status change we record it void readSwitch() { // Switch 1 if (sw1UpChange!=digitalRead(pinSwitch1Up)) { lcd.setCursor(1, 2); lcd.print("Salon Up change"); sw1UpChange=!sw1UpChange; sw1Up=digitalRead(pinSwitch1Up); } if (sw1DownChange!=digitalRead(pinSwitch1Down)) { lcd.setCursor(1, 3); lcd.print("Salon Down change"); sw1DownChange=!sw1DownChange; sw1Down=digitalRead(pinSwitch1Down); } // Switch 2 if (sw2UpChange!=digitalRead(pinSwitch2Up)) { lcd.setCursor(1, 2); lcd.print("Salle de bain Up change"); sw2UpChange=!sw2UpChange; sw2Up=digitalRead(pinSwitch2Up); } if (sw2DownChange!=digitalRead(pinSwitch2Down)) { lcd.setCursor(1, 3); lcd.print("Salle de bain Down change"); sw2DownChange=!sw2DownChange; sw2Down=digitalRead(pinSwitch2Down); } // Switch 3 if (sw3UpChange!=digitalRead(pinSwitch3Up)) { lcd.setCursor(1, 2); lcd.print("Chambre Erine Up change"); sw3UpChange=!sw3UpChange; sw3Up=digitalRead(pinSwitch3Up); } if (sw3DownChange!=digitalRead(pinSwitch3Down)) { lcd.setCursor(1, 3); lcd.print("Chambre Erine Down change"); sw3DownChange=!sw3DownChange; sw3Down=digitalRead(pinSwitch3Down); } // Switch 4 if (sw4UpChange!=digitalRead(pinSwitch4Up)) { sw4UpChange=!sw4UpChange; sw4Up=digitalRead(pinSwitch4Up); } if (sw4DownChange!=digitalRead(pinSwitch4Down)) { sw4DownChange=!sw4DownChange; sw4Down=digitalRead(pinSwitch4Down); } // Switch 5 if (sw5UpChange!=digitalRead(pinSwitch5Up)) { lcd.setCursor(1, 2); lcd.print("Chambre Eva Up change"); sw5UpChange=!sw5UpChange; sw5Up=digitalRead(pinSwitch5Up); } if (sw5DownChange!=digitalRead(pinSwitch5Down)) { lcd.setCursor(1, 3); lcd.print("Chambre Eva Up change"); sw5DownChange=!sw5DownChange; sw5Down=digitalRead(pinSwitch5Down); } // Switch 6 if (sw6UpChange!=digitalRead(pinSwitch6Up)) { lcd.setCursor(1, 2); lcd.print("Chambre parents Up change"); sw6UpChange=!sw6UpChange; sw6Up=digitalRead(pinSwitch6Up); } if (sw6DownChange!=digitalRead(pinSwitch6Down)) { lcd.setCursor(1, 3); lcd.print("Chambre parents Down change"); sw6DownChange=!sw6DownChange; sw6Down=digitalRead(pinSwitch6Down); } // Switch 7 if (sw7UpChange!=digitalRead(pinSwitch7Up)) { lcd.setCursor(1, 2); lcd.print("Salle a manger Up change"); sw7UpChange=!sw7UpChange; sw7Up=digitalRead(pinSwitch7Up); } if (sw7DownChange!=digitalRead(pinSwitch7Down)) { lcd.setCursor(1, 3); lcd.print("Salle a manger Down change"); sw7DownChange=!sw7DownChange; sw7Down=digitalRead(pinSwitch7Down); } // Switch 8 if (sw8UpChange!=digitalRead(pinSwitch8Up)) { lcd.setCursor(1, 2); lcd.print("Cuisine Up change"); sw8UpChange=!sw8UpChange; sw8Up=digitalRead(pinSwitch8Up); } if (sw8DownChange!=digitalRead(pinSwitch8Down)) { lcd.setCursor(1, 3); lcd.print("Cusine Down change"); sw8DownChange=!sw8DownChange; sw8Down=digitalRead(pinSwitch8Down); } // Switch Centralization if (swCentralizationUpChange!=digitalRead(pinSwitchCentralizationUp)) { lcd.setCursor(1, 2); lcd.print("Centralisation Up change"); swCentralizationUpChange=!swCentralizationUpChange; swCentralizationUp=digitalRead(pinSwitchCentralizationUp); } if (swCentralizationDownChange!=digitalRead(pinSwitchCentralizationDown)) { lcd.setCursor(1, 3); lcd.print("Centralisation Down change"); swCentralizationDownChange=!swCentralizationDownChange; swCentralizationDown=digitalRead(pinSwitchCentralizationDown); } } // Task up for the 1st shutter (Salon) void shutter1Up() { // Set the shutter to go up if (sw1Up && !sw1Down) { lcd.setCursor(1, 4); lcd.print("Salon Up"); // Test if shutter is activated to go down if (digitalRead(pinShutter1Down)==HIGH) digitalWrite(pinShutter1Down, LOW); // Shutter up digitalWrite(pinShutter1Up, HIGH); int time=0; while((time