TX/RX problème avec un module

Salut à tous,

j’ai commandé sur DX un module qui permet d’émettre de la musique sur une bande fréquence, le VMR6512.
Datasheet : http://www.voti.nl/docs/VMR6512.pdf

Ce module possède 2 pin : RX et TX qui peuvent communiquer avec l’arduino.
Cependant je n’arrive pas trop à “parler” avec.

J’aimerais en faite afficher la fréquence sur laquelle on émet, sur un afficheur LCD.
Pour cela, j’ai commencé à coder ce truc simpliste :

#include <LiquidCrystal.h>

LiquidCrystal lcd(8,9,4,5,6,7);

void setup()
{
  Serial.begin(19200);
  lcd.begin(16,2);
}

void loop()
{
  if (Serial.available())
  {
    delay(100);
    
    lcd.clear();
    
    while (Serial.available() > 0)
    {
      lcd.print(byte(Serial.read()));
    }
    
    delay(100);
  }
  
  Serial.write(0x01);
  Serial.write((byte)0x00);
  Serial.write((byte)0x00);
}

Donc déjà, ce code fonctionne, il m’affiche des 0 et des 1 sur mon afficheur LCD.
Par contre, chose étrange, ça m’affiche à chaque fois un nombre différent alors que je ne change pas de fréquence, je touche à rien! Vous avez une explication ?

J’ai mis :

Serial.write(0x01);
  Serial.write((byte)0x00);
  Serial.write((byte)0x00);

Car d’après le datasheet il faut envoyer 0x00 et 0x00 pour que le module envoie à la carte arduino la fréquence. ( si j’ai tout bien compris )

Vous avez pas une petite idée à mon problème ?
Si vous voulez plus de précision … dites, mais je crois avoir tout dit.

Merci, bonne soirée :wink:

J’ai mis :

Serial.write(0x01);

Serial.write((byte)0x00);
Serial.write((byte)0x00);




Car d'après le datasheet il faut envoyer 0x00 et 0x00 pour que le module envoie à la carte arduino la fréquence. ( si j'ai tout bien compris )

Là tu envoie 0x01 et 0x00 (x2) or je ne vois pas où tu dis “il faut envoyer 0x01 puis …” .
T’es sur que ça viens pas de là ? Ou alors j’ai rien compris ><

Effectivement, j'ai pas précisé mais il faut bien envoyer un "0x01" et ensuite 2 x 0x00.

Dans la datasheet je ne vois pas de mode “lecture”. Tu ne peux que configurer un paramètre et à ce moment la le module te renvoi ce que tu viens de configurer s’il n’y a pas eu de problème.

Un mode lecture ?

"Operating frequency
Fo = 10kHz x (D1x256 + D0) Hz.
The default value is 0x2710 (100.0MHz)
If D1 = D0 = 0x00, then it will return to the current frequency."

Je pense que c'est ça, non ?

up

La fréquence par défaut est 100MHz. Est-ce qu'il émet bien sur cette fréquence?
Si ça se trouve la fréquence change (broche up/down en l'air par exemple)

Il émet bien sur cette fréquence :expressionless:

je me permet de UP .. projet qui n'a toujours pas abouti

Bonjour,

Voila de quoi t’aider :

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
  Serial.begin(19200);
  lcd.begin(16, 2);
}

void loop() {

  delay(500);
  
// Commande lecture fréquence
  Serial.write(0x01);
  Serial.write((byte)0x00);
  Serial.write((byte)0x00);
  
// Attente octet de réponse
  while (!Serial.available());
  if(Serial.read() != 0x80) return; // Test erreur / succès
  
// Lecture des deux octets de paramètres
  while (Serial.available() < 2);
  byte D1 = Serial.read();
  byte D0 = Serial.read();
  unsigned int fo = (D1 << 8) + D0; // Calcul de la fréquence en multiple de 10KHz
  
// Affichage (en MHz avec virgule pour faire jolie)
  lcd.clear();
  lcd.print(fo / 100.0);
  lcd.print(F("MHz"));
}

Salut skywodd, merci de ta réponse!

concernant ton code source,

à cet endroit :

// Attente octet de réponse
  while (!Serial.available());
  if(Serial.read() != 0x80) return; // Test erreur / succès

ça bloque : rien ne s'affiche sur le LCD..

// Commande lecture fréquence
  Serial.write(0x01);
  Serial.write((byte)0x00);
  Serial.write((byte)0x00);

ça viendrait donc d'ici .. ? c'est pourtant la bonne méthode d'après la datasheet

Essaye avec ça :

while (Serial.available() < 1);
byte b = Serial.read();
if(b != 0x80) {
  lcd.clear();
  lcd.print(b, HEX);
  return;
}

Oui, j'ai un "0" qui s'affiche continuellement , c'est qu'il y a une erreur..

// Commande lecture fréquence
  Serial.write(0x01);
  Serial.write((byte)0x00);
  Serial.write((byte)0x00);

Pensez-vous que c'est la bonne méthode ??

Kouaaks:
Oui, j'ai un "0" qui s'affiche continuellement , c'est qu'il y a une erreur..

Tente d'envoyer :
0x01 0x27 0x10 (fo = 100MHz)
Et voir ce qu'il répond.

Kouaaks:
Pensez-vous que c'est la bonne méthode ??

Ben je vois pas d'autre méthode en fait ...

Je ne pouvais pas obtenir la fréquence de jeu, 0x01 0x00 à 0x00 que commande la spec dit, vous devez avoir une erreur dans la spécification. :~