Bonjour/Bonsoir,
Étant quelque peu novice en programmation j'aurais besoin d'un peu d'aide pour compléter mon code et l'améliorer.
Je vous explique le problème, j'ai dans l'idée de réaliser un réveil sous Arduino à l'aide d'un afficheur 4 digits, d'un module rtc DS3231 et d'un module mp3 BY8001-16P. Mon projet est de réaliser un réveil qui chaque matin sonnerait avec les musiques enregistrées sur la carte sd du module BY8001.
Je me suis jusque là plutôt bien débrouillé puisque mon afficheur 4 digits m'affiche bien l'heure et le réveil sonne à l'heure programmée. Le seul problème que je n'arrive pas à résoudre est celui du volume. J'ai installé un potentiomètre pour régler celui auquel l'alarme doit sonner. Mais lorsque je le tourne, l'afficheur se met à clignoter. Je pense qu'il pourrait s'agir d'un problème de segments non "rafraichis" par la carte car cette dernière est occupée à gérer le réglage de volume.
Je précise que j'utilise les librairies sevseg ( GitHub - DeanIsMe/SevSeg: Seven segment display controller library for Arduino ), DS3231 ( GitHub - jarzebski/Arduino-DS3231: DS3231 Real-Time-Clock ) et BY8001 ( GitHub - theFPVgeek/BY8001: Arduino library for BY8001-16P and BY8301-16P MP3 modules ).
Voici mon code :
#include <SevSeg.h>
#include <DS3231.h>
#include <BY8001.h>
#include <Wire.h>
#include <SoftwareSerial.h>
SevSeg sevseg; //Instantiate a seven segment object
DS3231 clock;
RTCDateTime dt;
SoftwareSerial mp3Serial(19, 18);
BY8001 mp3;
const int HButton = 2;
const int MButton = 4;
const int SetTButton = 3;
const int SetAButton = 5;
const int ActivateA = 6;
int CurrentHour = 0;
int CurrentMin = 0;
int lastButtonTState = 0;
int ButtonTState = 0;
int ButtonHState = 0;
int lastButtonHState = 0;
int ButtonMState = 0;
int lastButtonMState = 0;
int lastButtonAState = 0;
int ButtonAState = 0;
int HeureChoisie = 0;
int MinChoisie = 0;
int buttonStateActivateA = 0;
int alarmState = 0;
unsigned long previousMillis = 0;
byte CurrentStatus = 0;
int song_number = 0;
const int AnodeColon = 8;
const int CathodeColon = 52;
const int potPin = A2; // select the input pin for the potentiometer
int val = 0; // variable to store the value coming from the sensor
int previousval = 0;
void setup() {
Wire.begin();
// Music
Serial.begin(9600); // set serial monitor baud rate to Arduino IDE
mp3Serial.begin(9600); // BY8001 set to 9600 baud (required)
mp3.setup(mp3Serial); // tell BY8001 library which serial port to use.
delay(800); // allow time for BY8001 cold boot; may adjust depending on flash storage size
pinMode(HButton, INPUT);
pinMode(MButton, INPUT);
pinMode(SetTButton, INPUT);
pinMode(SetAButton, INPUT);
pinMode(ActivateA, INPUT);
byte numDigits = 4;
byte digitPins[] = {48, 46, 44, 42};
byte segmentPins[] = {34, 38, 32, 30, 28, 40, 36, 26};
bool resistorsOnSegments = true; // 'false' means resistors are on digit pins
bool updateWithDelays = false; // Default. Recommended
bool leadingZeros = true; // Use 'true' if you'd like to keep the leading zeros
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
sevseg.setBrightness(50);
pinMode(AnodeColon, OUTPUT);
pinMode(CathodeColon, OUTPUT);
clock.begin();
// Set sketch compiling time
clock.armAlarm1(false);
clock.clearAlarm1();
clock.armAlarm2(false);
clock.clearAlarm2();
mp3.setVolume(15);
}
void loop() {
Volume();
setColon();
sevseg.refreshDisplay();
if(alarmState == 1) {
AfficherH_A();
}
else if(alarmState == 0) {
AfficherH();
}
MiseaHeure();
AlarmSet();
AlarmActivate();
CheckAlarms();
sevseg.refreshDisplay();
}
//Fonction définir volume
void Volume() {
sevseg.refreshDisplay();
val = analogRead(potPin);
val = map(val, 0, 1023, 0, 30);
if(val != previousval){
mp3.setVolume(val);
sevseg.refreshDisplay();
previousval = val;
}
sevseg.refreshDisplay();
}
Merci pour toute aide et bonne journée/soirée.
Je tiens à préciser que je n'ai pu mettre en ligne que la partie du code me posant problème tant ce dernier est volumineux (il me fait excéder la limite des 9000 caractères). Si il est besoin, je pourrais poster les parties manquantes par la suite.