Skip to content

Instantly share code, notes, and snippets.

@UlisesGascon
Last active October 15, 2015 00:47
Show Gist options
  • Save UlisesGascon/10b375abcac90fe2d65b to your computer and use it in GitHub Desktop.
Save UlisesGascon/10b375abcac90fe2d65b to your computer and use it in GitHub Desktop.
BCD-BC - Dependencias y hardware
/*
Arranque y control de la repetición
*/
// Intervalo que arranca la funcion RunIt, y la repite cada x milisegundos en funcion del valor de "intervalMS".
setInterval(runIt, intervalMS);
// Función que controla la ejecucción de todo lo demás
function runIt () {
// Arranca el reloj en la Matriz de leds
runMatrix();
// Si el LCD esta activo... muestra los datos. Sino... se limpia
if (LCDisEnable) {
runLCD();
}else {
lcd.clear();
};
};
var five = require("johnny-five");
var board = new five.Board();
//...
board.on("ready", function() {
// Definimos la Matriz de Leds (HT16K33 de 8X16) usando I2C
var matrix = new five.Led.Matrix({
addresses: [0x70],
controller: "HT16K33",
dims: "8x16",
rotation: 2
});
// Definimos el LCD (LCM1602 de 4X20) usando I2C
var lcd = new five.LCD({
controller: "LCM1602",
pins: ["A5", "A4"],
rows: 4,
cols: 20
});
// Limpiamos los dispositivos al arrancar
matrix.clear();
lcd.clear();
//...
}
// Función para imprimir en el LCD la fecha en este formato (DD/MM/YYYY)
function getDateLCD () {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
month = (month < 10 ? "0" : "") + month;
var day = date.getDate();
day = (day < 10 ? "0" : "") + day;
return ""+day+"/"+month+"/"+year; // DD/MM/YYYY
}
// Función para imprimir en el LCD la hora en este formato (HH:MM:SS)
function getTimeLCD () {
var date = new Date();
var hour = date.getHours();
hour = (hour < 10 ? "0" : "") + hour;
var min = date.getMinutes();
min = (min < 10 ? "0" : "") + min;
var sec = date.getSeconds();
sec = (sec < 10 ? "0" : "") + sec;
return ""+ hour + ":" + min + ":" + sec; // HH:MM:SS
};
// Función para devolver la hora en este formato (HHMMSS)
function getSpecialTime() {
var date = new Date();
var hour = date.getHours();
hour = (hour < 10 ? "0" : "") + hour;
var min = date.getMinutes();
min = (min < 10 ? "0" : "") + min;
var sec = date.getSeconds();
sec = (sec < 10 ? "0" : "") + sec;
return ""+hour+""+min+""+sec; //HHMMSS
}
/*
Funcion que regula el LCD
*/
function runLCD () {
lcd.cursor(0, 0).print("===== BCD CLOCK ====");
lcd.cursor(1, 0).print("Date: "+getDateLCD()); // (Date: DD/MM/YYYY)
lcd.cursor(2, 0).print("Time: "+getTimeLCD() ); // (Time: HH:MM:SS)
lcd.cursor(3, 0).print("====================");
};
// Función que regula el comportamiento de los leds
function runMatrix () {
// Crear un array con cada elemento de la función que da la hora en formato (HHMMSS) -> [H,H,M,M,S,S]
var res = getSpecialTime().split("");
// ...
// Minutos Primera Columna
if (res[2] == 0) {
m11 = 0;
m12 = 0;
m14 = 0;
} else if(res[2] == 1){
m11 = 1;
m12 = 0;
m14 = 0;
} else if(res[2] == 2){
m11 = 0;
m12 = 1;
m14 = 0;
} else if(res[2] == 3){
m11 = 1;
m12 = 1;
m14 = 0;
} else if(res[2] == 4){
m11 = 0;
m12 = 0;
m14 = 1;
} else if(res[2] == 5){
m11 = 1;
m12 = 0;
m14 = 1;
} else {
m11 = 0;
m12 = 0;
m14 = 0;
console.log("Error in minutes column 1")
};
// ...
/*
=== Formato ===
xyz = h12, h22, s24, m13 ...
x es h (horas), m (minutos) o s (segundos)
y es columna de izquierda a derecha
z es valor 1, 2, 4 o 8.
Ejemplo: h11 -> en horas, columna 1, led que equivale al valor 1.
Más info -> https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/Binary_clock.svg/640px-Binary_clock.svg.png?1435837556051
*/
// Representación visual de la matriz (8x16). Siendo 0 apagado y 1 encendido.
var bcdMatrix = [
"0000000000000000",
"0000000000000000",
"0000"+h28+"000"+m28+"000"+s28+"000",
"0000"+h24+"00"+m14+""+m24+"00"+s14+""+s24+"000",
"000"+h12+""+h22+"00"+m12+""+m22+"00"+s12+""+s22+"000",
"000"+h11+""+h21+"00"+m11+""+m21+"00"+s11+""+s21+"000",
"0000000000000000",
"0000000000000000"
];
// Se Pinta el dispositivo con los datos
matrix.draw(bcdMatrix);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment