Before we put in the first lines of
code we need to do a little more planing. Let's have a look at what
our room management system is supposed to do.
Generally speaking, the system is
supposed to control two light circuits. One circuit which is switched
on through PIR's independently for every single room and switched off
by the RMS after a preprogrammed time delay. The second circuit is
controlling all the other little lights which are still switched
manually like bed side lights, the lights behind the TV, the lights
in the wardrobe etc.. This part of the RMS activates only the
circuit and provides the ability to switch this lights on and
switches off the circuit if the main door was opened and no more
presence is sensed in the apartment.
The 3. part is controlling the
AC-units. It will activate the circuit soon as human presence is
sensed and provides the ability to switch on the units. Individual
units will switch off soon as a window or balcony door is opened for
more than a preprogrammed time. All units will switch off with the
master relay when the door was opened and no more human presence is
sensed in the apartment.
For bedrooms we nee to take in account
that we do not want the lights to switch on in the night while
asleep. Therefore we need to install a switch (push button) to tell
the system not to switch the lights on until it is pressed again to
cancel the priority. The same I would like in the living area. I
personally like to watch a movie with just a little background light
behind the TV without all the bright main light switched on.
Another thing we need to consider is
that we might not want the main light to switch on during bright
daylight.
Lets take it step by step:
We start with finding the part in the
main loop of our input code where is says “///////Loop through the
8 input pins to check there status///”. From there we go down a
little more the first status check “if(switchVar1 & (1))
//checking S1”.
Found it? - Great, cause now we start
assigning the switches to the rooms, sensors and push buttons.
S1 will be for our PIR' in Bedroom 1
and we write this behind the commented part //checking S1 PIR bed 1
S2 will be for push button as priority
switch for bedroom 1 and we add to the commented part //checking S2
priority bed 1
This goes for all the statements where
we are checking the switch state. Here the additions for the rest of
the switches:
S3 //checking S3 PIR bed 2
S4 //checking S4 priority switch bed 2
S5 //checking S5 PIR bed 3
S6 //checking S6 priority switch bed 3
S7 //checking S7 PIR living
S8 //checking S8 priority switch living
S9 //checking S9 bathroom 1
S10 //checking S10 bathroom 2
S11 //checking S11 bathroom 3
S12 //checking S12 bathroom 4
S13 //checking S13 kitchen
S14 //checking S14 corridor
S15 //checking S15 read switch (NC) AC
bed 1
S16 //checking S16 read switch (NC) AC
bed 2
S17 //checking S17 read switch (NC) AC
bed 3
S18 //checking S18 read switch (NC) AC
bed 4
S19 //checking S19 read switch (NC)
main door
Ooops, we are missing one switch.
Quickly looking through my notes, when I was doing the first planing,
I did not account for the priority switch in the living area. No
problem. We have a quick look at our breadboards. We need to add
another switch to the top of our row of switches and connect one pin
wit the 5V supply bus and the other pin with the parallel input 3
(pin 5) of our input shift register 3 (CD4021B).
S 19 IMG
Now we have to find the end of main
loop:
if(switchVar3 & (1 <<
1)) { //checking S18 read switch (NC)
AC bed 4
Serial.println(“Switch 18
was activated”); //debug only
switchState[17] = 1;
}
else {
switchState[17] = 0;
}
}
}
and add another switch statement:
if(switchVar3 & (1 << 2))
{ //checking S19 read switch (NC)
main door
Serial.println(“Switch 19
was activated”); //debug only
switchState[18] = 1;
}
else {
switchState[18] = 0;
}
The end of our main loop looks like
that after the addition:
if(switchVar3 & (1 <<
1)) { //checking S18 read switch (NC)
//AC bed 4
Serial.println(“Switch 18
was activated”); //debug only
switchState[17] = 1;
}
else {
switchState[17] = 0;
}
if(switchVar3 & (1 << 2))
{ //checking S19 read switch (NC)
//main door
Serial.println(“Switch 19
was activated”); //debug only
switchState[18] = 1;
}
else {
switchState[18] = 0;
}
}
}
Everything set? Lets switch on the
lights in the first bedroom if the PIR is activated.
We start where we just entered the
additional part of the input code:
if(switchVar3 & (1 << 2))
{ //checking S19 read switch (NC)
//main door
Serial.println(“Switch 19
was activated”); //debug only
switchState[18] = 1;
}
else {
switchState[18] = 0;
}
}
//>>>>>>That's our
entry point. From here we carry on
//////////////////////////////////Processing the
Input////////////////////////////////////////
if(switchState[1] == 0) {
//checking if S2
priority off was
//set bed 1
if(switchState[0] == 1 &&
priorityStatus[0] == 0) { //check if the PIR in bed 1
was
//activated and no priority was set
Serial.println(“We switch in
the lights in bedroom 1”); //Debug only
lightOutput[0] = 1;
//switching on
the lights – binary
//000000000000000000000001
lightStatus[0] = 1;
//setting the
light status for bed 1
roomTimer[0] = millis();
//setting the timer
}
else if(switchState[0] == 0 &&
lightStatus[0] == 1) { //the PIR not activated but the
//lights are on
Serial.println('We are
checking the timer”); //Debug only
currentTime = millis();
//setting time
reference
endTime = currentTime –
roomTimer[0]; //calculating the inactive
time
if(endTime >= delayTime[0])
{ //comparing inactive
time with
//allowed delay time
Serial.println(“Time is
up switching off the lights”); //Debug only
lightOutput[0] = 0;
//switching off
the lights
lightStatus[0] = 0;
//resetting the
light status
roomTimer[0] = 0;
//resetting the
room timer
}
}
}
else if(switchState[1] == 1 &&
lightStatus[0] == 1) { //if priority is activated and
the
//lights are on
Serial.println(“Priority switch
activated switching off the lights”); //Debug only
lightOutput[0] = 0;
//switching off
the lights
lightStatus[0] = 0;
//resetting the
light status
roomTimer[0] = 0;
//resetting the
room timer
priorityStatus[0] = 1;
//setting the
priority status bed 1
}
else if(switchState[1] == 0 &&
lightStatus[0] == 0) { //if priority was activated and
the
//lights are off
Serial.println(“Priority switch
deactivated switching on the lights”); //Debug only
lightOutput[0] =1;
//switching on the
lights
lightStatus[0] = 1;
//setting the
light status
roomTimer[0] = millis();
//setting the room
timer
priorityStatus[0] = 0;
//setting the
priority for bed 1 back
//to 0
}
}
That's what we need to have the lights
switched on in the first room (bed 1). But before we start testing,
we have to put in a few more variables which we have to declare in
the beginning of our script.
Let's go back to the part, where our
variables are declared:
////////////////////////////////////Declaring
the Variables//////////////////////////////////////////////////
//we start adding here
>>>>>>>>>>>>>>>>>>>>>>>
long int dBed1 = 60000;
//delay time in milliseconds for bedroom 1
long int dBed2 = 60000;
//delay time in milliseconds for bedroom 2
long int dBed3 = 60000;
//delay time in milliseconds for bedroom 3
long int dLiving = 120000;
//delay time in milliseconds for living area
long int dBath1 = 180000;
//delay time in milliseconds for bathroom 1
long int dBath2 = 180000;
//delay time in milliseconds for bathroom 2
long int dBath3 = 180000;
//delay time in milliseconds for bathroom 3
long int dBath4 = 180000;
//delay time in milliseconds for bathroom 4
long int dKitchen = 120000;
//delay time in milliseconds for kitchen
long int dCorridor = 60000;
//delay time in milliseconds for corridor
long int dAC1 = 120000;
//delay time in milliseconds for AC 1 (bed1)
long int dAC2 = 120000;
//delay time in milliseconds for AC 2 (bed2)
long int dAC3 = 120000;
//delay time in milliseconds for AC 3 (bed3)
long int dAC4 = 120000;
//delay time in milliseconds for AC 4 (living)
long int dMaster = 240000;
//delay time in milliseconds for Master Off
//////////////////////////////DO NOT
MODIFY BELOW THIS LINE //////////////////////////////
////////////////////////////////////defining
Arduino Pins///////////////////////////////////////////////////
const int latchPin = 2; //latchPin
connected to Arduino digital pin 2
const int clockPin = 3; //clockPin
connected to Arduino digital pin 3
const int dataPin = 4; //dataPin
connected to Arduino digital pin 4
const int latchPinOut = 5; //latch
Pin output shift register 74HC595 connect to Arduino digital
//pin 5
const int clockPinOut = 6; //clock
pin output shift register 74HC595 connect to Arduino digital
//pin 6
const int dataPinOut = 7; //data
pin output shift register 74HC595 connect to Arduino digital pin
//7
/////////////////Variables to hold the
data for each shift register///////////////////////////////
byte switchVar1 = 0; //Data for
input shift register 1
byte switchVar2 = 0; //Data for input
shift register 2
byte switchVar3 = 0; //Data for input
shift register 3
/////////////////////////////////all
the other
variables///////////////////////////////////////////////////
unsigned long delayTime[16] = {dBed1,
dBed2, dBed3, dLiving, dBath1, dBath2, dBath3,
dBath4, dKitchen, dCorridor, dAC1, dAC2, dAC3, dAC4,
dMaster, 0};
unsigned int switchState[25] = {0};
//array holding the state of each switch
unsigned long lightOutput[17] = {0};
//array holding a integer which converted to binary
//will trigger the relay to switch in
our output code
unsigned int lightStatus[17] = {0};
//array holding the switch status of each room on/off
unsigned long roomTimer[17] = {0};
//array holding the time when the PIR was last activated
unsigned int priorityStatus[17] = {0};
//array holding the priority status of each room on/off
unsigned long currentTime = 0;
//var to hold a reference time to calculate the up time
//against the preprogrammed delay time
unsigned long endTime = 0;
//var to hold a temp result to calculate the up time
//against the preprogrammed delay time
void setup() {
//////////////////////////////////Start Serial for
Debugging////////////////////////////////////////
Serial.beginn(9600);
////////////////////////////////////////defining pin
modes////////////////////////////////////////////
pinMode(latchPin,
OUTPUT); //setting the latch pin to output
pinMode(clockPin,
OUTPUT); //setting the clock pin to output
pinMode(dataPin, INPUT); //setting
the data pin to input
pinMode(latchPinOut, OUTPUT);
//setting the latch pin (74HC595) to output
pinMode(clockPinOut, OUTPUT);
//setting the clock pin (74HC595) to output
pinMode(dataPinOut, INPUT);
//setting the data pin (74HC595) to input
}
First I changed the pin assignments of
the input shift registers as follows
int latchPin = 2; to
const int latchPin = 2;
int clockPin = 3; to
const int clockPin = 3;
int dataPin = 4; to
const int dataPin = 4;
Next I have added the pin assignments
for the output shift register:
const int latchPinOut = 5;
const int clockPinOut = 6;
const int dataPinOut = 7;
After that we move down to:
///////////////////////////////all the
other variables////////////////////////////////////////////
and add the following lines:
unsigned long lightOutput[17] = {0};
//array holding a integer which converted to binary
//will trigger the relay to switch in
our output code
unsigned int lightStatus[17] = {0};
//array holding the switch status of each room on/off
unsigned long roomTimer[17] = {0};
//array holding the time when the PIR was last activated
unsigned int priorityStatus[17] = {0};
//array holding the priority status of each room on/off
unsigned long currentTime = 0;
//var to hold a reference time to calculate the up time
//against the preprogrammed delay time
unsigned long endTime = 0;
//var to hold a temp result to calculate the up time
//against the preprogrammed delay time
From here we move on to the setup loop
and add the following lines:
pinMode(latchPinOut, OUTPUT);
//setting the latch pin (74HC595) to output
pinMode(clockPinOut, OUTPUT);
//setting the clock pin (74HC595) to output
pinMode(dataPinOut, INPUT);
//setting the data pin (74HC595) to input
Last for today we jump back up to the
beginning of our variable declaration and add:
long int dBed1 = 60000;
//delay time in milliseconds for bedroom 1
long int dBed2 = 60000;
//delay time in milliseconds for bedroom 2
long int dBed3 = 60000;
//delay time in milliseconds for bedroom 3
long int dLiving = 120000;
//delay time in milliseconds for living area
long int dBath1 = 180000;
//delay time in milliseconds for bathroom 1
long int dBath2 = 180000;
//delay time in milliseconds for bathroom 2
long int dBath3 = 180000;
//delay time in milliseconds for bathroom 3
long int dBath4 = 180000;
//delay time in milliseconds for bathroom 4
long int dKitchen = 120000;
//delay time in milliseconds for kitchen
long int dCorridor = 60000;
//delay time in milliseconds for corridor
long int dAC1 = 120000;
//delay time in milliseconds for AC 1 (bed1)
long int dAC2 = 120000;
//delay time in milliseconds for AC 2 (bed2)
long int dAC3 = 120000;
//delay time in milliseconds for AC 3 (bed3)
long int dAC4 = 120000;
//delay time in milliseconds for AC 4 (living)
long int dMaster = 240000;
//delay time in milliseconds for Master Off
////////////////////////////DO NOT
MODIVY BELOW HERE///////////////////////////////////////
keep moving down to:
/////////////////////////////////all
the other
variables///////////////////////////////////////////////////
unsigned long delayTime[16] = {dBed1,
dBed2, dBed3, dLiving, dBath1, dBath2, dBath3,
dBath4, dKitchen, dCorridor, dAC1, dAC2, dAC3, dAC4,
dMaster, 0};
Most of the added statements and
variables are more or less explaining itself. However, a couple of
things do need to be looked into. I changed the status of the pin
assignments from a variable to a constant by adding “const” to
the statements. The next variable which needs a little more
explanation is the lightOutput[] array. I have assigned a 1 to
lightOutput[0] for room 1 (bed1) to switch on the lights and a 0 to
switch them back off. The next room (bed2) will have a 2 assigned to
lightOutput[1] to switch on the lights and again the 0 to switch them
off. The third room will switch on with 4 and room number 4 switches
on with 8.
With two shift registers in the output
stage we are having a 16 bit output. Lets have a quick look again at
binary numbers:
1 in a 16 bit binary will convert to
0000000000000001
2 in a 16 bit binary will convert to
0000000000000010
4 in a 16 bit binary will convert to
0000000000000100
8 in a 16 bit binary will convert to
0000000000001000
16 in a 16 bit binary will convert to
0000000000010000
32 in a 16 bit binary will convert to
0000000000100000
64 in a 16 bit binary will convert to
0000000001000000
and so on......
Our output shift register will activate
the output pin according to the bit being set to 1. If we want
multiple rooms switched on we have to send a number which converts to
a binary corresponding to
to the bits set to 1 where we want to
switch on the lights. If we want to switch on the lights in room 1
and room 3 we need to send the number 5 which converts to
0000000000000101. If we want to switch on the lights in the rooms 3,
4 and 7 we need to send the number 76 which will convert to a binary
of 0000000001001100.
The last thing I have added today are
our Time delay variables, holding the times after which the lights
are to switch off if no more human presence is sensed in a room. The
AC is set to switch off if a balcony door or a window is opened for
more than 2 minutes.
I have declared separate variables and
put them right in the beginning of the code to make changes easier at
a later state without going through the whole code to find again
where to change a particular timer. For easier coding the delay times
have been put again in an array.
Here again the complete code to what we
have done so far checked and debugged copied back direct from the
Arduino IDE. If you just copy and past the code please be careful in
some formating issues. You might end up with a lot of “stray'/'”
warnings. The bug is in the Serial.print statements because the '”'
formates differently in some editors.
/////////////////////Declaring the
Variables/////////////////
///////////Timer and Sensitivity
Settings to be changed to individual needs////////////////
long int dBed1 = 60000;
//delay time in milliseconds for bedroom 1
long int dBed2 = 60000;
//delay time in milliseconds for bedroom 2
long int dBed3 = 60000;
//delay time in milliseconds for bedroom 3
long int dLiving = 120000;
//delay time in milliseconds for living area
long int dBath1 = 180000;
//delay time in milliseconds for bathroom 1
long int dBath2 = 180000;
//delay time in milliseconds for bathroom 2
long int dBath3 = 180000;
//delay time in milliseconds for bathroom 3
long int dBath4 = 180000;
//delay time in milliseconds for bathroom 4
long int dKitchen = 120000;
//delay time in milliseconds for kitchen
long int dCorridor = 60000;
//delay time in milliseconds for corridor
long int dAC1 = 120000;
//delay time in milliseconds for AC 1 (bed1)
long int dAC2 = 120000;
//delay time in milliseconds for AC 2 (bed2)
long int dAC3 = 120000;
//delay time in milliseconds for AC 3 (bed3)
long int dAC4 = 120000;
//delay time in milliseconds for AC 4 (living)
long int dMaster = 240000;
//delay time in milliseconds for Master Off
////////////////////////////DO NOT
MODIVY BELOW HERE///////////////////////////////////////
//////////defining Arduino
Pins/////////////////
const int latchPin = 2; //latch
pin input connected to
//Arduino digital pin 2
const int clockPin = 3; //clock
pin input connected to
//Arduino digital pin 3
const int dataPin = 4; //data
pin input connected to
//Arduino digital pin 4
const int latchPinOut = 5; //latch
pin output shift register
//74HC595 connected to Arduino
//digital pin 5
const int clockPinOut = 6; //clock
pin output shift register
//74HC595 connected to Arduino
//digital pin 6
const int dataPinOut = 7; //data
pin output shift register
//74HC595 connected to Arduino
//digital pin 7
//////////Variables to hold the data
for each shift register//////////
byte switchVar1 = 0; //data
for input shift register 1
byte switchVar2 = 0; //data
for input shift register 2
byte switchVar3 = 0; //data
for input shift register 3
////////////////all the other
variables///////////////////////////
unsigned long delayTime[16] = {dBed1,
dBed2, dBed3, dLiving, dBath1, dBath2, dBath3,
dBath4,
dKitchen, dCorridor, dAC1, dAC2, dAC3, dAC4,
dMaster,
0};
unsigned int switchState[25] = {0};
//array holding the state of each switch
unsigned long lightOutput[17] = {0};
//array holding a integer which converted to binary
//will trigger the relay to switch in our output code
unsigned int lightStatus[17] = {0};
//array holding the switch status of each room on/off
unsigned long roomTimer[17] = {0};
//array holding the time when the PIR was last activated
unsigned int priorityStatus[17] = {0};
//array holding the priority status of each room on/off
unsigned long currentTime = 0;
//var to hold a reference time to calculate the up time
//against the preprogrammed delay time
unsigned long endTime = 0;
//var to hold a temp result to calculate the up time
//against the preprogrammed delay time
void setup() {
//////////////Start Serial for
Debugging/////////////////////
Serial.begin(9600);
//////////////////defining pin
modes////////////////////
pinMode(latchPin,
OUTPUT); //setting the latch pin to output
pinMode(clockPin,
OUTPUT); //setting the clock pin to output
pinMode(dataPin, INPUT); //setting
the data pin to input
}
void loop() {
//////////////////////////////////////getting the
input//////////////////////////////////////////////////
//pulse the latch pin, set to high
to collect serial data
digitalWrite(latchPin, HIGH);
//give it chance to collect the data
delayMicroseconds(20);
//set latch pin to low to transmit
data serially
digitalWrite(latchPin, LOW);
//while in serial mode, collect data
into a byte
switchVar1 = shiftIn(dataPin,
clockPin);
switchVar2 = shiftIn(dataPin,
clockPin);
switchVar3 = shiftIn(dataPin,
clockPin);
/////////////do something with the
collected Data/////////////////////
//checks for debugging
Serial.println();
//debug only
Serial.print("Switch variable
1: "); //debug only
Serial.println(switchVar1, BIN);
//debug only
Serial.println("-------------------"); //debug only
Serial.println();
//debug only
Serial.print("Switch variable
2: "); //debug only
Serial.println(switchVar2, BIN);
//debug only
Serial.println("-------------------"); //debug only
Serial.println();
//debug only
Serial.print("Switch variable
3: "); //debug only
Serial.println(switchVar3, BIN);
//debug only
Serial.println("-------------------"); //debug only
////////////loop through the 8 input
pins to check their status////////////
for(int n=0; n<=7; n++){
//shift register 1
if(switchVar1 & (1)) {
//checking S1
Serial.println("Switch 1
was activated."); //debug only
switchState[0] = 1;
}
else {
switchState[0] = 0;
}
if(switchVar1 & (1 <<
1)) { //checking S2
Serial.println("Switch 2
was activated."); //debug only
switchState[1] = 1;
}
else {
switchState[1] = 0;
}
if(switchVar1 & (1 <<
2)) { //checking S3
Serial.println("Switch 3
was activated."); //debug only
switchState[2] = 1;
}
else {
switchState[2] = 0;
}
if(switchVar1 & (1 <<
3)) { //checking S4
Serial.println("Switch 4
was activated."); //debug only
switchState[3] = 1;
}
else {
switchState[3] = 0;
}
if(switchVar1 & (1 <<
4)) { //checking S8
Serial.println("Switch 8
was activated."); //debug only
switchState[7] = 1;
}
else {
switchState[7] = 0;
}
if(switchVar1 & (1 <<
5)) { //checking S7
Serial.println("Switch 7
was activated."); //debug only
switchState[6] = 1;
}
else {
switchState[6] = 0;
}
if(switchVar1 & (1 <<
6)) { //checking S6
Serial.println("Switch 6
was activated."); //debug only
switchState[5] = 1;
}
else {
switchState[5] = 0;
}
if(switchVar1 & (1 <<
7)) { //checking S5
Serial.println("Switch 1
was activated."); //debug only
switchState[4] = 1;
}
else {
switchState[4] = 0;
}
//shift register 2
if(switchVar2 & (1)) {
//checking S9
Serial.println("Switch 9
was activated."); //debug only
switchState[8] = 1;
}
else {
switchState[8] = 0;
}
if(switchVar2 & (1 <<
1)) { //checking S10
Serial.println("Switch 10
was activated."); //debug only
switchState[9] = 1;
}
else {
switchState[9] = 0;
}
if(switchVar2 & (1 <<
2)) { //checking S11
Serial.println("Switch 11
was activated."); //debug only
switchState[10] = 1;
}
else {
switchState[10] = 0;
}
if(switchVar2 & (1 <<
3)) { //checking S12
Serial.println("Switch 12
was activated."); //debug only
switchState[11] = 1;
}
else {
switchState[11] = 0;
}
if(switchVar2 & (1 <<
4)) { //checking S16
Serial.println("Switch 16
was activated."); //debug only
switchState[15] = 1;
}
else {
switchState[15] = 0;
}
if(switchVar2 & (1 <<
5)) { //checking S15
Serial.println("Switch 15
was activated."); //debug only
switchState[14] = 1;
}
else {
switchState[14] = 0;
}
if(switchVar2 & (1 <<
6)) { //checking S14
Serial.println("Switch 14
was activated."); //debug only
switchState[13] = 1;
}
else {
switchState[13] = 0;
}
if(switchVar1 & (1 <<
7)) { //checking S13
Serial.println("Switch 13
was activated."); //debug only
switchState[12] = 1;
}
else {
switchState[12] = 0;
}
//shift register 3
if(switchVar3 & (1)) {
//checking S17
Serial.println("Switch 17
was activated."); //debug only
switchState[16] = 1;
}
else {
switchState[16] = 0;
}
if(switchVar3 & (1 <<
1)) { //checking S18
Serial.println("Switch 18
was activated."); //debug only
switchState[17] = 1;
}
else {
switchState[17] = 0;
}
if(switchVar3 & (1 <<
2)) { //checking S19
Serial.println("Switch 19
was activated."); //debug only
switchState[18] = 1;
}
else {
switchState[18] = 0;
}
}
//////////////////processing the
input/////////////////////
if(switchState[1] == 0) {
//checking if S2 priority off was
//set bed 1
if(switchState[0] == 1 &&
priorityStatus[0] == 0) { //check if the PIR in bed 1 was
//activated and no priority was set
Serial.println("We switch
in the lights in bedroom 1"); //Debug only
lightOutput[0] = 1;
//switching on the lights – binary
//000000000000000000000001
lightStatus[0] = 1;
//setting the light status for bed 1
roomTimer[0] = millis();
//setting the timer
}
else if(switchState[0] == 0 &&
lightStatus[0] == 1) { //the PIR not activated but the
//lights are on
Serial.println("We are
checking the timer"); //Debug only
currentTime = millis();
//setting time reference
endTime = currentTime -
roomTimer[0]; //calculating the inactive time
if(endTime >= delayTime[0])
{ //comparing inactive time with
//allowed delay time
Serial.println("Time
is up switching off the lights"); //Debug only
lightOutput[0] = 0;
//switching off the lights
lightStatus[0] = 0;
//resetting the light status
roomTimer[0] = 0;
//resetting the room timer
}
}
}
else if(switchState[1] == 1 &&
lightStatus[0] == 1) { //if priority is activated and the
//lights are on
Serial.println("Priority
switch activated switching off the lights"); //Debug only
lightOutput[0] = 0;
//switching off the lights
lightStatus[0] = 0;
//resetting the light status
roomTimer[0] = 0;
//resetting the room timer
priorityStatus[0] = 1;
//setting the priority status bed 1
}
else if(switchState[1] == 0 &&
lightStatus[0] == 0) { //if priority was activated and the
//lights are off
Serial.println("Priority
switch deactivated switching on the lights"); //Debug only
lightOutput[0] =1;
//switching on the lights
lightStatus[0] = 1;
//setting the light status
roomTimer[0] = millis();
//setting the room timer
priorityStatus[0] = 0;
//setting the priority for bed 1 back
//to 0
}
}
///////////////////shiftIn function to
get the input data////////////////////////////////////
byte shiftIn(int myDataPin, int
myClockPin) {
//////////////////declaring some
varables///////////////
int i;
//counter
int temp = 0;
//var to hold the raw input data
int pinState;
//var holding the state of the pin
byte myDataIn = 0;
//var holding the complete incoming data
/////////////////setting the pin
modes///////////////////
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, INPUT);
///////////////////// loop through
the single input pins////////////
for(i=0; i>7; i--) {
digitalWrite(myClockPin, LOW);
//setting the clock pin low to trigger the output
delayMicroseconds(2);
//give it chance to send the data
temp = digitalRead(myDataPin);
//check if the pin was set (switch was pressed)
if(temp) {
//if the pin was set
pinState = 1;
//we set the pin state to 1 accordingly
myDataIn = myDataIn | (1 <<
i); //setting the state in our binary output
}
else {
pinState = 0;
//if the pin was not set, the pin state stays 0
}
Serial.print("PinState: ");
//debug only
Serial.print(pinState);
//debug only
Serial.print(" ");
//debug only
Serial.println(myDataIn, BIN);
//debug only
digitalWrite(myClockPin, HIGH);
//setting the clock pin high
}
Serial.println();
//debug only
Serial.println(myDataIn, BIN);
//debug only
return myDataIn;
//after looping through all the input pins returning the
//collected input data to the main programm
}
No comments:
Post a Comment