J'essaye d'adapter un code pour traiter sur ESP32 une donnée reçue par Bluetooth LE. Voici le code initial qui affiche simplement la donnée reçue :
class MyCallbacks: public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
std::string value = pCharacteristic->getValue();
if (value.length() > 0) {
Serial.println("*********");
Serial.print("New value: ");
for (int i = 0; i < value.length(); i++)
Serial.print(value[i]);
Serial.println();
Serial.println("*********");
}
}
};
Moi je veux la comparer et lancer des actions selon son contenu. Voici ce que j'ai essayé
class MyCallbacks: public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
std::string value = pCharacteristic->getValue();
char carac;
if (value.length() > 0) {
Serial.print("New value: ");
for (int i = 0; i < value.length(); i++) Serial.print(value[i]);
Serial.print (" : ");
carac = *value;
switch (carac) {
case 'U':
Serial.println("Couleur");
break;
case 'A':
Serial.print("Animation ");
int numAnim = 0;
int i = 1;
carac = *value[i] ;
while (carac != "*") {
numAnim = numAnim * 10 + carac - '0';
i++;
}
Serial.println(numAnim);
break;
}
Serial.println();
}
}
};
Mais ça ne compile pas :
Arduino : 1.8.2 (Windows 10), Carte : "ESP32 Dev Module, Disabled, Default, QIO, 80MHz, 4MB (32Mb), 921600, None"
Les options de compilation ont été modifiées, tout sera recompilé
C:\Users\Chuwi\Documents\Arduino_ESP32\BLE_write_traite\BLE_write_traite.ino: In member function 'virtual void MyCallbacks::onWrite(BLECharacteristic*)':BLE_write_traite:26: error: no match for 'operator*' (operand type is 'std::__cxx11::string {aka std::__cxx11::basic_string}')
carac = *value;
^
BLE_write_traite:35: error: invalid type argument of unary '*' (have '__gnu_cxx::__alloc_traits<std::allocator >::value_type {aka char}')
carac = *value ;
- ^*
BLE_write_traite:36: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
_ while (carac != "*") {_- ^*
exit status 1
no match for 'operator*' (operand type is 'std::__cxx11::string {aka std::__cxx11::basic_string}')[/quote]Je crois comprendre que c'est un problème de conversion ou de comparaison d'un pointeur, mais je n'arrive pas à m'en sortir. Toute aide et explication est bienvenue !!