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
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.
B_tto
May 3, 2013, 7:16pm
#4
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 ?
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
system
August 14, 2013, 6:29pm
#9
je me permet de UP .. projet qui n'a toujours pas abouti
skywodd
August 14, 2013, 9:47pm
#10
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"));
}
system
August 14, 2013, 11:45pm
#11
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
skywodd
August 15, 2013, 8:07am
#12
Essaye avec ça :
while (Serial.available() < 1);
byte b = Serial.read();
if(b != 0x80) {
lcd.clear();
lcd.print(b, HEX);
return;
}
system
August 15, 2013, 9:16am
#13
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 ??
skywodd
August 15, 2013, 6:49pm
#14
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 ...
system
June 9, 2014, 8:50pm
#15
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. :~