rhum187:
Par contre ma différence de 1, même si ce n'est que 1 me perturbe un peu plus...
Rooo! Je sort le fusil et les cartouches si tu ne vois pas tes erreurs
Erreur 1 :
Prototype :
Serial.write(uint8_t);
Ton code :
Serial.write((int)PWM4);
Note : uint8_t = 1 octet non signé (0 ~ 255), int = 2 octets signé (-32767 ~ 32767)
--
Erreur 2 :
Déclaration :
byte PWM_MOT[4]; // Tableau de 6 octets
(hummm 6 tu est sûr ;))
Ton code ensuite :
//Serial.print(PWM_MOT[0]);
Serial.print(PWM_MOT[1]); // <-
Serial.print(PWM_MOT[2]);
Serial.print(PWM_MOT[3]);
Serial.print(PWM_MOT[4]); // <-
//Serial.print(PWM_MOT[5]);
Note : en C/C++ les tableaux commencent à 0 et se terminent à taille_max - 1, exemple int[2] -> int[0], int[1]
--
Erreur 3 :
Déclaration :
byte PWM_MOT[4];
int n_octet = 4;
Ton code :
for(int n=1; n<=n_octet; n++) // -> n = 1, n = 2, n = 3, n = 4
{
while(Serial.available() < 1);
PWM_MOT[n]=Serial.read(); // <-
}
Voir note plus haut.
Erreur 4 :
Tu envois 6 octets mais tu en lit seulement 4 (+ 1 pour le if)
--
Correction :
Envoi :
Serial.write((uint8_t)'M'); // Permet l'identification des commandes moteurs par le programme robot
Serial.write((uint8_t)ZONE); // Permet le débogage des conditions à l'aide du VI
Serial.write((uint8_t)PWM1);
Serial.write((uint8_t)PWM2);
Serial.write((uint8_t)PWM3);
Serial.write((uint8_t)PWM4);
Réception :
const byte NB_OCTETS = 5;
const byte PIN_PWM_A = 10;
const byte PIN_PWM_B = 9;
const byte PIN_PWM_C = 6;
const byte PIN_PWM_D = 5;
byte PWM_MOT[NB_OCTETS];
void setup() {
Serial.begin(9600); // Paramétrage de la vitesse de la liaison série
}
/*********************** DEBUT DE LA BOUCLE PRINCIPALE ********************************************/
void loop() {
if(Serial.available() > 0) {
if(Serial.read() != 'M') {
delay(50);
}
else {
for(int n = 0; n < NB_OCTETS; ++n) {
while(Serial.available() < 1);
PWM_MOT[n] = Serial.read();
}
//analogWrite(PIN_PWM_A, PWM_MOT[1]);
//analogWrite(PIN_PWM_B, PWM_MOT[2]);
//analogWrite(PIN_PWM_C, PWM_MOT[3]);
//analogWrite(PIN_PWM_D, PWM_MOT[4]);
Serial.print(PWM_MOT[0]);
Serial.print(PWM_MOT[1]);
Serial.print(PWM_MOT[2]);
Serial.print(PWM_MOT[3]);
Serial.print(PWM_MOT[4]);
Serial.println();
}
}
else {
analogWrite(PIN_PWM_A, 0);
analogWrite(PIN_PWM_B, 0);
analogWrite(PIN_PWM_C, 0);
analogWrite(PIN_PWM_D, 0);
}
// Serial.flush(); // Pas de flush() quand on ne sait pas ce que ça signifie ;)
delay(50);
}