stilenor icon

Day 5 - Creative Day - Using Binary counting to control more lights

stilenor | PRO | 11/03/23 08:41:55 AM UTC | 0 ⭐ | 11523 👁️ | Never ⏰ | [inventr.io]
C++ |

7.51 KB

|

None

|

0 👍

/

0 👎

/*
 * 30 Days - Lost in Space
 * Day 5 - Creative Day - Using Binary to control more lights
 * with the same 3 switches
 * have an "All Lights On" mode to catch any intruders
 *
 * Learn more at https://inventr.io/adventure
 *
Binary counting:
Binary uses only 0's and 1's. Switches have either on or off so we can use them
for Binary counting. 
If a switch is off the number would be 0 and if it's on the number would be 1
As we have 3 switches, Switch 1 = 1, Switch 2 = 2, and Switch 3 = 4
If Switch 1 and Switch 3 are in the on position the count would be 1 + 4 which = 5
 
If there were more switches, binary counting would see it as (if turned on):
Switch 1 = 1
Switch 2 = 2
Switch 3 = 4
Switch 4 = 8
Switch 5 = 16
Switch 6 = 32
Switch 7 = 64
Switch 8 = 128
 
If all were turned on it would be 1+2+4+8+16+32+64+128 which would = 255
 
 */
 
#include "Arduino.h"  // include information about our HERO
 
 
 
const byte ENGINEROOM_LIGHTS_PIN = 7;    // pin controlling the engine room lights
const byte AIRLOCK_LIGHTS_PIN = 8;  // pin controlling the airlock lights
const byte BATHROOM_LIGHTS_PIN = 9;  // pin controlling the bathroom lights
const byte CABIN_LIGHTS_PIN = 10;    // pin controlling the cabin lights
const byte STORAGE_LIGHTS_PIN = 11;  // pin controlling the storage lights
const byte COCKPIT_LIGHTS_PIN = 12;  // pin controlling the exterior lights
int whichlight; //Store for Binary count
 
 
// We will use a different input pin for each of our DIP switches and
// we'll label them using binary state that switch represents.
 
const byte BINARY1_SWITCH_PIN = 2;    // cabin lights controlled by switch 1
const byte BINARY2_SWITCH_PIN = 3;  // storage lights controlled by switch 2
const byte BINARY4_SWITCH_PIN = 4;  // exterior lights controlled by switch 3
 
// the setup function runs once when you press reset or power the board
void setup() {
   Serial.begin(9600);  // Initialize Serial, set speed to 9600 bits/second (baud)
 
  // Configure our LED control pins as OUTPUT pins
  pinMode(ENGINEROOM_LIGHTS_PIN, OUTPUT);    // pin controlling the engine room lights
  pinMode(AIRLOCK_LIGHTS_PIN, OUTPUT);  // pin controlling the airlock lights
  pinMode(BATHROOM_LIGHTS_PIN, OUTPUT);  // pin controlling the bathroom lights
  pinMode(CABIN_LIGHTS_PIN, OUTPUT);    // pin controlling the cabin lights
  pinMode(STORAGE_LIGHTS_PIN, OUTPUT);  // pin controlling the storage lights
  pinMode(COCKPIT_LIGHTS_PIN, OUTPUT);  // pin controlling the exterior lights
 
  // Configure the switch pins as INPUT pins
  pinMode(BINARY1_SWITCH_PIN, INPUT);    // pin connected to switch 1 (Binary count 1)
  pinMode(BINARY2_SWITCH_PIN, INPUT);  // pin connected to switch 2 (Binary count 2)
  pinMode(BINARY4_SWITCH_PIN, INPUT);  // pin connected to switch 3 (Binary count 4)
}
 
// Each time through loop() we will check each switch in turn and set each light's
// state appropriately.
void loop() {
whichlight = 0;
// using individual if statements, aware there are other methods but this was simple and 
// easy to read
if (digitalRead(BINARY1_SWITCH_PIN) == HIGH){
  whichlight = whichlight + 1;
}
if (digitalRead(BINARY2_SWITCH_PIN) == HIGH){
  whichlight = whichlight + 2;
}
if (digitalRead(BINARY4_SWITCH_PIN) == HIGH){
  whichlight = whichlight + 4;
}
 
// individual if statements again, switchcase would have probably been better here
// but it's still easy to read
if (whichlight == 0) {
  digitalWrite(ENGINEROOM_LIGHTS_PIN, LOW);  // Engine Room lights off
  digitalWrite(AIRLOCK_LIGHTS_PIN, LOW);  // Airlock lights off
  digitalWrite(BATHROOM_LIGHTS_PIN, LOW);  // Bathroom lights off
  digitalWrite(CABIN_LIGHTS_PIN, LOW);  // Cabin lights off
  digitalWrite(STORAGE_LIGHTS_PIN, LOW);  // Storage lights off
  digitalWrite(COCKPIT_LIGHTS_PIN, LOW);  // Cockpit lights off
  Serial.print(whichlight);  // show whichlight value
  Serial.println(", All Lights Off");
}
if (whichlight == 1) {
  digitalWrite(ENGINEROOM_LIGHTS_PIN, HIGH);  // Engine Room lights on
  digitalWrite(AIRLOCK_LIGHTS_PIN, LOW);  // Airlock lights off
  digitalWrite(BATHROOM_LIGHTS_PIN, LOW);  // Bathroom lights off
  digitalWrite(CABIN_LIGHTS_PIN, LOW);  // Cabin lights off
  digitalWrite(STORAGE_LIGHTS_PIN, LOW);  // Storage lights off
  digitalWrite(COCKPIT_LIGHTS_PIN, LOW);  // Cockpit lights off
  Serial.print(whichlight);  // show whichlight value
  Serial.println(", Engine Room Lights On");
}
if (whichlight == 2) {
  digitalWrite(ENGINEROOM_LIGHTS_PIN, LOW);  // Engine Room lights off
  digitalWrite(AIRLOCK_LIGHTS_PIN, HIGH);  // Airlock lights on
  digitalWrite(BATHROOM_LIGHTS_PIN, LOW);  // Bathroom lights off
  digitalWrite(CABIN_LIGHTS_PIN, LOW);  // Cabin lights off
  digitalWrite(STORAGE_LIGHTS_PIN, LOW);  // Storage lights off
  digitalWrite(COCKPIT_LIGHTS_PIN, LOW);  // Cockpit lights off
  Serial.print(whichlight);  // show whichlight value
  Serial.println(", Airlock Lights On");
}
if (whichlight == 3) {
  digitalWrite(ENGINEROOM_LIGHTS_PIN, LOW);  // Engine Room lights off
  digitalWrite(AIRLOCK_LIGHTS_PIN, LOW);  // Airlock lights off
  digitalWrite(BATHROOM_LIGHTS_PIN, HIGH);  // Bathroom lights on
  digitalWrite(CABIN_LIGHTS_PIN, LOW);  // Cabin lights off
  digitalWrite(STORAGE_LIGHTS_PIN, LOW);  // Storage lights off
  digitalWrite(COCKPIT_LIGHTS_PIN, LOW);  // Cockpit lights off
  Serial.print(whichlight);  // show whichlight value
  Serial.println(", Bathroom Lights Lights On");
}
if (whichlight == 4) {
  digitalWrite(ENGINEROOM_LIGHTS_PIN, LOW);  // Engine Room lights off
  digitalWrite(AIRLOCK_LIGHTS_PIN, LOW);  // Airlock lights off
  digitalWrite(BATHROOM_LIGHTS_PIN, LOW);  // Bathroom lights off
  digitalWrite(CABIN_LIGHTS_PIN, HIGH);  // Cabin lights on
  digitalWrite(STORAGE_LIGHTS_PIN, LOW);  // Storage lights off
  digitalWrite(COCKPIT_LIGHTS_PIN, LOW);  // Cockpit lights off
  Serial.print(whichlight);  // show whichlight value
  Serial.println(", Cabin Lights On");
}
if (whichlight == 5) {
  digitalWrite(ENGINEROOM_LIGHTS_PIN, LOW);  // Engine Room lights off
  digitalWrite(AIRLOCK_LIGHTS_PIN, LOW);  // Airlock lights off
  digitalWrite(BATHROOM_LIGHTS_PIN, LOW);  // Bathroom lights off
  digitalWrite(CABIN_LIGHTS_PIN, LOW);  // Cabin lights off
  digitalWrite(STORAGE_LIGHTS_PIN, HIGH);  // Storage lights on
  digitalWrite(COCKPIT_LIGHTS_PIN, LOW);  // Cockpit lights off
  Serial.print(whichlight);  // show whichlight value
  Serial.println(", Storage Lights On");
}
if (whichlight == 6) {
  digitalWrite(ENGINEROOM_LIGHTS_PIN, LOW);  // Engine Room lights off
  digitalWrite(AIRLOCK_LIGHTS_PIN, LOW);  // Airlock lights off
  digitalWrite(BATHROOM_LIGHTS_PIN, LOW);  // Bathroom lights off
  digitalWrite(CABIN_LIGHTS_PIN, LOW);  // Cabin lights off
  digitalWrite(STORAGE_LIGHTS_PIN, LOW);  // Storage lights off
  digitalWrite(COCKPIT_LIGHTS_PIN, HIGH);  // Cockpit lights on
  Serial.print(whichlight);  // show whichlight value
  Serial.println(", Cockpit Lights On");
}
if (whichlight == 7) { //had a spare result so decided to make it the opposite of all off (binary 0)
  digitalWrite(ENGINEROOM_LIGHTS_PIN, HIGH);  // Engine Room lights on
  digitalWrite(AIRLOCK_LIGHTS_PIN, HIGH);  // Airlock lights on
  digitalWrite(BATHROOM_LIGHTS_PIN, HIGH);  // Bathroom lights on
  digitalWrite(CABIN_LIGHTS_PIN, HIGH);  // Cabin lights on
  digitalWrite(STORAGE_LIGHTS_PIN, HIGH);  // Storage lights on
  digitalWrite(COCKPIT_LIGHTS_PIN, HIGH);  // Cockpit lights on
  Serial.print(whichlight);  // show whichlight value
  Serial.println(", All Lights On");
}
 
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎