Buenos días,
este es mi primer post en este genial foro, y disculpar mi falta de conocimiento en programación.
Llevo unos mes investigando la posibilidad de crear un Claqueta con un tiempo de código.
Encontré un proyecto que me resulto muy interesante, así que compre lo necesario para montarlo.
La única diferencia en la pantalla de led, porque quería un más grande.
El proyecto esta programado para esta pantalla de led:
-Display de 7 segmentos MAX7219 de 8 digitos
Y yo decidi comprar esta:
-74HC595 8-Digit LED Display Module
Como podría adaptar el código para que funcionase este panel led.
Muchas gracias.
Aqui adjunto el código:
/*
* BASED ON RTC Examples.
*
* name Arduino 7 Segment display
* ----- ---- -----
* +5V VCC
* GND GND
* DIN D11/MOSI DIN
* CS D10/SS CS
* CLK D13/SCK CLK
*
* name Arduino RTC module
* ----- ---- -----
* nc 32K
* nc SQW
* SCL SCL/A5 SCL
* SDA SDA/A4 SDA
* 3v3 VCC
* GND GND
*/
#include <Wire.h>
#include "DS3231.h"
// define pins attached to MAX7219 (and also see notes above)
#define MAX7219_DIN 11
#define MAX7219_CS 10
#define MAX7219_CLK 13
// enumerate the MAX7219 registers
// See MAX7219 Datasheet, Table 2, page 7
enum { MAX7219_REG_DECODE = 0x09,
MAX7219_REG_INTENSITY = 0x0A,
MAX7219_REG_SCANLIMIT = 0x0B,
MAX7219_REG_SHUTDOWN = 0x0C,
MAX7219_REG_DISPTEST = 0x0F };
// enumerate the SHUTDOWN modes
// See MAX7219 Datasheet, Table 3, page 7
enum { OFF = 0,
ON = 1 };
const byte DP = 0b10000000;
const byte C = 0b01001110;
const byte F = 0b01000111;
const byte G = 0b01011111;
const byte I = 0b00000110;
const byte S = 0b01011011;
const byte L = 0b00001110;
const byte E = 0b01001111;
const byte R = 0b01100110;
const byte N = 0b01110010;
const byte T = 0b01000000;
const byte P = 0b01100111;
const byte B = 0b00000001;
const byte N2 = 0b01110110;
const byte O = 0b01111110;
RTClib RTC;
DS3231 Clock;
int timeStart = 0;
int deltaTime = 0;
int arduinoFrames = 0;
int lastSecond = 0;
bool seMostro00000 = false;
bool animBlankDots = false;
const int BUZZER = 3; //buzzer to arduino pin 9
const int BUZZER_LOW = 4; //buzzer to arduino pin 9
const int CLAPPER_SWITCH_IN = 6;//Clapper at D6
// Define number of pieces
const int numberOfPieces = 7;
String pieces[numberOfPieces];
// This will be the buffered string from Serial.read()
// up until you hit a \n
// Should look something like "123,456,789,0"
String input = "";
// Keep track of current position in array
int counter = 0;
// Keep track of the last comma so we know where to start the substring
int lastIndex = 0;
void setup () {
//buzzer
pinMode(BUZZER, OUTPUT);
//Clapper switch
pinMode(CLAPPER_SWITCH_IN,INPUT);
pinMode(BUZZER_LOW, OUTPUT);
digitalWrite(BUZZER_LOW,LOW);
/****************************** RELOJ *************************/
timeStart = millis();
Serial.begin(9600);
Wire.begin();
/****************************** DISPLAY *************************/
// define type of pin
pinMode(MAX7219_DIN, OUTPUT); // serial data-in
pinMode(MAX7219_CS, OUTPUT); // chip-select, active low
pinMode(MAX7219_CLK, OUTPUT); // serial clock
digitalWrite(MAX7219_CS, HIGH);
resetDisplay(); // reset the MAX2719 display
}
void loop ()
{
sincronizar();
int estadoClapper = digitalRead(CLAPPER_SWITCH_IN);
if (estadoClapper == LOW){
seMostro00000 = false;
clapperAbierto();
} else {
clapperCerrado();
}
}
// SINCRONIZAR
// ANIO:MES:DIA:HORA:MINUTO:SEGUNDO:
// Ejemplo: 2017 Octubre 4 10:35:04 pm
// 17:10:4:22:35:4:
void sincronizar()
{
if (Serial.available()) {
input = Serial.readString();// read the incoming data as string
counter = 0;
for (int i = 0; i < input.length(); i++) {
// Loop through each character and check if it's a comma
if (input.substring(i, i+1) == ":") {
// Grab the piece from the last index up to the current position and store it
pieces[counter] = input.substring(lastIndex, i);
// Update the last position and add 1, so it starts from the next character
lastIndex = i + 1;
// Increase the position in the array that we store into
counter++;
}
// If we're at the end of the string (no more commas to stop us)
if (i == input.length() - 1) {
// Grab the last part of the string from the lastIndex to the end
pieces[counter] = input.substring(lastIndex, i);
}
}
if (counter == 6 ) {
//Setear la nueva hora
Clock.setClockMode(false);
Clock.setYear((byte)pieces[0].toInt());
Clock.setMonth((byte)pieces[1].toInt());
Clock.setDate((byte)pieces[2].toInt());
Clock.setHour((byte)pieces[3].toInt());
Clock.setMinute((byte)pieces[4].toInt());
Clock.setSecond((byte)pieces[5].toInt());
// Sincronizado pitar!
displaySync1();
pitarSync();
displaySync2();
pitarSync();
displaySync1();
pitarSync();
displaySync2();
pitarSync();
displaySync1();
pitarSync();
displaySync2();
pitarSync();
}
}
}
void clapperCerrado()
{
if (!seMostro00000){
// Mostramos
String str = "00.00.00.00";
displayTime(str);
pitar();
seMostro00000 = true;
} else {
if (animBlankDots) {
displayBlankDots();
delay(300);
animBlankDots = false;
} else {
displayBlankDots2();
delay(300);
animBlankDots = true;
}
}
}
void clapperAbierto()
{
// Leemos el reloj.
DateTime now = RTC.now();
int hora = now.hour();
int minuto = now.minute();
int segundo = now.second();
deltaTime = millis() - timeStart;
// 24fps 41 millis aprox 38 millis (41)
if (deltaTime > 38){
arduinoFrames++;
timeStart = millis();
}
if (segundo != lastSecond) {
arduinoFrames = 0;
timeStart = millis();
}
//Recuerde el ultimo segundo
lastSecond = segundo;
String str = formatDigit(hora);
str.concat('.');
str.concat(formatDigit(minuto));
str.concat('.');
str.concat(formatDigit(segundo));
str.concat('.');
str.concat(formatDigit(arduinoFrames));
displayTime(str);
}
/**
* Returns the digit formated for segment display,
* if digit is greater than 100 will return 00.
*/
String formatDigit(int digit) {
if (digit < 10 ) {
return "0"+String(digit,DEC);
} else if(digit > 99) {
return "00";
}
return String(digit,DEC);
}
void set_register(byte reg, byte value)
{
digitalWrite(MAX7219_CS, LOW);
shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, reg);
shiftOut(MAX7219_DIN, MAX7219_CLK, MSBFIRST, value);
digitalWrite(MAX7219_CS, HIGH);
}
void resetDisplay()
{
set_register(MAX7219_REG_SHUTDOWN, OFF);
set_register(MAX7219_REG_DISPTEST, OFF);
set_register(MAX7219_REG_INTENSITY, 0x0D);
}
void displayTime(String timeString)
{
set_register(MAX7219_REG_SHUTDOWN, OFF);
set_register(MAX7219_REG_SCANLIMIT, 7);
set_register(MAX7219_REG_DECODE, 0b11111111);
set_register(1, timeString.charAt(10));
set_register(2, timeString.charAt(9));
set_register(3, timeString.charAt(7)| DP);
set_register(4, timeString.charAt(6));
set_register(5, timeString.charAt(4)| DP);
set_register(6, timeString.charAt(3));
set_register(7, timeString.charAt(1)| DP);
set_register(8, timeString.charAt(0));
set_register(MAX7219_REG_SHUTDOWN, ON);
}
void displayTemp(String tempString, char C_or_F )
{
set_register(MAX7219_REG_SHUTDOWN, OFF);
set_register(MAX7219_REG_SCANLIMIT, 5);
set_register(MAX7219_REG_DECODE, 0b00111100);
set_register(1, C_or_F);
set_register(2, 0);
set_register(3, tempString.charAt(4));
set_register(4, tempString.charAt(3));
set_register(5, tempString.charAt(1) | DP);
set_register(6, tempString.charAt(0));
set_register(MAX7219_REG_SHUTDOWN, ON);
}
void pitarSync() {
digitalWrite(BUZZER, HIGH);
delay(300);
digitalWrite(BUZZER, LOW);
delay(300);
}
void pitar()
{
digitalWrite(BUZZER, HIGH);
delay(500);
digitalWrite(BUZZER, LOW);
delay(500);
}
void displaySync1()
{
set_register(MAX7219_REG_SHUTDOWN, OFF);
set_register(MAX7219_REG_SCANLIMIT, 7);
set_register(MAX7219_REG_DECODE, 0b00000000);
set_register(1, 0);
set_register(2, O | DP );
set_register(3, R);
set_register(4, C);
set_register(5, N2);
set_register(6, I);
set_register(7, S);
set_register(8, 0);
set_register(MAX7219_REG_SHUTDOWN, ON);
}
void displaySync2()
{
set_register(MAX7219_REG_SHUTDOWN, OFF);
set_register(MAX7219_REG_SCANLIMIT, 7);
set_register(MAX7219_REG_DECODE, 0b00000000);
set_register(1, B);
set_register(2, O | DP );
set_register(3, R);
set_register(4, C);
set_register(5, N2);
set_register(6, I);
set_register(7, S);
set_register(8, B);
set_register(MAX7219_REG_SHUTDOWN, ON);
}
void displayBlankDots()
{
set_register(MAX7219_REG_SHUTDOWN, OFF);
set_register(MAX7219_REG_SCANLIMIT, 7);
set_register(MAX7219_REG_DECODE, 0b00000000);
set_register(1, 0);
set_register(2, 0 | DP);
set_register(3, 0);
set_register(4, 0 | DP);
set_register(5, 0);
set_register(6, 0 | DP);
set_register(7, 0);
set_register(8, 0 | DP);
set_register(MAX7219_REG_SHUTDOWN, ON);
}
void displayBlankDots2()
{
set_register(MAX7219_REG_SHUTDOWN, OFF);
set_register(MAX7219_REG_SCANLIMIT, 7);
set_register(MAX7219_REG_DECODE, 0b00000000);
set_register(1, 0 | DP);
set_register(2, 0);
set_register(3, 0 | DP);
set_register(4, 0);
set_register(5, 0 | DP);
set_register(6, 0);
set_register(7, 0 | DP);
set_register(8, 0);
set_register(MAX7219_REG_SHUTDOWN, ON);
}