bonjour,
2 boutons 2 lignes pour tm1637, faible mémoire utilisée, ce serait idéal sur un digispark (clone)
le digispark : à part faire clignoter des leds et des neopixels sans trop de leds ni d'animations en fonction de la taille mémoire, pas tres utile....sans compter que win7 me rappelle sans cesse que le périphérique USB n'est pas reconnu quand je raccorde le digispark, le televersement est ok cependant
je poste le croquis avec beaucoup de commentaires qui indiquent les endroits qui buggent sous digispark, désolé, vu que c'est une application tres spécifique destiné à etre branché en permanence sur un port usb d'un pc uniquement pour l'alimentation 5volts
Merci
// Frankie Chu’s Library for TM1637 Display
// Download this library from the GitHub link shown below
// Put it inside the “arduino/libraries” folder
// https://github.com/reeedstudio/libraries/tree/master/DigitalTube //{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//0~9,A,b,C,d,E,F // Functional for display
/*
minuteur reglable de 15 secondes a 3 minutes
par pas de 15 secondes si on depasse 3 minutes avec le bouton set
il revient a 15 secondes
1 afficheur tm1637
2 boutons + reset a ajouter sur tiny85 et digispark
test UNO OK
test tiny85 non testé
test disgispark bof
*/
#include <TM1637.h>
#include <simpleBouton.h>
// UNO
simpleBouton butt_set(8);
simpleBouton butt_start(9);
#define CLK 4
#define DIO 5
#define Pulse 13 // Alarm Trigger Output
/* DIGISPARK TEST FAILED
pour le digispark ne pas changer les pins pour les
boutons poussoirs car les pb3 et pb4 sonr aussi reliés a des resistances
et zener pour les data usb : perturbations sur les niveaux haut et bas
MEME SI ON ALIMENTE EN 5 VOLTS SANS RELIER A UN PORT USB
simpleBouton butt_set(2); //
simpleBouton butt_start(0);
#define CLK 3
#define DIO 4
#define Pulse 1 // Alarm Output et led builtin digispark
*/
/*
* attiny 45/85 : pins au choix( 0 à 4) sauf pb5 (pin 1 physique)
* réservée au reset
* 8mhz Lfuse :E2 high : DF ext : FF
* 8mhz divide by 8 : Low 62 H df ext ff
* NON TESTE
*/
/*
simpleBouton butt_set(3);
simpleBouton butt_start(4);
#define CLK 0
#define DIO 1
#define Pulse 2 // Alarm Trigger Output
*/
// mettre un bouton reset sur pin1 de l'attiny85 resistance 10k au + 5volts
// bp sur condo 100nf entre pin1 et gnd
int timer_val=0; // variable des minutes
int inter_val=15; // valeur intervalle
int timer_seconds=30; // valeur de depart differente de zero
// sinon l'alarme s'active a l'allumage
// Variables used to store individual numbers
int firstnum=0;
int secondnum=0;
int thirdnum=0;
int fournum=0;
TM1637 tm1637(CLK,DIO); // Create instance of the Display
void affichetemps() {
// fonction affichage
if (timer_val > 9) {
firstnum = timer_val/10%10;
secondnum = timer_val%10;
}
else {
secondnum = timer_val;
}
if (timer_seconds > 9) {
thirdnum = timer_seconds/10%10;
fournum = timer_seconds%10;
}
else {
thirdnum = 0;
fournum = timer_seconds;
}
// Show countdown on 4 digit 7 segment display
tm1637.clearDisplay(); // Clear display
if (timer_val > 9) {
tm1637.display(0,firstnum);
}
if (timer_val > 0) {
tm1637.display(1,secondnum);
}
if (timer_seconds > 9 || timer_val > 0) {
tm1637.display(2,thirdnum);
}
tm1637.display(3,fournum);
} // end affichetemps
void setup(){
pinMode(Pulse, OUTPUT);
digitalWrite(Pulse, LOW);
tm1637.init(); // Display Reset
tm1637.set(2); // Brightness Level
// BRIGHT_DARKEST = 0,BRIGHTEST = 7 BRIGHT_TYPICAL = 2;
tm1637.point(POINT_ON); // Centre "colons" ON
tm1637.clearDisplay();
//
// affichetemps();
// il faut que çà s'arrete ici tant qu'on n'appuye pas sur
// le button set ou start
}
void loop() {
//check buttons
butt_set.actualiser();
butt_start.actualiser();
if (butt_set.vientDEtreRelache()) {
//if (butt_set.vientDEtreEnfonce()) {
affichetemps();
delay(10);
timer_seconds=timer_seconds + inter_val;
/* si on depasse 59 sec timer_val doit etre mis a 1
* et timer_seconds à zero
*/
if (timer_seconds > 59)
{ timer_val= timer_val+1;
timer_seconds=0; }
if ( timer_val==3 && timer_seconds > 0 )
{ timer_val=0; timer_seconds=inter_val; } // si on dépasse 3 min
// revient valeur initiale
}
if (butt_start.vientDEtreRelache()) {
//if (butt_start.vientDEtreEnfonce()) {
do {
affichetemps();
timer_seconds=timer_seconds-1;
delay(1000); // Delay of 1 second
if (timer_seconds == -1) {
timer_val=timer_val-1;
timer_seconds=59;
}
}
while (timer_val > 0 || timer_seconds > 0);
}
// Check if timer is elapsed
// buzzer+aff 0000 on/off 5fois
if (timer_val == 0 && timer_seconds == 0) {
for (int i=0; i <= 5; i++) // on effectue 5 fois ok
{
tm1637.clearDisplay(); // Clear display
tm1637.display(0,0);
tm1637.display(1,0);
tm1637.display(2,0);
tm1637.display(3,0);
digitalWrite(Pulse, HIGH); // Alarm Trigger ON
delay(1000); // Wait
tm1637.clearDisplay();
digitalWrite(Pulse, LOW); // Alarm Trigger OFF
delay(500); // Wait
}
timer_val=0;
timer_seconds = 30; //
affichetemps(); // en placant la fonction ici
// la valeur ne s'affiche pas au reset/demarrage, juste les 2 points restent allumés
// indique que le module est sous tension : appui set la valeur s'incremente du pas 15 (choix de la compilation)
// appui start sans passer par set : affiche 30 puis décompte, apres la fin de l'alarme réaffiche 30
// ce qui est mon choix, pour éteindre l'afficheur appui sur reset
// améliorations possibles : enclencher un relais pendant le décompte
// enregistrer la valeur choisie par set au moment de l'appui sur start
// ce serait cette valeur qui se réafficherait a la fin de l'alarme
// des croquis dans ce sens sont disponibles sur le web
// ne fonctionne pas sur digispark, pas testé sur attiny85 sans bootloader
}
//affichetemps();
// si on le place ici le temps s'affiche au reset
//
} // end loop