GitLab Commit is coming up on August 3-4. Learn how to innovate together using GitLab, the DevOps platform. Register for free: gitlabcommitvirtual2021.com

Commit 12ac74a3 authored by Samuel V.G.'s avatar Samuel V.G.
Browse files

Nueva estructura de directorios

parent c0361b8c
/**
* pie.scad
*
* Use this module to generate a pie- or pizza- slice shape, which is particularly useful
* in combination with `difference()` and `intersection()` to render shapes that extend a
* certain number of degrees around or within a circle.
*
* This openSCAD library is part of the [dotscad](https://github.com/dotscad/dotscad)
* project.
*
* @copyright Chris Petersen, 2013
* @license http://creativecommons.org/licenses/LGPL/2.1/
* @license http://creativecommons.org/licenses/by-sa/3.0/
*
* @see http://www.thingiverse.com/thing:109467
* @source https://github.com/dotscad/dotscad/blob/master/pie.scad
*
* @param float radius Radius of the pie
* @param float angle Angle (size) of the pie to slice
* @param float height Height (thickness) of the pie
* @param float spin Angle to spin the slice on the Z axis
*/
module pie(radius, angle, height, spin=0) {
// Negative angles shift direction of rotation
clockwise = (angle < 0) ? true : false;
// Support angles < 0 and > 360
normalized_angle = abs((angle % 360 != 0) ? angle % 360 : angle % 360 + 360);
// Select rotation direction
rotation = clockwise ? [0, 180 - normalized_angle] : [180, normalized_angle];
// Render
if (angle != 0) {
rotate([0,0,spin]) linear_extrude(height=height)
difference() {
circle(radius);
if (normalized_angle < 180) {
union() for(a = rotation)
rotate(a) translate([-radius, 0, 0]) square(radius * 2);
}
else if (normalized_angle != 360) {
intersection_for(a = rotation)
rotate(a) translate([-radius, 0, 0]) square(radius * 2);
}
}
}
}
/*
* When this file is opened directly in OpenSCAD, the following code will render an
* example of the functions it provides. This example will *not* render if this module
* is imported into your own project via the `use` statement.
*/
//pie_example();
module pie_example($fn=50) {
union() {
pie(40, 45, 5);
rotate([0,0,-5]) difference() {
sphere(r=25);
translate([0,0,-30]) pie(50, -45, 60, 15);
}
}
}
int menosEsMas(int i) {
int n;
if(i<0) {
n= (60 +i);
}
return n;
}
#define TIME_HEADER "T"
unsigned long processSyncMessage() {
unsigned long pctime = 0L;
const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013
if(Serial.find(TIME_HEADER)) {
pctime = Serial.parseInt();
return pctime;
if( pctime < DEFAULT_TIME) { // check the value is a valid time (greater than Jan 1 2013)
pctime = 0L; // return 0 to indicate that the time is not valid
}
}
return pctime;
}
void funcionReloj() {
Serial.println("Pinto reloj");
switch(MODO) {
case 0:
if (DEBUG == 1) {
Serial.println("Modo uno");
}
digitalClockLed();
break;
case 1:
if (DEBUG == 1) {
Serial.println("Modo uno");
}
digitalClockLed1();
break;
case 2:
if (DEBUG == 1) {
Serial.println("Modo dos");
}
digitalClockLed2();
break;
case 3:
if (DEBUG == 1) {
Serial.println("Modo tres");
}
digitalClockLed3();
break;
case 4:
if (DEBUG == 1) {
Serial.println("Modo cuatro");
}
digitalClockLed4();
break;
default:
MODO=0;
break;
}
}
void pintarPuntosHoras() {
for(int i = 0 ; i < NUM_LEDS-1 ; i = i + 5) {
leds[i].setRGB(0,0,0);
if (i % 5 == 0) {
leds[i].setRGB(64,64,0);
}
leds[0].setRGB(255,255,0);
}
}
void pintarCuartosHoras() {
for(int i = 0 ; i < NUM_LEDS-1 ; i = i + 5) {
leds[i].setRGB(0,0,0);
if (i % 15 == 0) {
leds[i].setRGB(64,64,0);
}
leds[0].setRGB(255,255,0);
}
}
void pintarPuntosCuartos() {
for(int i = 0 ; i < NUM_LEDS-1 ; i = i + 5) {
leds[i].setRGB(0,0,0);
if (i % 15 == 0) {
leds[i].setRGB(64,64,0);
}
leds[0].setRGB(255,255,0);
}
}
void apagarLeds() {
for(int i = 0 ; i < NUM_LEDS-1 ; i++) {
leds[i].setRGB(0,0,0);
}
}
// Funciones auxiliares
int venticuatroDoce(int n) {
int resultado;
resultado = n % 12;
return resultado;
}
void dosDigitos(int n) {
if (n < 10 && n >= 0) {
Serial.print("0");
}
Serial.print(n);
}
void digitalClockLed() {
apagarLeds();
pintarPuntosHoras();
int hh_led = 0;
int mm_led = 0;
int ss_led = 0;
// Variables auxiliares para la hora
int hh_desp = 0;
// Dividimos la esfera en 12 partes para poner la hora.
// Y sumamos el desplazamiento
// por ejemplo, si es y media estar justo a mitad de camino
// entre dos digitos de las esfera
hh_desp = (mm/12) % 5;
hh_led = map(hh,0,11,0,59) + hh_desp;
int hh_ant=hh_led - 1;
if (hh_ant < 0) {
hh_ant = (60 + hh_ant);
}
int hh_pos=(hh_led+1) % 60;
leds[hh_ant].setRGB(32,0,0);
leds[hh_led].setRGB(255,0,0);
leds[hh_pos].setRGB(32,0,0);
mm_led = mm;
leds[mm_led].setRGB(0,255,0);
ss_led = ss;
leds[ss_led].setRGB(0,0,255);
FastLED.setBrightness(brillo);
FastLED.show();
}
void digitalClockLed1() {
apagarLeds();
int hh_led = 0;
int mm_led = 0;
int ss_led = 0;
// Variables auxiliares para la hora
int hh_desp = 0;
// Obtenemos horas, minutos y segundos
hh=venticuatroDoce(hour()); // Pasando de 24h a 12h
mm=minute();
ss=second();
// Dividimos la esfera en 12 partes para poner la hora.
// Y sumamos el desplazamiento
// por ejemplo, si es y media estar justo a mitad de camino
// entre dos digitos de las esfera
hh_desp = (mm/12) % 5;
hh_led = map(hh,0,11,0,59) + hh_desp;
int hh_ant=hh_led - 1;
if (hh_ant < 0) {
hh_ant = (60 + hh_ant);
}
int hh_pos=(hh_led+1) % 60;
leds[hh_ant].setRGB(32,0,0);
leds[hh_led].setRGB(255,0,0);
leds[hh_pos].setRGB(32,0,0);
mm_led = mm;
leds[mm_led].setRGB(0,255,0);
ss_led = ss;
leds[ss_led].setRGB(0,0,255);
FastLED.setBrightness(brillo);
FastLED.show();
}
void digitalClockLed2() {
apagarLeds();
int hh_led = 0;
int mm_led = 0;
int ss_led = 0;
// Variables auxiliares para la hora
int hh_desp = 0;
// Obtenemos horas, minutos y segundos
hh=venticuatroDoce(hour()); // Pasando de 24h a 12h
mm=minute();
ss=second();
hh_desp = (mm/12) % 5;
hh_led = map(hh,0,11,0,59) + hh_desp;
int hh_ant=hh_led - 1;
if (hh_ant < 0) {
hh_ant = (60 + hh_ant);
}
int hh_pos=(hh_led+1) % 60;
leds[hh_ant].setRGB(32,0,0);
leds[hh_led].setRGB(255,0,0);
leds[hh_pos].setRGB(32,0,0);
mm_led = mm;
leds[mm_led].setRGB(0,255,0);
ss_led = ss;
leds[ss_led].setRGB(0,0,255);
FastLED.setBrightness(brillo);
FastLED.show();
}
void digitalClockLed3() {
apagarLeds();
int hh_led = 0;
int mm_led = 0;
int ss_led = 0;
// Variables auxiliares para la hora
int hh_desp = 0;
// Obtenemos horas, minutos y segundos
// Dividimos la esfera en 12 partes para poner la hora.
// Y sumamos el desplazamiento
// por ejemplo, si es y media estar justo a mitad de camino
// entre dos digitos de las esfera
hh_desp = (mm/12) % 5;
hh_led = map(hh,0,11,0,59) + hh_desp;
leds[menosEsMas(hh_led-1)].setRGB(32,0,0);
leds[hh_led].setRGB(255,0,0);
leds[(hh_led+1) % 60].setRGB(32,0,0);
mm_led = mm;
leds[mm_led].setRGB(0,255,0);
ss_led = ss;
leds[menosEsMas(ss_led -5)].setRGB(0,0,45);
leds[menosEsMas(ss_led -4)].setRGB(0,0,90);
leds[menosEsMas(ss_led -3)].setRGB(0,0,135);
leds[menosEsMas(ss_led -2)].setRGB(0,0,180);
leds[menosEsMas(ss_led -1)].setRGB(0,0,225);
leds[ss_led].setRGB(0,0,255);
FastLED.setBrightness(brillo);
FastLED.show();
}
void digitalClockLed4() {
apagarLeds();
int hh_led = 0;
int mm_led = 0;
int ss_led = 0;
// Variables auxiliares para la hora
int hh_desp = 0;
// Obtenemos horas, minutos y segundos
hh=venticuatroDoce(hour()); // Pasando de 24h a 12h
mm=minute();
ss=second();
// Dividimos la esfera en 12 partes para poner la hora.
// Y sumamos el desplazamiento
// por ejemplo, si es y media estar justo a mitad de camino
// entre dos digitos de las esfera
hh_desp = (mm/12) % 5;
hh_led = map(hh,0,11,0,59) + hh_desp;
leds[menosEsMas(hh_led-1)].setRGB(32,0,0);
leds[hh_led].setRGB(255,0,0);
leds[(hh_led+1) % 60].setRGB(32,0,0);
mm_led = mm;
leds[mm_led].setRGB(0,255,0);
ss_led = ss;
leds[menosEsMas(ss_led -2)].setRGB(0,0,180);
leds[menosEsMas(ss_led -1)].setRGB(0,0,225);
leds[ss_led].setRGB(0,0,255);
FastLED.setBrightness(brillo);
FastLED.show();
}
void digitalClockSerialDebug() {
dosDigitos(hour());
Serial.print(":");
dosDigitos(minute());
Serial.print(":");
dosDigitos(second());
Serial.print(" ");
Serial.print(day());
Serial.print("/");
Serial.print(month());
Serial.print("/");
Serial.print(year());
Serial.println();
}
void sumarMinutoDebug(){
Serial.print("+1 minuto. Nueva hora ");
digitalClockSerialDebug();
}
void restarMinutoDebug(){
Serial.print("-1 minuto. Nueva hora ");
digitalClockSerialDebug();
}
void printDisplayFecha(){
segmentos.setIntensity(0,map(brillo,0,255,0,15));
printDia();
printMes();
printAno();
}
void printDia(){
int dia=day();
segmentos.setDigit(0,7,dia/10,false);
segmentos.setDigit(0,6,dia%10,true);
}
void printMes(){
int mes=month();
segmentos.setDigit(0,5,mes/10,false);
segmentos.setDigit(0,4,mes%10,true);
}
void printAno() {
int ano=year();
segmentos.setDigit(0,3,ano/1000%10,false);
segmentos.setDigit(0,2,ano/100%10,false);
segmentos.setDigit(0,1,ano/10%10,false);
segmentos.setDigit(0,0,ano%10,true);
}
/*********************************************************
*
* lClock: Reloj LED con Arduino
*
* Proyecto por Samuel Villafranca Gómez
*
* Mas informacion: http://wiki.makespacemadrid.org
*
* Cualquier persona es libre de utilizarlo como quiera,
* siempre y cuando cite la fuente original.
* Al Cesar lo que es del Cesar.
*
**********************************************************/
//Libreras
#include <Time.h>
#include <Wire.h>f
#include <DS1307RTC.h>
#include "FastLED.h"
#include <LedControl.h>
#include <Button.h>
#include <rotary.h>
int DEBUG = 1; // 0: No, 1: Si
/* 0: Reloj normal con puntos
* 1: Reloj sin puntos
* 2: Con estela
* 3: Radar
* 4: Sector de hora
*/
int MODO = 0;
/* 0: Minutos
* 1: Dias
* 2: Meses
* 3: Anos
*/
int M_AJUSTE=0;
//Variables para guardar la hora
int hh = 0;
int mm = 0;
int ss = 0;
// LEDS
#define NUM_LEDS 60
#define DATA_PIN 11
#define CLOCK_PIN 10
// DISPLAY MAX7219
#define MAX7_DATA 7
#define MAX7_CLK 9
#define MAX7_CS 8
// Botones
#define PIN_BOTON_UNO 4
#define PIN_BOTON_DOS 5
#define PIN_BOTON_TRES 6
#define PULLUP true
#define INVERT false
#define DEBOUNCE_MS 20
// Encoder
#define ENCODER_A 2
#define ENCODER_B 3
Rotary rueda = Rotary(ENCODER_A,ENCODER_B);
#define TOTAL_MODOS 4
// Sensor de luz
#define PIN_SENSOR_LUZ A0
int valorLDR = 0;
int brillo = 0;
Button botonUno(PIN_BOTON_UNO, PULLUP, INVERT, DEBOUNCE_MS);
Button botonDos(PIN_BOTON_DOS, PULLUP, INVERT, DEBOUNCE_MS);
Button botonTres(PIN_BOTON_TRES, PULLUP, INVERT, DEBOUNCE_MS);
CRGB leds[NUM_LEDS];
LedControl segmentos=LedControl(MAX7_DATA,MAX7_CS,MAX7_CLK,1);
//Temporizadores
const long unSegundo = 1000;
const long medioSegundo = 500;
long preTemp1 = 0; // Consultar RTC
long preTemp2 = 0; // Refrescar LEDS
void setup() {
Serial.begin(9600);
Serial.println("Inicio");
if (Serial.available()) {
time_t t = processSyncMessage();
if (t != 0) {
RTC.set(t); // set the RTC and the system time to the received value
setTime(t);
}
}
setSyncProvider(RTC.get);
FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
segmentos.shutdown(0,false);
segmentos.setIntensity(0,8);
PCICR |= (1 << PCIE2);
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
if (DEBUG==1) {
Serial.println("Fin inicio");
}
}
void loop() {
unsigned long temp1 = millis();
if (temp1 - preTemp1 >= unSegundo/4) {
preTemp1 = temp1;
if (DEBUG == 1) {
digitalClockSerialDebug();
}
hh=venticuatroDoce(hour()); // Pasando de 24h a 12h
mm=minute();
ss=second();
printDisplayFecha();
funcionReloj();
} // Fin temp1
valorLDR=analogRead(PIN_SENSOR_LUZ);
brillo=map(valorLDR,0,1023,0,255);
botonUno.read();
botonDos.read();
botonTres.read();
if (botonUno.wasReleased()) {
M_AJUSTE=M_AJUSTE+1;
if (M_AJUSTE>3) {
M_AJUSTE=0;
}
if (DEBUG==1) {
Serial.print("Modo de Ajuste");
Serial.println(M_AJUSTE);
}
}
if (botonDos.wasReleased()) {
MODO=MODO+1;
if (MODO>TOTAL_MODOS-1) {
MODO=0;
}
if (DEBUG==1) {
Serial.print("modo");
Serial.println(MODO);
}
}
}
ISR(PCINT2_vect) {
unsigned char giro = rueda.process();
if (giro) {
if (DEBUG==1) {
Serial.<