Bonsoir, Bonjour à tous.
Je me livre à vous parce que je suis complètement perdu. Avec mes maigres connaissances, je ne m'en sors pas, c'est pour ça que je vous implore votre aide!
En effet, j'ai pour but de réaliser un programme arduino qui, à l'aide du module HC_06, reçoit une chaîne de caractères envoyée par Bluetooth depuis un Smartphone, sur une application réalisé avec App Inventor 2 du MIT. Ensuite, ces données devront être split car je souhaite les séparer en deux variables String différentes. Aussi, les variables qui ressortent du programme Bluetooth sont des char si je ne m'abuse. Et j'ai beaucoup de mal avec la conversion de char à String et plus généralement le C/C++ et ses différences avec le Java. Enfin, une fois en String cette chaîne de caractère sera affiché sur l'écran LCD.
Voici un Schéma récapitulatif du trajet de l'info :
Smartphone --> Application --> HC-06 (via Bluetooth) --> Carte arduino --> Ecran LCD
La communication Smartphone et Arduino/PC (via le moniteur série) se fait très bien. En revanche c'est ensuite que ça se complique.
J'ai déjà du mal à split facilement ma chaîne de caractère qui sort du HC-06. En effet, le char envoyé par le Smartphone est du genre "Doliprane 5" ou du genre "NomDuMedicament NombreDeMedicament". Je veux donc les split pour avoir "Doliprane" d'un côté et le "5" de l'autre. pour afficher sur plusieurs lignes
"Doliprane
x5"
de ce style là.
Je me perds beaucoup dans mes variables, les char, les Strings, etc...
En plus j'ai l'impression de me complexifier la vie alors que je sis persuadé qu'il y ait plus simple.
Je vous passe mon code, et j'espère de tout cœur que vous aurez des solutions!
#include <LiquidCrystal.h>
LiquidCrystal monEcran(12,11,5,4,3,2);
#include <SoftwareSerial.h>
#define rxPin 9
#define txPin 10
SoftwareSerial mySerial(rxPin, txPin);
// SPLITTER
#include "Arduino.h"
String serialResponse = "";
char sz;
int i = 0;
char someChar[32] = {0};
char med1[100] = "";
String med2 = "Aspegic";
String med3 = "Smecta";
int nbmed1 = 3;
int nbmed2 = 20;
int nbmed3 = 30;
void setup() {
monEcran.begin(16,2);
monEcran.clear();
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
mySerial.begin(9600);
Serial.begin(9600);
Serial.setTimeout(5);
}
void loop() {
if(Serial.available()) {
do{
// // SPLITTER
//
// serialResponse = Serial.readStringUntil('\r\n');
//
// // Convert from String Object to String.
// char buf[sizeof(sz)];
// serialResponse.toCharArray(buf, sizeof(buf));
// char *p = buf;
// char *str;
// while ((str = strtok_r(p, " ", &p)) != NULL) // delimiter is the semicolon
// Serial.println(str);
// BLUETOOTH
someChar[i++] = Serial.read();
delay(3);
} while (Serial.available() > 0);
mySerial.println((String)someChar);
Serial.println((String)someChar);
}
while(mySerial.available())
Serial.print((char)mySerial.read());
//med1[100] =((String)mySerial.read());
Serial.println((String)mySerial.read());
//Serial.println(med1);
// CODE LCD
monEcran.clear();
monEcran.setCursor(0,0);
monEcran.print(med1);
monEcran.setCursor(13,1);
monEcran.print("x");
monEcran.setCursor(14,1);
monEcran.print(nbmed1);
delay(3000);
monEcran.clear();
monEcran.setCursor(0,0);
monEcran.print(med2);
monEcran.setCursor(13,1);
monEcran.print("x");
monEcran.setCursor(14,1);
monEcran.print(nbmed2);
delay(3000);
monEcran.clear();
monEcran.setCursor(0,0);
monEcran.print(med3);
monEcran.setCursor(13,1);
monEcran.print("x");
monEcran.setCursor(14,1);
monEcran.print(nbmed3);
delay(3000);
}