Bonsoir !
Alors voilà, depuis quelques temps, je bricole un mini tank avec un bras robotisé et un écran dessus.
L'écran fonctionne, les moteurs du tank pas encore et le bras fonctionne à moitié !
Explication:
J'ai fait un programme qui fonctionne en Bluetooth (Module HC-05) avec l'application mobile Bluetooth Electronics (je n'aime pas App Inventor).
J'arrive parfaitement à contrôler l'affichage de l'écran mais j'ai un problème de communication d'ordres vers les servo moteurs...
En fait, quand je clique sur un bouton sur l'application (le bouton fait tourner un des servo de 45°), le servo ne tourne pas tous le temps et parfois reste bloqué dans la dernière position ! Je ne sais pas d'où vient ce problème ! C'est assez embêtent car je ne peux pas faire fonctionner le bras à cause de ce problème !
Je précise que le problème ne vient pas de l'information envoyée par l'application vers le HC-05 (exemple: "si bouton bleu pressé", "envoyer "sR au HC-05"".) mais de la communication, en effet quand j'appuis sur un bouton, il arrive que l'Arduino ne reçoive pas le signal (la Led RX (je crois) ne clignote pas).
Voici le code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <Servo.h>
#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args) write(args);
#else
#define printByte(args) print(args,BYTE);
#endif
Servo myServo;
int servoposition;
int servopos;
int bA;
char BT_input;
byte FaceE[8]={
B00000,
B00000,
B11111,
B11111,
B11111,
B11111,
B00000,
B00000
};
byte FaceAc[8]={
B00000,
B00000,
B00000,
B00000,
B11000,
B11111,
B01111,
B00011
};
byte FaceAd[8]={
B00000,
B00000,
B00000,
B00000,
B00011,
B11111,
B11110,
B11000
};
byte FaceBc[8]={
B00000,
B00000,
B00000,
B00000,
B00111,
B01111,
B11111,
B11000
};
byte FaceBd[8]={
B00000,
B00000,
B00000,
B00000,
B11100,
B11110,
B11111,
B00011
};
byte FaceCc[8]={
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B00000
};
SoftwareSerial Bluetooth(12,11); // (TXD, RXD) of HC-05
LiquidCrystal_I2C lcd(0x3F,16, 2); // SET I2C Address
char BluetoothData;
void setup()
{
lcd.init();
lcd.backlight(); // makes Backligh ON.
lcd.clear(); // Clears LCD
lcd.home(); // Sets cursor at Column 0 and Line 0
lcd.print(" A / B / C ");
Bluetooth.begin(9600);
Serial.begin(9600);
myServo.attach(10);
}
void loop()
{
if (Bluetooth.available())
{
BT_input=(Bluetooth.read());
Serial.write(BT_input);
if(BT_input == 'A')
{
lcd.clear();
lcd.home();
lcd.createChar(0,FaceE);
lcd.createChar(1,FaceAc);
lcd.createChar(2,FaceAd);
lcd.setCursor(7,0);
lcd.write(0);
lcd.setCursor(8,0);
lcd.write(0);
lcd.setCursor(7,1);
lcd.write(1);
lcd.setCursor(8,1);
lcd.write(2);
}
if(BT_input == 'B')
{
lcd.clear();
lcd.home();
lcd.createChar(0,FaceE);
lcd.createChar(3,FaceBc);
lcd.createChar(4,FaceBd);
lcd.setCursor(7,0);
lcd.write(0);
lcd.setCursor(8,0);
lcd.write(0);
lcd.setCursor(7,1);
lcd.write(3);
lcd.setCursor(8,1);
lcd.write(4);
}
if(BT_input == 'C')
{
lcd.clear();
lcd.home();
lcd.createChar(0,FaceE);
lcd.createChar(5,FaceCc);
lcd.setCursor(7,0);
lcd.write(0);
lcd.setCursor(8,0);
lcd.write(0);
lcd.setCursor(7,1);
lcd.write(5);
lcd.setCursor(8,1);
lcd.write(5);
}
{
String value = Bluetooth.readString();
servoposition = value.toInt();
if (value.toInt() == "0")
{
bA = 0;
myServo.write(bA);
}
if (value.toInt() == "4")
bA = 45;
{
myServo.write(bA);
}
if (value.toInt() == "9")
bA = 90;
{
myServo.write(bA);
}
if (value.toInt() == "2")
{
bA = 180;
myServo.write(bA);
}
Serial.println(value);
}
}
}