bonsoir à tous ,
je suis sur le point de finaliser un projet et je ''bute'' sur un petit souci au niveau d'une boucle "For'' :
le projet est de commander 6 servos moteur via 2 potentiométre qui envoie leur valeur par module NRF 24 d'une autre carte arduino .
la liaison en entre modules et l'envoie de données ( 0 à 1023 ) fonctionne parfaitement sur les 2 potentiomètres ( ''valeur ''et'' valeurB'' ) j'ai vérifié avec un serial Print !
le potentiomètre N°1 agit bien sur le controle des servos
Cependant avec le deuxième potentiomètre , je voulais faire un MVT de balayage : un allé / un retour
si la valeur du potentiomètre N°2 dépassait ''800'' à l'aide d'une boucle ''For"
et quand je passe en dessous de cette valeur , la boucle stop ( la condition n'étant plus remplie ) !
et bien justement , quand je passe en dessous de la valeur 800 , le cycle se répète 4 fois ?
avant de stopper .... étrange
je pensais qu' une fois le cycle d'aller / retour était passé , la carte allait de nouveau lire la valeur : _radioData.ValeurB , rentrer dans la boucle ou non
je vous joint le code en PJ
merci d'avance pour votre aide
cordialement
#include<Servo.h>
#include <SPI.h>
#include <NRFLite.h>
Servo myservoA;
Servo myservoB;
Servo myservoC;
Servo myservoD;
Servo myservoE;
Servo myservoF;
const static uint8_t RADIO_ID = 0;
const static uint8_t PIN_RADIO_CE = 9;
const static uint8_t PIN_RADIO_CSN = 10;
struct RadioPacket // Packet de données envoyé,
{
uint32_t Valeur;//variable Valeur codée sur 32 bit
uint32_t ValeurB;
};
NRFLite _radio; //Déclaration du module NRF
RadioPacket _radioData;//Déclaration du packet de données
void setup()
{
Serial.begin(9600);
myservoA.attach(A0);
myservoA.write(10);
myservoB.attach(A1);
myservoB.write(10);
myservoC.attach(A2);
myservoC.write(10);
myservoD.attach(A3);
myservoD.write(10);
myservoE.attach(A4);
myservoE.write(10);
myservoF.attach(A5);
myservoF.write(10);
if (!_radio.init(RADIO_ID, PIN_RADIO_CE, PIN_RADIO_CSN))//si l'initialisation du module n'est pas finie
{
Serial.println("L'arduino ne peut pas communiquer avec le module ");
while (1); // Attend
}
Serial.println("Setup fini");
}
void loop()
{
while (_radio.hasData())//Tant que le module NRF a des données
{
_radio.readData(&_radioData); // lecture des nouvelles données
_radioData.Valeur = map( _radioData.Valeur, 0, 1023, 5, 110); // lecture du potentiomètre N°1
_radioData.ValeurB = _radioData.ValeurB ;
}
myservoA.write(_radioData.Valeur);
myservoB.write(_radioData.Valeur);
myservoC.write(_radioData.Valeur);
myservoD.write(_radioData.Valeur);
myservoE.write(_radioData.Valeur);
myservoF.write(_radioData.Valeur);
if (_radioData.ValeurB >=800){ // lecture du potentiomètre N°2
int pos = 10;
for(pos = 5; pos <= 110; pos += 1)
{
myservoA.write(pos);
myservoB.write(pos);
myservoC.write(pos);
myservoD.write(pos);
myservoE.write(pos);
myservoF.write(pos);
delay(30);
}
for(pos = 110; pos>=5; pos-=1)
{
myservoA.write(pos);
myservoB.write(pos);
myservoC.write(pos);
myservoD.write(pos);
myservoE.write(pos);
myservoF.write(pos);
delay(15);
}
}
}