Commit 5b36dc4e authored by Eric Duminil's avatar Eric Duminil
Browse files

Binary clock

parent fc87b9eb
...@@ -15,22 +15,17 @@ ...@@ -15,22 +15,17 @@
// Required libraries: // Required libraries:
// LED Ring: // LED Ring:
#include "src/lib/Adafruit_NeoPixel/Adafruit_NeoPixel.h" #include "src/lib/Adafruit_NeoPixel/Adafruit_NeoPixel.h"
// CO2 sensor:
#include "src/lib/SparkFun_SCD30_Arduino_Library/src/SparkFun_SCD30_Arduino_Library.h"
#include <Wire.h>
// How many LEDs on the ring? // How many LEDs on the ring?
const int LED_COUNT = 12; const int LED_COUNT = 16;
// Where is LED ring connected to micro-controller? // Where is LED ring connected to micro-controller?
const int NEOPIXELS_PIN = 5; const int NEOPIXELS_PIN = 5;
// Define LED ring and CO2 sensor // Define LED ring and CO2 sensor
Adafruit_NeoPixel led_ring(LED_COUNT, NEOPIXELS_PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel led_ring(LED_COUNT, NEOPIXELS_PIN, NEO_GRB + NEO_KHZ800);
SCD30 sensor;
// Define variables // Define variables
int which_led; uint32_t n;
uint16_t co2;
// The code in setup() will be run once, at startup. // The code in setup() will be run once, at startup.
void setup() { void setup() {
...@@ -41,46 +36,26 @@ void setup() { ...@@ -41,46 +36,26 @@ void setup() {
led_ring.begin(); led_ring.begin();
led_ring.setBrightness(255); led_ring.setBrightness(255);
// Initialize sensor (should be connected to D6 & D5), without auto-calibration.
Wire.begin(12, 14);
sensor.begin(false);
// One measurement every 10s
sensor.setMeasurementInterval(10);
} }
// The code in loop() will be run as long as the micro-controller is powered up, in an infinite loop. // The code in loop() will be run as long as the micro-controller is powered up, in an infinite loop.
void loop() { void loop() {
if (sensor.dataAvailable()) {
// New measurement is available. Let's display it!
co2 = sensor.getCO2();
Serial.print("CO2 : ");
Serial.print(co2);
Serial.println(" ppm.");
}
// Light the next LED
which_led = which_led + 1;
// Come back to first LED if needed.
if (which_led >= LED_COUNT) {
which_led = 0;
}
// First, disable every LED // First, disable every LED
led_ring.clear(); led_ring.clear();
// Check if air is good enough // Check if air is good enough
if (co2 <= 1000) { for (int i = 0; i < LED_COUNT; ++i) {
// Light the LED green if CO2 ppm is low if ((n >> i) & 1) {
// position, red, green, blue led_ring.setPixelColor(i, 0, 255, 0);
led_ring.setPixelColor(which_led, 0, 255, 0); // led_ring.setPixelColor(i, led_ring.ColorHSV(i * 65535 / 16));
} else { }
// Red otherwise.
// position, red, green, blue
led_ring.setPixelColor(which_led, 255, 0, 0);
} }
Serial.print(n);
Serial.print(" = ");
Serial.println(n, BIN);
led_ring.show(); led_ring.show();
n = n + 1;
// Wait half a second before next loop. // Wait half a second before next loop.
// Micro-controller might crash if it has too much work to do. Please don't remove it! // Micro-controller might crash if it has too much work to do. Please don't remove it!
delay(500); delay(1000);
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment