Go Down

Topic: Alarme Arduino, problème avec l'afficheur 7 segments (Read 316 times) previous topic - next topic

PCov3r

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 ( https://github.com/DeanIsMe/SevSeg ), DS3231 ( https://github.com/jarzebski/Arduino-DS3231 ) et BY8001 ( https://github.com/r0ndL/BY8001 ).

Voici mon code :
Code: [Select]

#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.

infobarquee

bonjour,
tu mets des sevseg.refreshDisplay un peu partout et je pense que cela doit jouer.
vires le sevseg.refreshDisplay en début de ton loop et les 2 dans ton void Volume
AUCUNE AIDE PAR MP

PCov3r

Bonjour,

J'ai finalement trouvé le problème. Il vient bien de la communication Serial avec le module mp3.

En effet, lorsque j'envoie la commande de mise à niveau du volume à ce dernier, l'arduino ne peut gérer en même temps l'affichage de l'heure, d'où ce clignotement.

Me voilà donc coincé car je ne vois pas comment gérer ces deux éléments à la fois et je ne suis même pas sûr que cela soit possible.

Go Up