Adafruit – Breadboard-Friendly RGB Smart NeoPixel

Adafruit 1312 Mk01

Adafruit 1312 Mk02

Adafruit 1312 Mk03

Adafruit 1312 Mk04

Adafruit: 1312

Description

This is the easiest way possible to add small, bright RGB pixels to your project. We took the same technology from our Flora NeoPixels and made them breadboard friendly, with two rows of 3 x 0.1″ spaced header on each side for easy soldering, chaining and breadboarding. These ultra-bright LEDs have a constant-current driver cooked right into the LED package! The pixels are chainable – so you only need 1 pin/wire to control as many LEDs as you like.

These pixels have full 24-bit color ability with PWM taken care of by the controller chip. Since the LED is so bright, you need less current/power to get the effects you want. The driver is constant current so its OK if your battery power changes or fluctuates a little.

Each pixel draws as much as 60mA (all three RGB LEDs on for full brightness white). An Arduino can drive up to 500 pixels at 30 FPS (it will run out of RAM after that). Using ribbon cable you can string these up to 6″ apart (after that, you might get power droops and data corruption)

Each order comes with 4 individually controllable pixels. In the photos above we show the pixels with headers soldered on, but the pixels do not come with any headers.

Technical Details

  • Dimensions: 0.4″ x 0.5″ x 0.1″ / 10.2mm x 12.7mm x 2.5mm
  • 0.5″ (12.5mm) diameter circle PCB, 0.1″ (2.5mm) total thickness
  • 800 KHz speed protocol
  • Chainable design
  • 5-9VDC power (can run at 3.5V but color will be dimmed), constant current 18.5mA per LED (~55mA max total per pixel)

Don Luc

SparkFun – 555 Timer

SparkFun COM-09273 Mk01

SparkFun COM-09273 Mk02

SparkFun COM-09273 Mk03

SparkFun COM-09273 Mk04

SparkFun: COM-09273

Description: This is a common 555 timer/oscillator from TI. A classic for all of those first year circuits projects where you need to blink an LED, generate tone, and thousands of other great beginning projects. Google around for a huge list of resources and example projects.

Features:

  • 4.5V to 16V supply
  • 8-pin DIP package
  • Timing from microseconds to hours
  • Astable or monostable operation
  • Adjustable duty cycle
  • TTL compatible output
  • Sink or source up to 200mA

Don Luc

SparkFun – Arduino Pro Mini 328 – 3.3V/8MHz

SparkFun DEV-11114 Mk01

SparkFun DEV-11114 Mk02

SparkFun: DEV-11114

Description: It’s blue! It’s thin! It’s the Arduino Pro Mini! SparkFun’s minimal design approach to Arduino. This is a 3.3V Arduino running the 8MHz bootloader. Arduino Pro Mini does not come with connectors populated so that you can solder in any connector or wire with any orientation you need. We recommend first time Arduino users start with the Uno R3. It’s a great board that will get you up and running quickly. The Arduino Pro series is meant for users that understand the limitations of system voltage (3.3V), lack of connectors, and USB off board.

We really wanted to minimize the cost of an Arduino. In order to accomplish this we used all SMD components, made it two layer, etc. This board connects directly to the FTDI Basic Breakout board and supports auto-reset. The Arduino Pro Mini also works with the FTDI cable but the FTDI cable does not bring out the DTR pin so the auto-reset feature will not work. There is a voltage regulator on board so it can accept voltage up to 12VDC. If you’re supplying unregulated power to the board, be sure to connect to the “RAW” pin on not VCC.

The latest and greatest version of this board breaks out the ADC6 and ADC7 pins as well as adds footprints for optional I2C pull-up resistors! We also took the opportunity to slap it with the OSHW logo.

Dimensions: 0.7×1.3″ (18x33mm)

Features:

  • ATmega328 running at 8MHz with external resonator (0.5% tolerance)
  • Low-voltage board needs no interfacing circuitry to popular 3.3V devices and modules (GPS, accelerometers, sensors, etc)
  • 0.8mm Thin PCB
  • USB connection off board
  • Weighs less than 2 grams!
  • Supports auto-reset
  • 3.3V regulator
  • Max 150mA output
  • Over current protected
  • DC input 3.3V up to 12V
  • On board Power and Status LEDs
  • Analog Pins: 8
  • Digital I/Os: 14

Don Luc

Project #3 – LCD Shield – Mk5

LCD Shield Mk5.01

LCD Shield Mk5.02

LCD Shield Mk5.03

LCD Shield Mk5.04

LCD Shield Mk5.05

LCD Shield Mk5.06

LCDShieldMk5.1.ino

// ***** Don Luc *****
// Software Version Information
// 5.1

// include the library code:
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
#include <SPI.h>
#include <RTClib.h>
#include <RTC_DS3231.h>
#include <OneWire.h> 

RTC_DS3231 RTC;

#define SQW_FREQ DS3231_SQW_FREQ_1024     //0b00001000   1024Hz

Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield();

// These #defines make it easy to set the backlight color
#define OFF 0x0
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7

int yy = 0;
uint8_t momentaryButton = 0;

// Chorno
boolean isChorno = true;
boolean isChor = false;
char datastr[100];
int zz = 0;
// LDR (light dependent resistor)
int LDR_Pin = A0;
int LDRReading = 0;
String LDR = "";
// Temperature chip i/o
int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
OneWire ds(DS18S20_Pin);  // on digital pin 2
float temperature = 0;
String tempZ = "";
// Potentiometer
int potPin = A2;    // select the input pin for the potentiometer
int ledPin = 4;   // select the pin for the LED
boolean isVal = false;
int potPot = 0;
String cap = "";

void loop() {

  RGBLCDShield.clear();
    
  // ChronoDot
  // set the cursor to column 0, line 1
  RGBLCDShield.setCursor(0, 1);
  timeChrono();
  // LDR (light dependent resistor)
  timeLDR();
  // Temperature chip i/o
  temperatu();
  // Potentiometer
  getPotentio();
    
  momentaryButton = RGBLCDShield.readButtons();

  // set the cursor to column 0, line 0
  RGBLCDShield.setCursor(0,0);

  switch ( yy ) {
    case 1:
      // LDR (light dependent resistor)
      isLDR();
      break;
    case 2:
      // Temperature chip i/o
      isTe();
      break;
    case 3:
      // Potentiometer
      isCap();
      break;
    case 4:
      // Yellow
      RGBLCDShield.print("YELLOW - RIGHT");
      break;
    case 5:
      // OFF
      RGBLCDShield.print("OFF");
      break;
    default: 
      yy = 0;
      RGBLCDShield.print("Don Luc!!!");
   }
   
  if ( momentaryButton ) {
    
    if ( momentaryButton & BUTTON_UP ) {
      isChorno = true;
      yy = 1;
      // LDR (light dependent resistor)
      RGBLCDShield.setBacklight(GREEN);
    }
    
    if ( momentaryButton & BUTTON_DOWN ) {
      isChorno = true;
      yy = 2;
      // Temperature chip i/o
      RGBLCDShield.setBacklight(RED);
    }
    
    if ( momentaryButton & BUTTON_LEFT ) {
      isChorno = true;
      yy =3;
      // Potentiometer
      RGBLCDShield.setBacklight(BLUE);
    }
    
    if ( momentaryButton & BUTTON_RIGHT ) {
      isChorno = true;
      yy = 4;
      //RGBLCDShield.print("YELLOW - RIGHT");
      RGBLCDShield.setBacklight(YELLOW);
    }
    
    if ( momentaryButton & BUTTON_SELECT ) {
      isChorno = false;
      yy = 5;
      //RGBLCDShield.print("OFF");
      RGBLCDShield.setBacklight(OFF);
    }
    
  }
  
  delay(5000);
  
}

setup.ino

void setup() {    
   
  // set up the LCD's number of columns and rows: 
  RGBLCDShield.begin(16, 2);
  RGBLCDShield.setBacklight(VIOLET);
  
  // ChronoDot
  setupChrono();
  
  // Pot
  pinMode(ledPin, OUTPUT);
    
}

ChronoDot.ino

void setupChrono() {

  RTC.begin();
  
  DateTime now = RTC.now();
  DateTime compiled = DateTime(__DATE__, __TIME__);
  RTC.getControlRegisterData( datastr[0] );  
   
}

void timeChrono() {
 
    DateTime now = RTC.now();
    DateTime isNow (now.unixtime() + 5572 * 86400L + 26980);

    if ( isChorno == true )
    {
      if ( isChor == false ) 
        {          
          isChor = true;
          RGBLCDShield.print(isNow.year(), DEC);
          RGBLCDShield.print('/');
          RGBLCDShield.print(isNow.month(), DEC);
          RGBLCDShield.print('/');
          RGBLCDShield.print(isNow.day(), DEC);
          RGBLCDShield.print(' ');
          RGBLCDShield.print(' ');
        }
        else if ( isChor == true )
        {
          isChor = false;
          RGBLCDShield.print(isNow.hour(), DEC);
          RGBLCDShield.print(':');
          RGBLCDShield.print(isNow.minute(), DEC);
          RGBLCDShield.print(':');
          RGBLCDShield.print(isNow.second(), DEC);
          RGBLCDShield.print(' ');
          RGBLCDShield.print(' ');
        }
    }
    
}

getLDR.ino

void timeLDR() {
  
  // LDR
  LDRReading = analogRead(LDR_Pin);
 
}

void isLDR() {
  
  LDR = "LDR: ";
  LDR.concat(LDRReading); 
  // LDR (light dependent resistor)
  RGBLCDShield.print( LDR ); 
  
} 

getPot.ino

void getPotentio() {
  
    if ( isVal == false ) 
    {
       isVal = true;
       digitalWrite(ledPin, HIGH);  // turn the ledPin on
    }
    else if ( isVal == true )
    {
       isVal = false;
       digitalWrite(ledPin, LOW);  // turn the ledPin off
    }       
    potPot = analogRead(potPin);    // read the value from the sensor
  
}

void isCap(){
  
    cap = "Pot: ";
    cap.concat(potPot);
    RGBLCDShield.print( cap );

}

getTemperature.ino

float getTemp() {
  
  //returns the temperature from one DS18S20 in DEG Celsius
  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
      //no more sensors on chain, reset search
      ds.reset_search();
      return -1001;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      return -1002;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) {
      return -1003;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE); // Read Scratchpad

  
  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
  }
  
  ds.reset_search();
  
  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;
  
  return TemperatureSum;

}

void temperatu(){
  
  temperature = getTemp();
 
}

void isTe() {
  
  tempZ = "Temp: ";
  tempZ.concat(temperature);
  tempZ.concat("C");
  RGBLCDShield.print( tempZ );
  
}

Don Luc

Project #3 – LCD Shield – Mk4

LCD Shield Mk4.01

LCD Shield Mk4.02

LCD Shield Mk4.03

LCD Shield Mk4.04

LCD Shield Mk4.05

LCD Shield Mk4.06

LCD Shield Mk4.07

LCD Shield Mk4.08

LCD Shield Mk4.09

LCD Shield Mk4.10

LCD Shield Mk4.11

LCD Shield Mk4.12

LCD Shield Mk4.13

LCD Shield Mk4.14

LCD Shield Mk4.15

LCD Shield Mk4.16

LCD Shield Mk4.17

LCD Shield Mk4.18

LCD Shield Mk4.19

LCD Shield Mk4.20

LCD Shield Mk4.21

LCD Shield Mk4.22

1 X Mini Photocell

1 X Resistor 10k Ohm

1 X One Wire Digital Temperature Sensor – DS18B20

1 X Resistor 4.7k Ohm

1 X Trimpot 10K with Knob

1 X Resistor 1.65k Ohm

1 X 3MM Low Current Red LED

14 X Jumper Wires Premium 3″ M/M

1 X Project #3 – LED Shield – Mk3

LCDShieldMk4.3.ino

// ***** Don Luc *****
// Software Version Information
// 4.3

// include the library code:
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
#include <SPI.h>
#include <RTClib.h>
#include <RTC_DS3231.h>
#include <OneWire.h> 

RTC_DS3231 RTC;

#define SQW_FREQ DS3231_SQW_FREQ_1024     //0b00001000   1024Hz

Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield();

// These #defines make it easy to set the backlight color
#define OFF 0x0
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7

// Chorno
boolean isChorno = false;
char datastr[100];
// LDR (light dependent resistor)
int LDR_Pin = A0;
String LDR = "";
// Temperature chip i/o
int DS18S20_Pin = 2; //DS18S20 Signal pin on digital 2
OneWire ds(DS18S20_Pin);  // on digital pin 2
String tempZ = "";
// Potentiometer
int potPin = A2;    // select the input pin for the potentiometer
int ledPin = 4;   // select the pin for the LED
boolean isVal = false;
int potPot = 0;
String cap = "";

void loop() {

  // timeChrono();
  timeChrono();
  
  uint8_t momentaryButton = RGBLCDShield.readButtons();

  if ( momentaryButton ) {

    RGBLCDShield.clear();
  
    RGBLCDShield.setCursor(0,0);
    
    if ( momentaryButton & BUTTON_UP ) {
      timeLDR();
      RGBLCDShield.print( LDR );
      RGBLCDShield.setBacklight(GREEN);
    }
    
    if ( momentaryButton & BUTTON_DOWN ) {
      temperatu();
      RGBLCDShield.print( tempZ );
      RGBLCDShield.setBacklight(RED);
    }
    
    if ( momentaryButton & BUTTON_LEFT ) {
      getPotentio();
      RGBLCDShield.print( cap );
      RGBLCDShield.setBacklight(BLUE);
    }
    
    if ( momentaryButton & BUTTON_RIGHT ) {
      RGBLCDShield.print("YELLOW - RIGHT");
      RGBLCDShield.setBacklight(YELLOW);
    }
    
    if ( momentaryButton & BUTTON_SELECT ) {
      RGBLCDShield.print("OFF");
      RGBLCDShield.setBacklight(OFF);
    }
        
  }
  
  delay(3000);
  
}

setup.ino

void setup() {    
   
  // set up the LCD's number of columns and rows: 
  RGBLCDShield.begin(16, 2);
  RGBLCDShield.print("Don Luc!!!");
  RGBLCDShield.setBacklight(VIOLET);
  
  // ChronoDot
  setupChrono();
  
  // Pot
  pinMode(ledPin, OUTPUT);
   
}

ChronoDot.ino

void setupChrono() {

  RTC.begin();
  
  DateTime now = RTC.now();
  DateTime compiled = DateTime(__DATE__, __TIME__);
  RTC.getControlRegisterData( datastr[0] );  
 
}

void timeChrono() {
 
    DateTime now = RTC.now();
    DateTime isNow (now.unixtime() + 5572 * 86400L + 26980);
    
    // set the cursor to column 0, line 1
    RGBLCDShield.setCursor(0, 1);
    
    if ( isChorno == false ) 
    {
      isChorno = true;
      RGBLCDShield.print(isNow.year(), DEC);
      RGBLCDShield.print('/');
      RGBLCDShield.print(isNow.month(), DEC);
      RGBLCDShield.print('/');
      RGBLCDShield.print(isNow.day(), DEC);
      RGBLCDShield.print(' ');
      RGBLCDShield.print(' ');
    }
    else if ( isChorno == true )
    {
      isChorno = false;
      RGBLCDShield.print(isNow.hour(), DEC);
      RGBLCDShield.print(':');
      RGBLCDShield.print(isNow.minute(), DEC);
      RGBLCDShield.print(':');
      RGBLCDShield.print(isNow.second(), DEC);
      RGBLCDShield.print(' ');
      RGBLCDShield.print(' ');
    }

}

getLDR.ino

void timeLDR() {
  
  // LDR
  int LDRReading = analogRead(LDR_Pin);
  LDR = "LDR: ";
  LDR.concat(LDRReading); 

}

getPot.ino

void getPotentio() {
  
    if ( isVal == false ) 
    {
       isVal = true;
       digitalWrite(ledPin, HIGH);  // turn the ledPin on
    }
    else if ( isVal == true )
    {
       isVal = false;
       digitalWrite(ledPin, LOW);  // turn the ledPin off
    }       
    potPot = analogRead(potPin);    // read the value from the sensor
    cap = "Pot: ";
    cap.concat(potPot);

}

getTemperature.ino

float getTemp() {
  
  //returns the temperature from one DS18S20 in DEG Celsius
  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
      //no more sensors on chain, reset search
      ds.reset_search();
      return -1001;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      return -1002;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) {
      return -1003;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE); // Read Scratchpad

  
  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read();
  }
  
  ds.reset_search();
  
  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;
  
  return TemperatureSum;

}

void temperatu(){
  
  float temperature = getTemp();
  tempZ = "Temp: ";
  tempZ.concat(temperature);
  tempZ.concat("C");

}

Don Luc

Project #3 – LCD Shield – Mk3

LCD Shield Mk3.01

LCD Shield Mk3.02

LCD Shield Mk3.03

2 X Jumper Wires Premium 3″ M/M

1 X Project #3 – LED Shield – Mk2

LCDShieldMk3.0.ino

// ***** Don Luc *****
// Software Version Information
// 3.0

// include the library code:
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
#include <SPI.h>
#include <RTClib.h>
#include <RTC_DS3231.h>

RTC_DS3231 RTC;

#define SQW_FREQ DS3231_SQW_FREQ_1024     //0b00001000   1024Hz

Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield();

// These #defines make it easy to set the backlight color
#define OFF 0x0
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7

boolean isChorno = false;

char datastr[100];

void loop() {
   
  // timeChrono();
  timeChrono();

  uint8_t momentaryButton = RGBLCDShield.readButtons();

  if ( momentaryButton ) {

    RGBLCDShield.clear();
  
    RGBLCDShield.setCursor(0,0);
    
    if ( momentaryButton & BUTTON_UP ) {
      RGBLCDShield.print("GREEN - UP");
      RGBLCDShield.setBacklight(GREEN);
    }
    
    if ( momentaryButton & BUTTON_DOWN ) {
      RGBLCDShield.print("RED - DOWN");
      RGBLCDShield.setBacklight(RED);
    }
    
    if ( momentaryButton & BUTTON_LEFT ) {
      RGBLCDShield.print("BLUE - LEFT");
      RGBLCDShield.setBacklight(BLUE);
    }
    
    if ( momentaryButton & BUTTON_RIGHT ) {
      RGBLCDShield.print("YELLOW - RIGHT");
      RGBLCDShield.setBacklight(YELLOW);
    }
    
    if ( momentaryButton & BUTTON_SELECT ) {
      RGBLCDShield.print("OFF");
      RGBLCDShield.setBacklight(OFF);
    }
        
  }
  
  delay(3000);
  
}

setup.ino

void setup() {

  // set up the LCD's number of columns and rows: 
  RGBLCDShield.begin(16, 2);
  RGBLCDShield.print("Don Luc!!!");
  RGBLCDShield.setBacklight(VIOLET);
  
  // ChronoDot
  setupChrono();    
  
}

ChronoDot.ino

void setupChrono() {

  RTC.begin();
  
  DateTime now = RTC.now();
  DateTime compiled = DateTime(__DATE__, __TIME__);
  RTC.getControlRegisterData( datastr[0] );    

}

void timeChrono() {

    DateTime now = RTC.now();
    DateTime isNow (now.unixtime() + 5572 * 86400L + 26980);
    
    // set the cursor to column 0, line 1
    RGBLCDShield.setCursor(0, 1);
 
    if ( isChorno == false ) 
    {
      isChorno = true;
      RGBLCDShield.print(isNow.year(), DEC);
      RGBLCDShield.print('/');
      RGBLCDShield.print(isNow.month(), DEC);
      RGBLCDShield.print('/');
      RGBLCDShield.print(isNow.day(), DEC);
      RGBLCDShield.print(' ');
      RGBLCDShield.print(' ');
    }
    else if ( isChorno == true )
    {
      isChorno = false;
      RGBLCDShield.print(isNow.hour(), DEC);
      RGBLCDShield.print(':');
      RGBLCDShield.print(isNow.minute(), DEC);
      RGBLCDShield.print(':');
      RGBLCDShield.print(isNow.second(), DEC);
      RGBLCDShield.print(' ');
      RGBLCDShield.print(' ');
    }
  
}

Don Luc

Project #3 – LCD Shield – Mk2

LCD Shield Mk2.01

LCD Shield Mk2.02

LCD Shield Mk2.03

LCD Shield Mk2.04

LCD Shield Mk2.05

LCD Shield Mk2.06

LCD Shield Mk2.07

LCD Shield Mk2.08

LCD Shield Mk2.09

LCD Shield Mk2.10

LCD Shield Mk2.11

LCD Shield Mk2.12

LCD Shield Mk2.13

LCD Shield Mk2.14

LCD Shield Mk2.15

LCD Shield Mk2.16

LCD Shield Mk2.17

LCD Shield Mk2.18

LCD Shield Mk2.19

LCD Shield Mk2.20

LCD Shield Mk2.21

LCD Shield Mk2.22

LCD Shield Mk2.23

LCD Shield Mk2.24

LCD Shield Mk2.25

1 X ChronoDot

1 X ProtoScrewShield

1 X Breadboard

4 X Jumper Wires Premium 3″ M/M

1 X CR1632

1 X Project #3 – LED Shield – Mk1

LCDShieldMk2.2.ino

// ***** Don Luc *****
// Software Version Information
// 2.2

// include the library code:
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>

Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield();

// These #defines make it easy to set the backlight color
#define OFF 0x0
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7

uint8_t i = 0;

void loop() {
  
  timeChrono();

  uint8_t momentaryButton = RGBLCDShield.readButtons();

  if ( momentaryButton ) {
    
    RGBLCDShield.clear();
    RGBLCDShield.setCursor(0,0);
    
    if ( momentaryButton & BUTTON_UP ) {
      RGBLCDShield.print("GREEN - UP ");
      RGBLCDShield.setBacklight(GREEN);
    }
    
    if ( momentaryButton & BUTTON_DOWN ) {
      RGBLCDShield.print("RED - DOWN ");
      RGBLCDShield.setBacklight(RED);
    }
    
    if ( momentaryButton & BUTTON_LEFT ) {
      RGBLCDShield.print("BLUE - LEFT ");
      RGBLCDShield.setBacklight(BLUE);
    }
    
    if ( momentaryButton & BUTTON_RIGHT ) {
      RGBLCDShield.print("YELLOW - RIGHT ");
      RGBLCDShield.setBacklight(YELLOW);
    }
    
    if ( momentaryButton & BUTTON_SELECT ) {
      RGBLCDShield.print("OFF ");
      RGBLCDShield.setBacklight(OFF);
    }
        
  }
  
  delay(1000);
  
}

setup.ino

void setup() {

  // set up the LCD's number of columns and rows: 
  RGBLCDShield.begin(16, 2);
  RGBLCDShield.print("Don Luc!!!");
  RGBLCDShield.setBacklight(VIOLET);
  
  // ChronoDot
  setupChrono();    
  
}

ChronoDot.ino

void setupChrono() {

  // clear /EOSC bit
  // Sometimes necessary to ensure that the clock
  // keeps running on just battery power. 
  Wire.beginTransmission(0x68); // address DS3231
  Wire.write(0x0E); // select register
  Wire.write(0b00011100); // write register bitmap, bit 7 is /EOSC
  Wire.endTransmission();  

}

void timeChrono() {

  // set the cursor to column 0, line 1
  RGBLCDShield.setCursor(0, 1);
  
   // send request to receive data starting at register 0
  Wire.beginTransmission(0x68); // 0x68 is DS3231 device address
  Wire.write((byte)0); // start at register 0
  Wire.endTransmission();
  Wire.requestFrom(0x68, 3); // request three bytes (seconds, minutes, hours)
 
  while(Wire.available())
  { 

    int seconds = Wire.read(); // get seconds
    int minutes = Wire.read(); // get minutes
    int hours = Wire.read();   // get hours
 
    seconds = (((seconds & 0b11110000)>>4)*10 + (seconds & 0b00001111)); // convert BCD to decimal
    minutes = (((minutes & 0b11110000)>>4)*10 + (minutes & 0b00001111)); // convert BCD to decimal
    hours = (((hours & 0b00100000)>>5)*20 + ((hours & 0b00010000)>>4)*10 + (hours & 0b00001111)); // convert BCD to decimal (assume 24 hour mode)
 
    // print the number of seconds since reset:
    RGBLCDShield.print(hours);
    RGBLCDShield.print(":");
    RGBLCDShield.print(minutes);
    RGBLCDShield.print(":");
    RGBLCDShield.print(seconds);

  }
  
}

Don Luc

Project #3 – LCD Shield – Mk1

LCDShield1

LCDShield2

LCDShield3

LCDShield4

LCDShield5

LCDShield6

LCDShield7

LCDShield8

LCDShield9

LCDShield10

LCDShield11

LCDShield12

LCDShield13

LCDShield14

LCDShield15

LCDShield16

LCDShield17

LCDShield18

LCDShield19

LCDShield20

1 X Arduino UNO Rev3

1 X Adafruit I2C Controlled + Keypad Shield Kit for 16×2 LCD

1 X RGB backlight positive LCD 16×2 + extras – black on RGB

LCDShieldMk1.3.ino

// ***** Don Luc *****
// Software Version Information
// 1.3

// include the library code:
#include <Wire.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>

Adafruit_RGBLCDShield RGBLCDShield = Adafruit_RGBLCDShield();

// These #defines make it easy to set the backlight color
#define OFF 0x0
#define RED 0x1
#define YELLOW 0x3
#define GREEN 0x2
#define TEAL 0x6
#define BLUE 0x4
#define VIOLET 0x5
#define WHITE 0x7

uint8_t i = 0;

void loop() {
  
  // set the cursor to column 0, line 1
  RGBLCDShield.setCursor(0, 1);
  // print the number of seconds since reset:
  RGBLCDShield.print(millis() / 1000);

  uint8_t momentaryButton = RGBLCDShield.readButtons();

  if ( momentaryButton ) {
    
    RGBLCDShield.clear();
    RGBLCDShield.setCursor(0,0);
    
    if ( momentaryButton & BUTTON_UP ) {
      RGBLCDShield.print("GREEN - UP ");
      RGBLCDShield.setBacklight(GREEN);
    }
    
    if ( momentaryButton & BUTTON_DOWN ) {
      RGBLCDShield.print("RED - DOWN ");
      RGBLCDShield.setBacklight(RED);
    }
    
    if ( momentaryButton & BUTTON_LEFT ) {
      RGBLCDShield.print("BLUE - LEFT ");
      RGBLCDShield.setBacklight(BLUE);
    }
    
    if ( momentaryButton & BUTTON_RIGHT ) {
      RGBLCDShield.print("YELLOW - RIGHT ");
      RGBLCDShield.setBacklight(YELLOW);
    }
    
    if ( momentaryButton & BUTTON_SELECT ) {
      RGBLCDShield.print("OFF ");
      RGBLCDShield.setBacklight(OFF);
    }
    
  }
  
}

setup.ino

void setup() {
    
  // set up the LCD's number of columns and rows: 
  RGBLCDShield.begin(16, 2);

  // We track how long it takes since
  int time = millis();
  RGBLCDShield.print("Don Luc!!!");
  time = millis() - time;
  RGBLCDShield.setBacklight(VIOLET);
}

Don Luc

Project #2 – Lens – LED – Mk6

LensLED6a

LensLED6b

LensLED6c

LensLED6d

1 X Arduino Pro Mini 328 – 5V/16MHz

5 X Break Away Headers – Straight

1 X FTDI Basic Breakout – 5V

1 X USB LiPoly Charger – Single Cell

1 X Polymer Lithium Ion Battery – 400mAh

5 X Standoff – Nylon (3/8″, #4-40)

12 X Pan Head, Slotted Drive, #4-40 Thread Size, 1/4″ Length

2 X Nut – Nylon Locknut – #4-40

1 X SPDT Mini Power Switch

3 X Panel Mount 10K potentiometer (Breadboard Friendly) – 10K Linear

1 X Potentiometer Knob – Soft Touch T18 – Red

1 X Potentiometer Knob – Soft Touch T18 – Blue

1 X Potentiometer Knob – Soft Touch T18 – White

22 X Hook-Up Wire – Assortment (Solid Core, 22 AWG)

1 X Prototyping Board

1 X Project #2 – Lens – LED – Mk1

Don Luc