Arduino FM

Bonjours, je viens d’acquérir un module FM 5807M, mais je n’est toujours pas reçu mes haut-parleurs, j’ai quand même décidée de brancher le module à l’arduino et voir le retour, j’ai mis le fameux TEST.ino de la library Radio ( Voir plus-bas ).
Mais mon retour me parais bizzard :
Pourquoi j’ai rien dans le retour visuel de la Radio et de l’Audio alors que j’ai un RSSI positif

Radio…

setFrequency(8930)
-_saveRegister(0x2, 0xC009)
-_saveRegister(0x3, 0x5D0)
-_saveRegister(0x5, 0x9081)
-_saveRegister(0x5, 0x9084)
-_saveRegister(0x2, 0xC009)
-_saveRegister(0x2, 0xC009)
Station:118.90 MHz
Radio: — ----- MONO RSSI: 0 SNR: 0
Audio: ---- ---- --------
Station: 89.30 MHz
Radio: — ----- MONO RSSI: 14 SNR: 0
Audio: ---- ---- --------
Station: 89.30 MHz
Radio: — ----- MONO RSSI: 14 SNR: 0

///
/// \file  TestRDA5807M.ino
/// \brief An Arduino sketch to operate a SI4705 chip based radio using the Radio library.
///
/// \author Matthias Hertel, http://www.mathertel.de
/// \copyright Copyright (c) 2014 by Matthias Hertel.\n
/// This work is licensed under a BSD style license. See http://www.mathertel.de/License.aspx
///
/// \details
/// This sketch implements a "as simple as possible" radio without any possibility to modify the settings after initializing the chip.\n
/// The radio chip is initialized and setup to a fixed band and frequency. These settings can be changed by modifying the 
/// FIX_BAND and FIX_STATION definitions. 
///
/// Open the Serial console with 57600 baud to see the current radio information.
///
/// Wiring
/// ------ 
/// The RDA5807M board/chip has to be connected by using the following connections:
/// | Arduino UNO pin    | Radio chip signal  | 
/// | -------------------| -------------------| 
/// | 3.3V (red)         | VCC                | 
/// | GND (black)        | GND                | 
/// | A5 or SCL (yellow) | SCLK               | 
/// | A4 or SDA (blue)   | SDIO               | 
/// The locations of the pins on the UNO board are written on the PCB.
/// The locations of the signals on the RDA5807M side depend on the board you use.
///
/// More documentation and source code is available at http://www.mathertel.de/Arduino
///
/// ChangeLog:
/// ----------
/// * 05.12.2014 created.
/// * 19.05.2015 extended.

#include <Arduino.h>
#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>

// ----- Fixed settings here. -----

#define FIX_BAND     RADIO_BAND_FM   ///< The band that will be tuned by this sketch is FM.
#define FIX_STATION  8930            ///< The station that will be tuned by this sketch is 89.30 MHz.
#define FIX_VOLUME   4               ///< The volume that will be set by this sketch is level 4.

RDA5807M radio;    // Create an instance of Class for RDA5807M Chip

/// Setup a FM only radio configuration
/// with some debugging on the Serial port
void setup() {
  // open the Serial port
  Serial.begin(57600);
  Serial.println("Radio...");
  delay(200);

  // Initialize the Radio 
  radio.init();

  // Enable information to the Serial port
  radio.debugEnable();

  // Set all radio setting to the fixed values.
  radio.setBandFrequency(FIX_BAND, FIX_STATION);
  radio.setVolume(FIX_VOLUME);
  radio.setMono(false);
  radio.setMute(false);
} // setup


/// show the current chip data every 3 seconds.
void loop() {
  char s[12];
  radio.formatFrequency(s, sizeof(s));
  Serial.print("Station:"); 
  Serial.println(s);
  
  Serial.print("Radio:"); 
  radio.debugRadioInfo();
  
  Serial.print("Audio:"); 
  radio.debugAudioInfo();

  delay(3000);
} // loop

// End.

Toujours personne pour m'aider ?

patience..... d'autant plus que peu de bénévoles içi paraissent utiliser les puces radio FM. Il faut savoit attendre sans relancer (NB la relance, 'up' ou équivalent, n'est pas autorisée sur ce forum)

La patience....

Les infos qui manquent dans le débug radio sont le RDS et un indicateur appelé TUNED, lié peut-être au fait qu'il capte une station.

Pour le débug audio,c'est BASS, MUTE, SOFTMUTE. Pour qu'il t'affiche quelque chose ici tu dois utiliser auparavant des méthodes comme setMute, setBassBoost, setSoftMute.

Bonjour,
Je me permet de relancer ce sujet.
J’ai moi aussi fait l’acquisition d’un module FM RDA5807M, j’ai effectué mon montage avec une arduino NANO, j’utilise le même sketch qu’ Atmosphire en fixant la variable FIX_STATION sur
10130 (RTL). Tout fonctionne parfaitement !
Maintenant je voudrai pouvoir changer de station avec un potentiomètre ou un bouton poussoir mais le problème c’est que mes connaissances au niveau du montage, du langage C et de la classe RDA5807M.h sont très limitées !
Aussi, je sollicite votre aide et remercie par avance ceux ou celles qui voudront bien m’aider.

J’ai trouvé, il suffit d’installer un bouton poussoir (en fait il en faut deux) puis d’insérer le code suivant :
void loop() {
buttonState = digitalRead(buttonPin);

 if (buttonState == HIGH) {

//radio.seekUp();
radio.seekDown();

}

} // loop

Super !
Comme quoi, même avec des connaissances limités on peut y arriver.

Merci fdufnews.
J’ai un autre problème maintenant.
Je cherche à augmenter le volume avec un troisième bouton poussoir avec ce code

// Verifie si on appui sur le bouton 3
if (buttonState3 == HIGH) {

volume = EEPROM.read(201);
volume = volume + 1;
radio.setVolume(volume);
EEPROM.write(201,volume);
Serial.print(EEPROM.read(201));

}
J’ai essayé sans utiliser la mémoire morte et avec mais dans les deux cas
le volume ne s’incrémente pas de 1 après appui sur le bouton 3
Je n’ai pas encore codé les limites de 0 à 15 pour ce volume, le but étant dans un premier temps
de tester son incrémentation de 1.

Merci par avance à celui ou celle qui voudra bien m’aider.

Tu n’es pas très précis, il incrémente ou il incrémente pas? et si oui, de combien?

En fait je crois avoir compris d’où vient le problème
l’incrémentation du volume (volume++;) à la condition que le bouton 3 soit pressé se produit plusieurs fois au lieu d’une !
Mais je n’ai pas de solution.

si je presse une fois le bouton 3, la valeur de la variable volume passe à 29 au lieu de 4.

Bonjour,

Il faut que tu testes si le bouton vient d’être enfoncé.
Pour cela il faut que tu testes si l’état du bouton est différent de l’état précédent (que tu auras mémorisé au précédent appel de loop())

J’ai trouvé, il faut mettre un “delay”

if (buttonState3 == HIGH) {
//volume = EEPROM.read(201);
volume++;
radio.setVolume(volume);
Serial.print(radio.getVolume());
delay(200);
//radio.setVolume(volume);
// EEPROM.write(201,volume);
//Serial.print(volume);
//radio.setMute(true);
//radio.setVolume(volume);
}
Probablement que pendant la durée de l’appui sur le bouton le code s’exécute plusieurs fois d’où l’obligation de temporiser par l’instruction “delay”. Cela est peut-être du au fait que l’on travail dans une boucle permanente…

Non, ce doit être du au temps de pression sur le bouton. Du moins c’est ce que je suppose.

Merci à fdunews et kamil.
Mon projet est terminé, il ne reste plus qu’à souder sur une carte universelle !

C’est une mauvaise solution. Tu incrémentes de plusieurs points parce que si tu tiens le bouton appuyé trop longtemps tu passes plusieurs fois dans la boucle.
Le delay(200) ne fait que déplacer le problème. Si tu tiens le bouton un peu plus que 200ms tu retrouveras le même comportement.
Il faut tester à la fin de ton if si le bouton est toujours appuyé et attendre que l’opérateur le relâche pour continuer.

if (buttonState3 == HIGH) {
//volume = EEPROM.read(201);
volume++;
radio.setVolume(volume);
Serial.print(radio.getVolume());
//radio.setVolume(volume);
// EEPROM.write(201,volume);
//Serial.print(volume);
//radio.setMute(true);
//radio.setVolume(volume);
while (buttonState3 == HIGH) ; //attend que le bouton soit relâché pour continuer
}

Bonjour fdufnews,
Mon programme ne fonctionne pas avec l’instruction while placée à la fin de mon if.
Avec ces instructions, il semble fonctionner correctement ; de plus si on laisse le doigt sur le bouton + ou -, le volume augmente ou diminue en s’arrêtant aux limites (0 ou 15)
// Verifie si on appui sur le bouton 3
if (buttonState3 == HIGH) {

volume++;

if (volume >15) volume = 15;

radio.setVolume(volume);
Serial.print(radio.getVolume());
//while (buttonState3 == HIGH) ;
delay(200);

}

// Verifie si on appui sur le bouton 4

if (buttonState4 == HIGH) {

volume–;
if (volume < 0) volume = 0;

radio.setVolume(volume);
Serial.print(radio.getVolume());
//while (buttonState4 == HIGH) ;
delay(200);

}

Merci à vous deux.