tags: cronómetro cronometro
#include
#include
#include
long duration;
//Vcc - Vcc
//Gnd - Gnd
//Din - Mosi (Pin 11)
//Cs - SS (Pin 10)
//Clk - Sck (Pin 18)
const int pinCS = 5;
int d=0;
int s=0;
int S=0;
int m=0;
int resetmillis=0;
const int trigPin = 2;
const int echoPin = 4;
const int numberOfHorizontalDisplays = 4;
//const int numberOfHorizontalDisplays = 1; // retirar comentario para una sola matriz
const int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
String tape = "0123456789: "; //tu mensaje
const int spacer = 1;
const int width = 5 + spacer; // The font width is 5 pixels
void setup() {
Serial.begin(115200); // Starts the serial communication
matrix.setIntensity(7); // Use a value between 0 and 15 for brightness
//
matrix.setPosition(0, 0, 0); // The first display is at <0, 0>
matrix.setPosition(1, 1, 0); // The second display is at <1, 0>
matrix.setPosition(2, 2, 0); // The third display is at <2, 0>
matrix.setPosition(3, 3, 0); // And the last display is at <3, 0>
matrix.setRotation(0, 1); // Display is position upside down
matrix.setRotation(1, 1); // Display is position upside down
matrix.setRotation(2, 1); // Display is position upside down
matrix.setRotation(3, 1); // Display is position upside down
resetmillis=millis();
}
void loop() {
//Primero dibujamos los 2 puntos tape[10] son los puntos en la cadena tape y 9 y 23 la posición empezando a contar por la izquierda teniendo los pins a la izquierda y el 0 es la tercera columna
//Cada número ocupa 5 espacios, mas 1 de separación a cada lado
//matrix.drawChar(23, 1, tape[10], HIGH, LOW, 1);
//matrix.drawChar(9, 1, tape[10], HIGH, LOW, 1);
matrix.drawChar(23, 1, tape[10], HIGH, LOW, 1);
matrix.drawChar(9, 1, tape[10], HIGH, LOW, 1);
int Tmillis=(millis()-resetmillis)/100;
int D = Tmillis/60;
int m = Tmillis/600;
int S = Tmillis/100-m*6;
int s = Tmillis/10-m*60-S*10;
int d = Tmillis-m*600-S*100-s*10;
matrix.drawChar(27, 1, tape[d], HIGH, LOW, 1);
matrix.drawChar(19, 1, tape[s], HIGH, LOW, 1);
matrix.drawChar(13, 1, tape[S], HIGH, LOW, 1);
matrix.drawChar(5, 1, tape[m], HIGH, LOW, 1);
Serial.println(tape[d]);
matrix.write(); // Send bitmap to display
delay(100);
}
====== Cronómetro con pulsador emergencia ======
Empieza con 0:00:00\\
Un click empieza a correr \\
Segundo click para y deja valor en pantalla \\
Tercer click vuelve al principio, vuelve a correr desde cero
#include
#include
#include
/*
Valores pulsación:
aprieto suelto
Inicial: 0 1
1 click: 1 0
suelto: 1 1
2 click: 0 0
suelto: 0 1
*/
//Vcc - Vcc
//Gnd - Gnd
//Din - Mosi (Pin 11)
//Cs - SS (Pin 10)
//Clk - Sck (Pin 18)
const int pinCS = 5;
// Dígitos del tiempo
int d=0; // décimas
int s=0; // unidad de segundo (s minúscula)
int S=0; // decenas de segundo (S mayúscula)
int m=0; // minutos
int apretado = 0;
int suelto = 1;
const int buttonPin = 4; // El pin donde está conectado el botón
int resetmillis=0;
const int numberOfHorizontalDisplays = 4;
//const int numberOfHorizontalDisplays = 1; // retirar comentario para una sola matriz
const int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
String tape = "0123456789: "; //tu mensaje
const int spacer = 1;
const int width = 5 + spacer; // The font width is 5 pixels
void setup() {
Serial.begin(115200); // Starts the serial communication
pinMode(buttonPin, INPUT_PULLUP); //funciona con botón sencillo
matrix.setIntensity(7); // Use a value between 0 and 15 for brightness
//
matrix.setPosition(0, 0, 0); // The first display is at <0, 0>
matrix.setPosition(1, 1, 0); // The second display is at <1, 0>
matrix.setPosition(2, 2, 0); // The third display is at <2, 0>
matrix.setPosition(3, 3, 0); // And the last display is at <3, 0>
matrix.setRotation(0, 1); // Display is position upside down
matrix.setRotation(1, 1); // Display is position upside down
matrix.setRotation(2, 1); // Display is position upside down
matrix.setRotation(3, 1); // Display is position upside down
resetmillis=millis();
//Ponemos el contador a Cero
//escribimos los : (dos puntos que separan minutos, segundos y décimas)
matrix.drawChar(23, 1, tape[10], HIGH, LOW, 1);
matrix.drawChar(9, 1, tape[10], HIGH, LOW, 1);
//Lo ponemos todo a CERO
matrix.drawChar(27, 1, tape[0], HIGH, LOW, 1);
matrix.drawChar(19, 1, tape[0], HIGH, LOW, 1);
matrix.drawChar(13, 1, tape[0], HIGH, LOW, 1);
matrix.drawChar(5, 1, tape[0], HIGH, LOW, 1);
matrix.write(); // Send bitmap to display
}
void loop() {
//Primero dibujamos los 2 puntos tape[10] son los puntos en la cadena tape y 9 y 23 la posición empezando a contar por la izquierda teniendo los pins a la izquierda y el 0 es la tercera columna
//Cada número ocupa 5 espacios, mas 1 de separación a cada lado
//matrix.drawChar(23, 1, tape[10], HIGH, LOW, 1);
//matrix.drawChar(9, 1, tape[10], HIGH, LOW, 1);
if (apretado == 1) {
matrix.drawChar(23, 1, tape[10], HIGH, LOW, 1);
matrix.drawChar(9, 1, tape[10], HIGH, LOW, 1);
int Tmillis=(millis()-resetmillis)/100;
int D = Tmillis/60;
int m = Tmillis/600;
int S = Tmillis/100-m*6;
int s = Tmillis/10-m*60-S*10;
int d = Tmillis-m*600-S*100-s*10;
matrix.drawChar(27, 1, tape[d], HIGH, LOW, 1);
matrix.drawChar(19, 1, tape[s], HIGH, LOW, 1);
matrix.drawChar(13, 1, tape[S], HIGH, LOW, 1);
matrix.drawChar(5, 1, tape[m], HIGH, LOW, 1);
matrix.write(); // Send bitmap to display
}
// if (!digitalRead(buttonPin)) { // Si el botón está pulsado
if (digitalRead(buttonPin)) { // Si el botón está pulsado
if ( suelto == 1 ) {
suelto = 0;
if ( apretado == 1 ) { // Paro el cronómetro
apretado = 0;
}
else { // empieza el cronómetro
apretado = 1;
resetmillis=millis();
}
}
}
else {
suelto = 1;
}
Serial.print("A:");
Serial.print(apretado);
Serial.print(" S:");
Serial.println(suelto);
//delay(500);
}
====== Webserver ======
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse, parse_qs
from datetime import datetime
class MiServidor(BaseHTTPRequestHandler):
def do_GET(self):
# Parsear la URL para obtener los parámetros
url = urlparse(self.path)
params = parse_qs(url.query)
# Obtener el valor de la variable
variable = params.get('variable', None)
if variable is not None:
variable = variable[0]
# Obtener la fecha actual en el formato deseado
fecha_actual = datetime.now().strftime('%Y%m%d')
# Guardar la fecha y el valor de la variable en el archivo
with open('archivo.txt', 'a') as archivo:
archivo.write(f"{fecha_actual} {variable}\n")
# Responder con un código 200
self.send_response(200)
self.end_headers()
return
# Si no se especifica la variable, responder con un código 400
self.send_response(400)
self.end_headers()
def iniciar_servidor():
servidor = HTTPServer(('localhost', 8080), MiServidor)
print('Servidor iniciado en http://localhost:8080')
servidor.serve_forever()
if __name__ == '__main__':
iniciar_servidor()
Se hace una petición:
curl localhost:8080/?variable=3