Bonjour,
J’ai écrit un programme en utilisant une carte arduino uno, un afficheur 7 segments 4 digits, un haut-parleur de 4 Ω 3, un DFPlayer Mini Mp3 Player et un capteur IR pour fabriquer un réveil.
/*0xBA45FF00 //CH-
0xB946FF00 //CH
0xB847FF00 //CH+
0xBB44FF00 //|<<
0xBF40FF00 //>>|
0xBC43FF00 //>||
0xF807FF00 //-
0xEA15FF00 //+
0xF609FF00 //EQ
0xE916FF00 //0
0xE619FF00 //100+
0xF20DFF00 //200+
0xF30CFF00 //1
0xE718FF00 //2
0xA15EFF00 //3
0xF708FF00 //4
0xE31CFF00 //5
0xA55AFF00 //6
0xBD42FF00 //7
0xAD52FF00 //8
0xB54AFF00 //9*/
#include "TimerOne.h"
#include "IRremote.hpp"
#include "DFRobotDFPlayerMini.h"
#include "Arduino.h"
#include "SoftwareSerial.h"
SoftwareSerial softSerial(/*rx =*/3, /*tx =*/2);
#define FPSerial softSerial
#define a 5
#define b 6
#define c 7
#define d 8
#define e 9
#define f 10
#define g 11
#define dp 12
#define d1 A1
#define d2 A2
#define d3 A3
#define d4 A4
#define IR_RECEIVE_PIN 4
#define DECODE_NEC // Includes Apple and Onkyo
unsigned char h = 0; //dizaine d'heure
unsigned char i = 4; //unité d'heure
unsigned char j = 4; //dizaine de minutes
unsigned char k = 4; //unité de minutes
unsigned char l = 0; //secondes
unsigned char q = 0; //dizaine d'heure (alarme)
unsigned char r = 4; //unité d'heure (alarme)
unsigned char s = 4; //dizaine de minutes (alarme)
unsigned char t = 5; //unité de minutes (alamre)
int z = 0;
DFRobotDFPlayerMini myDFPlayer;
void setup() {
pinMode(2, INPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
Serial.begin(115200); // // Establish serial communication
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver
Timer1.initialize(1000000);
Timer1.attachInterrupt(horloge);
}
void loop() {
if (IrReceiver.decode()) {
if (IrReceiver.decodedIRData.decodedRawData == 0xBA45FF00) { //CH-
while (z <= 200) {
clearLEDs();
pickDigit(0);
pickNumber(h);
delay(5);
clearLEDs();
pickDigit(1);
pickNumber(i);
delay(5);
clearLEDs();
pickDigit(2);
pickNumber(j);
delay(5);
clearLEDs();
pickDigit(3);
pickNumber(k);
delay(5);
z++;
}
}
z = 0;
clearLEDs();
if (IrReceiver.decodedIRData.decodedRawData == 0xF30CFF00) { //1
h++;
if (h > 2) {
h = 0;
}
Serial.println("h:");
Serial.println(h);
}
if (IrReceiver.decodedIRData.decodedRawData == 0xE718FF00) { //2
i++;
if (i > 9) {
i = 0;
}
Serial.println("i:");
Serial.println(i);
}
if (IrReceiver.decodedIRData.decodedRawData == 0xA15EFF00) { //3
j++;
if (j > 5) {
j = 0;
}
Serial.println("j:");
Serial.println(j);
}
if (IrReceiver.decodedIRData.decodedRawData == 0xF708FF00) { //4
k++;
if (k > 9) {
k = 0;
}
Serial.println("k:");
Serial.println(k);
}
if (IrReceiver.decodedIRData.decodedRawData == 0xE916FF00) { //0
l = 0;
Serial.println("l:");
Serial.println(l);
}
if (IrReceiver.decodedIRData.decodedRawData == 0xE31CFF00) { //5
q++;
if (q > 2) {
q = 0;
}
Serial.println("q:");
Serial.println(q);
}
if (IrReceiver.decodedIRData.decodedRawData == 0xA55AFF00) { //6
r++;
if (r > 9) {
r = 0;
}
Serial.println("r:");
Serial.println(r);
}
if (IrReceiver.decodedIRData.decodedRawData == 0xBD42FF00) { //7
s++;
if (s > 5) {
s = 0;
}
Serial.println("s:");
Serial.println(s);
}
if (IrReceiver.decodedIRData.decodedRawData == 0xAD52FF00) { //8
t++;
if (t > 9) {
t = 0;
}
Serial.println("t:");
Serial.println(t);
}
if (IrReceiver.decodedIRData.decodedRawData == 0xE619FF00) { //+100
Serial.println("absence d'alarme");
}
if (IrReceiver.decodedIRData.decodedRawData == 0xF20DFF00) { //+200
Serial.println("présence d'alarme");
}
if (IrReceiver.decodedIRData.decodedRawData == 0xB946FF00) { //CH
Serial.println("allumer la led");
}
IrReceiver.resume(); // Enable receiving of the next value
}
if (q == h && r == i && s == j && t == k) { //problème avec ce bloc pour activer l'alarme
myDFPlayer.volume(10);
myDFPlayer.play(1);
}
}
void pickDigit(int x) {
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
switch (x) {
case 0: digitalWrite(d1, LOW); break;
case 1: digitalWrite(d2, LOW); break;
case 2: digitalWrite(d3, LOW); break;
default: digitalWrite(d4, LOW); break;
}
}
void pickNumber(int x) {
switch (x) {
default: zero(); break;
case 1: one(); break;
case 2: two(); break;
case 3: three(); break;
case 4: four(); break;
case 5: five(); break;
case 6: six(); break;
case 7: seven(); break;
case 8: eight(); break;
case 9: nine(); break;
}
}
void clearLEDs() {
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void zero() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
void one() {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void two() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void three() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
void four() {
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void five() {
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void six() {
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void seven() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
void eight() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void nine() {
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void horloge() {
l++;
if (l == 60) {
k++;
l = 0;
}
if (k == 9 && l == 59) {
delay(1000);
j++;
l = 0;
k = 0;
}
if (j == 5 && k == 9 && l == 58) {
delay(2000);
i++;
l = 0;
k = 0;
j = 0;
}
if (i == 9 && j == 5 && k == 9 && l == 57) {
delay(3000);
h++;
i = 0;
j = 0;
k = 0;
l = 0;
}
if (h == 2 && i == 3 && j == 5 && k == 9 && l == 56) {
delay(4000);
h = 0;
i = 0;
j = 0;
k = 0;
l = 0;
}
}
Mais je rencontre plusieurs problèmes, lorsque je met ces lignes de codes :
if (q == h && r == i && s == j && t == k) {
myDFPlayer.volume(10);
myDFPlayer.play(1);
}
En effet, la valeur de “k” ne s’incrémente plus et lorsque je les enlève (les lignes de codes) la valeur de “k” s’incrémente. De plus le DFPlayer Mini Mp3 Player joue la mélodie que pendant une durée d’une seconde et ne joue pas la mélodie complète.
Que pensez-vous de mon programme ? Auriez-vous des améliorations à apporter ? Si oui lesquels ? Et est-il possible d’utiliser le module d’horloge DS1302 avec l’afficheur 7 segments 4 digits ? Si oui pouvez-vous m’orienter ?
Merci par avance pour vos réponses
