Bonjour , éternel débutante mais passionné, mon nouveau projet est de fabriquer une alarme gsm , j'utilise pour cela un shield GSM, une uno, et le code "sms receiver" des exemples arduino.
j'aimerai faire en sorte modem puisse realiser plusieur action en fonction des ordres recu par sms .
Du coup j'ai vu qu'il y avait la fonction strcmp, j'ai essayer de l'utiliser dans le code mais il ne se passe rien .
Merci pour vos lumière
// include the GSM library
#include <GSM.h>
// PIN Number for the SIM
#define PINNUMBER ""
// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;
// Array to hold the number a SMS is retreived from
char senderNumber[20];
void setup() {
// initialize serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("SMS Messages Receiver");
// connection state
boolean notConnected = true;
// Start GSM connection
while (notConnected) {
if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
notConnected = false;
} else {
Serial.println("Not connected");
delay(1000);
}
}
Serial.println("GSM initialized");
Serial.println("Waiting for messages");
}
void loop() {
char c;
// If there are any SMSs available()
if (sms.available()) {
Serial.println("Message received from:");
// Get remote number
sms.remoteNumber(senderNumber, 20);
Serial.println(senderNumber);
// An example of message disposal
// Any messages starting with # should be discarded
if (sms.peek() == '#') {
Serial.println("Discarded SMS");
sms.flush();
}
// Read message bytes and print them
while (c = sms.read()) {
Serial.print(c);
}
Serial.println("\nEND OF MESSAGE");
int resultat = strcmp("1221", c);
//utilisation de lafonction strcmp(chaine1, chaine2) pour comparer des mots
if(resultat == 0)
{
Serial.println("Alarme desactivé");
}
// Delete message from modem memory
sms.flush();
Serial.println("MESSAGE DELETED");
}
delay(1000);
}
Ta variable c est un char : elle ne contient qu'un seul caractère, donc inutile de la comparer avec une chaîne de caractères...
Il faut que tu crées une String (par exemple) qui va contenir l'ensemble des caractères lus au clavier avant de la comparer avec ton code.
String code;
void loop() {
char c;
// If there are any SMSs available()
if (sms.available()) {
Serial.println("Message received from:");
// Get remote number
sms.remoteNumber(senderNumber, 20);
Serial.println(senderNumber);
// An example of message disposal
// Any messages starting with # should be discarded
if (sms.peek() == '#') {
Serial.println("Discarded SMS");
sms.flush();
}
// Read message bytes and print them
while (c = sms.read()) {
code += c;
Serial.print(code);
}
Serial.println("\nEND OF MESSAGE");
int resultat = strcmp("1221", code);
//utilisation de lafonction strcmp(chaine1, chaine2) pour comparer des mots
if(resultat == 0)
{
Serial.println("Alarme desactivé");
code = "";
}
// Delete message from modem memory
sms.flush();
Serial.println("MESSAGE DELETED");
}
delay(1000);
}
Il faut faire attention aux éventuels caractères de fin (genre \n ou \r) qui peuvent arriver dans le sms. Je ne sais pas s'il peut y en avoir ou pas... A tester
hey ! merci pour votre aide ...
" Ta variable c est un char : elle ne contient qu'un seul caractère, donc inutile de la comparer avec une chaîne de caractères...
Il faut que tu crées une String (par exemple) qui va contenir l'ensemble des caractères lus au clavier avant de la comparer avec ton code."
Je comprend pas tout evidemment , la variable c , c est pourtant plusieurs caractères , car c est le sms que le modem reçoit ... quand je teste , j envoit 1221 par sms ... et sur la console le resulat de
serial.print (c) c est : 1221
"ta variable c est t'elle pleine ou vide??
while (c = sms.read()) {
==> Serial.print(c);
au moment au j utilise la fonction strcmp , al variable c est n est pas vide
jenny09:
Je comprend pas tout evidemment , la variable c , c est pourtant plusieurs caractères , car c est le sms que le modem reçoit ... quand je teste , j envoit 1221 par sms ... et sur la console le resulat de
serial.print (c) c est : 1221
Tu vois 4 caractères car tu affiches à la suite 4 fois un caractère... c ne contient qu'un seul caractère, il change à chaque exécution de la boucle et il est affiché à chaque fois.
hey ! trop bien le code fonctionne et j ai compris le truc de c qui ne contient qu 'un seul caractère !
Un grand merci a toi !
par contre dans la console , ce n est pas " 1221" qui s'affiche mais "1121221221"
du coup je comprend pas trop pourquoi ca fait ca !
C'est exactement la même chose, il affiche le contenu de code :
1
12
122
1221
Mais sur la même ligne. Si tu affiches c au lieu de code, tu auras bien 1221