Bonjour,
Je construis un bateau RC et je veux concevoir moi même la radiocommande et le récepteur mais je rencontre un problème, le servo ne fonctionne pas malgré la bonne reception des données.
Pour cela j'utilise
Radiocommande:
-arduino nano
-Module NRF905 (868MHz)
-2 joysticks (j'utilise uniquement 1 potard par joystick)
-1 potentiomètre 5k (pour ajuster la direction)
Recepteur:
-arduino uno (pour les tests)
-Module NRF905 (868MHz)
-un servo (modèle 9g)
-ESC (pas encore connecté)
Code TX:
#include <NRF905.h>
#include <SPI.h>
#include <Servo.h>
#define BUF_LEN 2 // Taille du buffer (max 32 octets)
#define CONF_LEN 10
#define NRF905_CSN 10
unsigned char tx_buf[BUF_LEN];
unsigned char read_config_buf[CONF_LEN];
byte tx_address[4]= {0xcc,0xcc,0xcc,0xcc};
int JoystickDir = A1; //joystick direction
int CmdDir; // valeur recu pour agir sur le servo
void setup()
{
unsigned char i;
pinMode(NRF905_CSN,OUTPUT); //to make sure SPI works
nrf905=NRF905(NRF905_CSN);
nrf905.init();
nrf905.write_config(EUROPE);
nrf905.read_config(read_config_buf);
Serial.begin(9600);
/** Affiche la config du nRF905 */
for(i=0; i<10; i++)
{
Serial.print(read_config_buf[i],HEX);
Serial.print(' ');
}
// tx_buf[12] = '0';
}
void loop()
{
CmdDir = analogRead (JoystickDir); // lecture joystick
CmdDir = map(CmdDir, 0, 1023, 0, 180); // conversion pour controle servo
tx_buf[1] = CmdDir; // enregistre la valeur dans le buffer
nrf905.TX(tx_buf); // envoie données du buffer
Serial.println (tx_buf[1]); // affiche la valeur envoyé
delay(50);
}
Pour le moment je test juste de diriger un servo
Code Rx
#include <Servo.h>
#include <NRF905.h>
#include <SPI.h>
#define BUF_LEN 2
#define CONF_LEN 10
Servo dir;
int dirPin =6;
int rxDir;
unsigned char rx_buf[BUF_LEN];
unsigned char read_config_buf[CONF_LEN];
unsigned char rx_address[4]= {0xcc,0xcc,0xcc,0xcc};
void setup()
{
dir.attach(dirPin);
pinMode(10,OUTPUT);
nrf905=NRF905(10);
nrf905.init();
nrf905.write_config(EUROPE);
nrf905.read_config(read_config_buf);
Serial.begin(9600);
char i;
/** vérif config NRF905 */
for(i=0; i<CONF_LEN; i++){
Serial.print(read_config_buf[i],HEX);
Serial.print(' ');
}
}
void loop()
{
nrf905.RX(rx_buf);
rxDir = rx_buf[1];
dir.write(rxDir); // controle du servo
delay(15);
Serial.print("Direction =");
Serial.println(rxDir);
delay(15);
}
Donc le problème c'est que le servo s'initialise bien mais avec la reception du buffer plus rien ne se passe sur le servo mais la reception est là et varie bien suivant la position du joystick.
J'ai vu un post sur le forum qui traite sur un conflit niveau timer, j'ai cherché dans les librairies que j'utilise mais je vois que la lib servo qui utilise le timer
J'ai malgré tout teste avec la librairie servoTimer2 mais le problème est pire, le programme ne tourne plus...
J'ai bientôt plus de cheveu c'est pour cela que je sollicite la communauté "Help me"