Salut
En effet, c'est bien ce module là de chez Libélium et j'ai utilisé leur Tuto pour l'installation ( je l'ai d'ailleurs acheté chez eux car introuvable en Belgique et le service à été impeccable)
par contre leur programme pour envoi de SMS est basé sur un version 0022 alors que je travaille sur 1.0
Au final , j'ai été cherche le programme de leur nouveau modèle http://www.cooking-hacks.com/index.php/3g-gprs-shield-for-arduino-3g-gps.html], et ça fonctionne très bien
au niveau câblage , pas grand chose à dire
Le brochage est tout fait en plaçant le modem sur l'Arduino TX et RX sur les broches 0 et 1 de l'Arduino UNO et la broche 2 pour l'activer
utilisation du port USB de la UNO vers mon PC
Voici ci dessous le programme que j'ai bidoullé , mais ne fonctionne toujours pas pour lire les SMS
Apparamment, les commandes AT genre Serial.println("AT+CMGL=REC UNREAD");doivent être intégrées dans le début du programme ( avant le setup) ce qui paraît bizarre , vu qu'on n'est pas dans la boucle
j'ai fait un essai avec la commande AT et j'ai OK en retour sur mon port série ou même la commande AT+CCLK? , et j'ai la date et l'heure en retour
#include <SoftwareSerial.h>
SoftwareSerial mySerial(12, 13); // RX, TX
unsigned long start1 ,fin1 ,start2 ,fin2 ,tempo1 ,tempoS1, tempo2 ,tempoS2 ,compt ;
long previousMillis = 0;
int analogPin10 = 10;
int analogPin11 = 11;
const int relais = 9;
const int LEDR = 8;
////////////////
//partie gestion SMS
//////////////////
int onModulePin = 2; // the pin to switch on the module (without press on button)
int timesToSend = 2; // Numbers of SMS to send
int count = 0;
char phone_number[]="+32496573695"; // ********* Numero à réaliser pour envoi SMS
void switchModule()
{
digitalWrite(onModulePin,HIGH);
digitalWrite(8,HIGH); // ledR
delay(2000);
digitalWrite(onModulePin,LOW);
digitalWrite(8,LOW); // ledR
}
////////////////////////////////////////////////
//////////////////////////////////////////////////
void setup()
{
Serial.begin(9600);
pinMode(10,INPUT);
pinMode(11,INPUT);
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
pinMode(onModulePin, OUTPUT);
switchModule(); // switches the module ON
for (int i=0;i< 5;i++)
Serial.print("AT+CMGF=1"); // sets the SMS mode to text
delay(100);
}
////////////////////////////////
///////////////////////////////
void displayResult1()//affichage de la tempo en secondes
{
tempo1=fin1-start1;
tempoS1=tempo1/1000;
}
void displayResult2()//affichage de la tempo en secondes
{
tempo2=start2;
tempoS2=tempo2/1000;
}
void loop()
{
delay(5000); // temps d'attente
int FLOTTEURNB = digitalRead(10);
int BP1 = digitalRead(11);
int LEDR = digitalRead(8);
int relais= digitalRead(9);
//Serial.print("\ttempoS1\t ");
//Serial.print(tempoS1);
//Serial.print("\tcount\t ");
//Serial.print(count);
//Serial.print("\tFLOTTEURNB:\t");
//Serial.print(FLOTTEURNB);
//Serial.print("\tBP1:\t");
//Serial.print(BP1);
//Serial.print("\trelais:\t");
//Serial.println(relais);
///////////////////////////////
//gestion tempo 1
//////////////////////////////
if (digitalRead(10)==LOW)
{
start1=millis();
delay(200); // for debounce
}
if (digitalRead(10)==HIGH)
{
fin1=millis();
delay(200); // for debounce
displayResult1();
}
////////////////////////////
//fin gestion tempo1
////////////////////////////
///////////////////////////////
//gestion compteur fonctionnement de la pompe
//////////////////////////////
if (relais==HIGH)
{
start2=millis();
delay(200); // for debounce
tempoS2 = compt;
displayResult2();
}
//if (relais==LOW)
//fin2=millis();
//delay(200); // for debounce
// displayResult2();
////////////////////////////
//fin gestion tempo2
////////////////////////////
if (tempoS1 > 5&FLOTTEURNB==1)//temps d'attente de NH + flotteur en niv bas
{
digitalWrite(9,HIGH); // relais pompe
delay(100); // for debounce
}
else
{
digitalWrite(9,LOW); // relais pompe
}
if (tempoS2 > 10)//comptage de temps de pompage
{
digitalWrite(8,HIGH); // ledR
delay(100); // for debounce
}
else
{
digitalWrite(8,LOW); // ledR
//delay(1000); // for debounce
}
/////////////////////////////
//envois SMS
////////////////////
if (tempoS1 > 15 & count<timesToSend)//temps d'attente avant envoi alarme de temps niveau bas trop long
{
delay(500);
Serial.print("AT+CMGS=\""); // send the SMS number
Serial.print(phone_number);
Serial.println("\"");
delay(1500);
Serial.print("alarme niveau bas trop long"); // message à envoyer
delay(500);
Serial.write(0x1A); //sends ++
Serial.write(0x0D);
Serial.write(0x0A);
count++;
}
if (digitalRead(11)==1)
count=0;
{
if (Serial.available())
Serial.println("AT+CMGL=REC UNREAD");
Serial.write(Serial.read());
}
}
Edit de Jean-François : merci de mettre le code entre les balises