Allez, dernier épisode?
J'ai ajouté une commande depuis mon smartphone en bluetooth pour changer la variable VitMax.
J'ai ajouté des gros delay() pour voir ce que dit le moniteur série:
110 <- ca c'est VitMax avant la commande bluetooth
110
110
110
110
110
BlueData = 11 <----- en effet j'envoie bien '11' avec mon telephone
BlueData = 00 <---- ça je sais pas
BlueData = -35221 <-- ça non plus et il met un peu de temps à le construire
BlueData = -38218 <-- la même
218 <----on retrouve la variable VitMax qui devrait faire 11
218
218
Je joins le code:
Comme c'est en développement, il y a encore des petits bouts que je n'ai pas supprimés, ça permet de revenir en arrière si un problème survient:
//Bluetooth
#include<SoftwareSerial.h>
#define TxD 3
#define RxD 2
int BlueData;
SoftwareSerial bluetoothSerial(TxD, RxD);
//L293d, définition des pins
#define E1 9 // PWM 1 /noir
#define E2 10 // PWM 2 /blanc
#define I1 12 // 1 a /vert
#define I2 4 // 1 b /bleu
#define I3 7 // 2 a /mauve
#define I4 8 // 2 b /gris
//Variables moteurs
byte VitMax = 110; // bride PWM 0-255
byte Vitmin = 0;
byte VitG = 70; // vitesse au départ moteur gauche <VitMax
byte VitD = 70; // vitesse au départ moteur droit <VitMax
//Définition des pins de capteurs IR GG-GC-CC-CD-DD
#define IR0 15 // capteur IR GG sur A0
#define IR1 16 // capteur IR GC sur A1
#define IR2 17 // capteur IR CC sur A2
#define IR3 18 // capteur IR CD sur A3
#define IR4 19 // capteur IR DD sur A4
int LastDir; //stocke la dernière direction lue valide -1/0/1
int B=0; //switcher
//************************************************
void setup() {
bluetoothSerial.begin(9600);
Serial.begin(9600);
//Mode des pins du L293d
pinMode(E1, OUTPUT);
pinMode(E2, OUTPUT);
pinMode(I1, OUTPUT);
pinMode(I2, OUTPUT);
pinMode(I3, OUTPUT);
pinMode(I4, OUTPUT);
}//fin de setup
//************************************************
void loop() {
//bluetooth
if(bluetoothSerial.available()){
BlueData = bluetoothSerial.read() - '0';
Serial.print("BlueData = ");
Serial.print(BlueData);
VitMax = BlueData;
delay(1500);
}
delay(1000);
Serial.println(VitMax);
CreerB();
Switcher();
MarcheAvant();
}
//************************************************
int CreerB() {//change Err en fonction des capteurs
boolean b0, b1, b2, b3, b4;
//Construire un bit avec les booléens du tableau
b0 = (digitalRead(IR0) == HIGH);
b1 = (digitalRead(IR1) == HIGH);
b2 = (digitalRead(IR2) == HIGH);
b3 = (digitalRead(IR3) == HIGH);
b4 = (digitalRead(IR4) == HIGH);
B = 0;
B = (b4 ? B10000 : B0) | (b3 ? B1000 : B0) | (b2 ? B100 : B0) | (b1 ? B10 : B0) | (b0 ? B1 : B0) ;
}
void Switcher() {
// Retranscrire sous la forme B00000
//Serial.print(F("B"));
//for (int8_t aBit = 4; aBit >= 0; aBit--)
// Serial.print(bitRead(B, aBit) == 0 ? F("0") : F("1"); //
switch (B) {
case 27://11011
VitD = VitMax;
VitG = VitMax;
LastDir = 0;
break;
//vers la gauche
case 25://11001
VitD = VitMax;
VitG = VitMax * 0.85;
//LastDir = -1;
break;
case 29://11101
VitD = VitMax;
VitG = VitMax * 0.5;
LastDir = -1;
break;
case 28://11100
VitD = VitMax * 0.75;
VitG = VitMax * 0.25;
LastDir = -1;
break;
case 30://11110
VitD = VitMax * 0.5;
VitG = 0;
LastDir = -1;
break;
//vers la droite
case 19:
VitD = VitMax * 0.85;
VitG = VitMax;
//LastDir = 1;
break;
case 23:
VitD = VitMax * 0.5;
VitG = VitMax;
LastDir = 1;
case 7:
VitD = Vitmin * 0.25;
VitG = VitMax * 0.75;
LastDir = 1;
break;
case 15:
VitD = 0;
VitG = VitMax * 0.5;
LastDir = 1;
break;
case 3: //angle droit à D
VitD = 0;
VitG = VitMax * 0.25;
LastDir = 1;
break;
case 24: //angle droit à G
VitD = VitMax * 0.25;
VitG = 0;
LastDir = -1;
break;
case 31: //tout blanc
ImLost(LastDir);
break;
}//fin de switch
}//fin de Switcher()
//************************************************
void MarcheAvant() {
//marche avant
digitalWrite(I1, HIGH); //Av D
digitalWrite(I2, LOW); //Ar D
digitalWrite(I3, HIGH); //Av G
digitalWrite(I4, LOW); //Ar G}
digitalWrite(E1, VitD);
digitalWrite(E2, VitG);
}//fin de MarcheAvant
//************************************************
void ImLost(int dir) {
digitalWrite(E2, 0);
digitalWrite(E1, 0);
switch (dir) {
case -1: //pivoter gauche
digitalWrite(E1, 60);
break;
case 1:
digitalWrite(E2, 60);
break;
case 0:
digitalWrite(I1, LOW); //Av D
digitalWrite(I2, HIGH); //Ar D
digitalWrite(I3, HIGH); //Av G
digitalWrite(I4, LOW); //Ar G
digitalWrite(E2, 60);
digitalWrite(E1, 60);
break;
}
while (B==31){
CreerB();
Serial.println(B);
}
}
Donc ma question est: mais qu'est-ce qu'il fout? C'est quoi ces deux nombres étranges qui apparaissent, et qu'est-ce qui s'ajoute à ma variable???