Yep!
Dans mon programme, je complète un tableau dans lequel est positionné des valeurs provenant de la liaison série.
char* TRAME[6];
et la fonction qui complète mon tableau :
void filldata(char *buffer) {
char *p = buffer;
char *str;
int i = 0;
while ((str = strtok_r(p, ";", &p)) != NULL) { // delimiter is the semicolon
char *q = str;
TRAME[i] = q;
i++;
//Serial.println(str);
}
}
Ces valeurs sont donc relatives à des pointers.
J'aimerais comparer ces réferences à d'autres variables/valeurs afin d'effectuer des actions.
La trame pourrait ressembler à ceci à peu de chose prés : {RELAIS, 1, 1} = On active le relais 1. {Action, num, state}
Que j'écris ainsi, dans mes differents essais :
void checkdata() {
if (TRAME[0][0] == 'S') {
Serial.println("Single action");
if ((TRAME[1][0] == '1') && (TRAME[2][0] == '0')) { delay(25); rs485TxMsg("\xFF\x01\x00"); state_r1 = 0;}
if ((TRAME[1][0] == '1') && (TRAME[2][0] == '1')) { delay(25); rs485TxMsg("\xFF\x01\x01"); state_r1 = 1;}
if ((TRAME[1][0] == '2') && (TRAME[2][0] == '0')) { delay(25); rs485TxMsg("\xFF\x02\x00"); state_r2 = 0;}
if ((TRAME[1][0] == '2') && (TRAME[2][0] == '1')) { delay(25); rs485TxMsg("\xFF\x02\x01"); state_r2 = 1;}
else { }
}
if (TRAME[0][0] == 'M') {
Serial.println("Multiple action");
if (TRAME[1][0] == '0') { delay(25); rs485TxMsg("\xFF\x01\x00"); state_r1 = 0;}
if (TRAME[1][0] == '1') { delay(25); rs485TxMsg("\xFF\x01\x01"); state_r1 = 1;}
if (TRAME[2][0] == '0') { delay(25); rs485TxMsg("\xFF\x02\x00"); state_r2 = 0;}
if (TRAME[2][0] == '1') { delay(25); rs485TxMsg("\xFF\x02\x01"); state_r2 = 1;}
else { }
}
if (TRAME[0][0] == 'T') {
Serial.println("Testing action");
if ((string2float(TRAME[1]) >= 15.0) && (string2float(TRAME[1]) <= 16.5)) {
delay(25); rs485TxMsg("\xFF\x01\x01"); state_r1 = 1;}
else { }
}
if (TRAME[0][0] == 'I') {
Serial.println("Init action");
rs485TxMsg("\xFF\x01\x00");
delay(50);
rs485TxMsg("\xFF\x02\x00");
delay(50);
state_r1 = 0;
state_r2 = 0;
}
if (strcmp(TRAME[0], "RELAIS") == 0) {
Serial.println("relais action");
if ((strcmp(TRAME[1], "1") == 0) && (strcmp(TRAME[2], "0") == 0)) { delay(25); rs485TxMsg("\xFF\x01\x00"); state_r1 = 0;}
if ((strcmp(TRAME[1], "1") == 0) && (strcmp(TRAME[2], "1") == 0)) { delay(25); rs485TxMsg("\xFF\x01\x01"); state_r1 = 1;}
if ((strcmp(TRAME[1], "2") == 0) && (strcmp(TRAME[2], "0") == 0)) { delay(25); rs485TxMsg("\xFF\x02\x00"); state_r2 = 0;}
if ((strcmp(TRAME[1], "2") == 0) && (strcmp(TRAME[2], "1") == 0)) { delay(25); rs485TxMsg("\xFF\x02\x01"); state_r2 = 1;}
else { }
}
}
La fonction strcmp me semble être la plus judicieuse, car plus souple. J'ai constaté que l'ecriture est relativement stricte.
Ceci ne fonctionne pas par exemple :
if (TRAME[0] == "T")
Je ne suis pas fort en pointer ![]()
J'aimerais savoir si il existe d'autres possibilités, quelle est la meilleur, existe-t'il des fonctions similaires pour comparer un pointer à un int ou un float ???
Merci d'avance ![]()
@+
Zoroastre.