Projet Bac

Bonjour

Je suis actuellement lycéen en sti2d (nouvelle sti), et pour le bac nous avons un projet qui consiste en une sonnerie pour le lycée (contrôlé a partir d'une horloge) contrôlé avec une carte arduino Uno et composé d'une carte de restitution du son rmp3 ainsi qu'un module horloge temps réel (ds1307) et si nous progressons assez vite dans le projet on pourrais affiché tout cela sur un écran LCD pour au moins voir l'heure.
Nous sommes maintenant a la phase ou nous essayons de trouvé un programme pour utilisé la carte de restitution du son seule sans forcement envoyé du son a une heure donné et nous avons trouvé le programme sur le forum anglais ou de la musique est envoyé mais en aléatoire, le seul problème est que nous aimerions pouvoir choisir quelle musique est envoyé a quelle heure, donc si vous pouviez m'aider a comprendre comment passé d'une sélection aléatoire a une sélection "manuelle" cela me serais d'une aide précieuse :slight_smile:

P.S: le sketch que j'utilise est un code trouvé sur le forum anglais mais je ne sais pas comment le modifié

#include <RogueSD.h>
#include <RogueMP3.h>
#include <SoftwareSerial.h>

SoftwareSerial rmp3_serial(6, 7);

RogueMP3 rmp3(rmp3_serial);
RogueSD filecommands(rmp3_serial);

int numberOfSongs;
int lastSong;
char path[96];

const char *directory = "/XMAS";


void setup()
{
  Serial.begin(9600);

  Serial.println("Merry Xmas!");

  rmp3_serial.begin(9600);

  rmp3.sync();
  rmp3.stop();

  filecommands.sync();

  // mix up our random number generator
  randomSeed(analogRead(0));

  // get the number of songs available
  strcpy(path, directory);
  strcat(path, "/");
  strcat(path, "*.mp3");  // we have to do this because the IDE thinks that "/*" needs to be terminated everywhere

  numberOfSongs = filecommands.filecount(path);

  lastSong = -1;
}



void playNextSong()
{
  uint8_t i;
  char filename[80];
  char path[96];
  int nextSong = 0;

  if (numberOfSongs > 0)
  {
    // Select our next song randomly
    if (numberOfSongs > 2)
    {
      do
        nextSong = random(numberOfSongs);
      while (nextSong == lastSong);
    }
    else if (numberOfSongs == 2)
    {
      // we only have two songs
      if (lastSong == 0)
        nextSong = 1;
      else
        nextSong = 0;
    }

    // now, get our file name from file list

    filecommands.opendir(directory);

    for (i = 0; i <= nextSong; i++)
    {
      filecommands.readdir(filename, "*.mp3");
    }

    strcpy(path, directory);
    strcat(path, "/");
    strcat(path, filename);

    rmp3.playfile(path);

    Serial.print("Playing: ");
    Serial.println(path);

    lastSong = nextSong;
  }
  else
  {
    Serial.println("No files to play.");
  }
}


void loop()
{
  char c;
  uint8_t i;
  int16_t newtime;

  playbackinfo playinfo;

  char status = 'S';
  uint8_t playing = 1;
  uint8_t volume = 20;
  uint8_t boostOn = false;

  volume = rmp3.getvolume();  // this only gets the left volume
  
  playNextSong();

  while(1)
  {
    while(!Serial.available())
    {
      // we should do fancy stuff like flash lights on our Xmas tree here!
      // got lots of time!
      delay(200);

      status = rmp3.getplaybackstatus();
      playinfo = rmp3.getplaybackinfo();

      if (status == 'S' && playing)
        playNextSong();
    }
    
    // OOH!! got a character!
    c = Serial.read();

    switch(c)
    {
      case 'p':
        // pause
        if(status == 'D')
        {
          // fade in
          rmp3.playpause();
          rmp3.fade(volume, 400);
        }
        else if(status == 'P')
        {
          // fade out
          rmp3.fade(100, 400);
          rmp3.playpause();
        }
        else
        {
          // start playing
          playNextSong();
          playing = 1;
        }
        break;
      case 's':
        rmp3.stop();
        playing = 0;
        break;
      case 'n':
        playNextSong();
        playing = 1;
        break;

      case 'e':
        if(boostOn)
        {
          rmp3.setboost(0);
          boostOn = false;
        }
        else
        {
          rmp3.setboost(8, 6, 7, 3);
          boostOn = true;
        }
        break;
      
      case 'a':
        // jump back 5 seconds
        newtime = playinfo.position - 5;
        if (newtime < 0) newtime = 0;
        rmp3.jump(newtime);
        break;

      case 'd':
        // jump forward 5 seconds
        rmp3.jump(playinfo.position + 5);
        break;
        
      case 'k':
        if(volume < 254) volume++;
        if(status != 'D') rmp3.setvolume(volume);
        break;

      case 'i':
        if(volume > 0) volume--;
        if(status != 'D') rmp3.setvolume(volume);
        break;

    }
  }
}

Bonjour
Je crois qu'en premier lieu, il faut organiser vos fichier .mp3 sur la carte SD, par exemple:
/sonnerie/s/hh-mm.mp3 ou s est le jour de la semaine (1 >7), on suppose que suivant le jour de la semaine la sonnerie ne retentit pas toujours à la même heure (samedi, dimanche). hh-mm.mp3 le nom de la sonnerie qui doit retentir à hh heure, mm minutes. Vous aurez certainement plusieurs fichiers identiques (même sonnerie à des jours différents) mais avec une carte sd de 32 G il y a de quoi mettre.
En supposant que vous n'ayez besoin que d'une précision de 5 minutes; toutes les 5 minutes avec les données venant de votre horloge, vous créez l'adresse (chemin et nom) du fichier correspondant à cette heure soit par exemple: /sonnerie/3/08-30.mp3 pour mercredi à 08 h 30. Si le fichier correspondant n'existe pas, la carte RMP3 renverra un code d'erreur que l'on ignore.
à suivre...
A+

Dans ton code c'est la ligne
nextSong = random(numberOfSongs);
qui choisit un numéro de chanson au hasard (entier compris entre 0 et numberOfSongs)
A remplacer là par un choix explicite.

Bon je sais bien, c'est hors charte, en plus c'est pas dans l'air du temps,
Mais, pour passer le bac, un petit effort sur le participe passé et l'infinitif ça éviterait de dévaloriser l'institution.
Un peu de travail et de recherches personnelles ?
Ca vous donne des armes pour la vraie vie et ça vous rend moins bête.
C'est pas avec les forums que tu construiras ton avenir.

Merci a vous deux et a l'aide que vous m'avez apporté j'essayerais ça et je vous dirais ce qu'il en est :slight_smile:

Mais, pour passer le bac, un petit effort sur le participe passé et l'infinitif ça éviterait de dévaloriser l'institution.

je sais que je fais des fautes mais contrairement a certains je fait au moins l'effort d’écrire en toute lettre et pas en langage SMS

Un peu de travail et de recherches personnelles ?
Ca vous donne des armes pour la vraie vie et ça vous rend moins bête.

Je ne vois pas a quel moment j'ai dis que je n'avais fait aucune recherches, j'en ai fait justement et les informations que j'ai trouvé n’était pas assez satisfaisantes pour être utile. Je viens justement sur ce forum parce que les gens connaisse l'arduino ainsi que leur programme et peuvent m'aider. Ma dernière épreuve pour mon projet de bac se déroule dans un mois donc je viens sur ce forum pour essayé de gagner un peu de temps mais maintenant si vous avez un quelconque site ou je peux avoir des information intéressante et ou je "travaillerais plus" je suis preneur aussi.