Bonjour,
Voici mon premier poste sur le forum parce que là je suis vraiment au fond du trou et je n'arrive pas à avancer !
J'ai un projet avec une ville pour contrôler un feu rouge à distance (1.5 km environ) pour une course de caisse à savon (Lien pour ceux qui connaissent pas). Donc j'ai deux boitiers, un pour controler le feu via des boutons et un branché sur le feu.
Lorsque l'utilisateur appui sur le bouton START, le message part, le feu passe au vert avec des relais, et on reçoit un message pour bien confirmer que le feu s'est allumé. Une fois que la voiture passe la ligne d'arrivée, on appuie sur le bouton arrivée, puis le temps au chronomètre s'affiche sur 4 afficheurs 7 segments mais pour cette partie tout fonctionne. Puis un bouton reset pour une nouvelle course (feu rouge + chrono à 0).
Voilà mon pseudo - code:
- Appui sur START
- On prend le temps avec la fonction millis
- On affiche 0000 sur l'afficheur
- Attente du message retour du feu
- On prend un nouveau temps avec millis (comme ça on connait le temps que met un sms à faire un aller retour)
- on allume un led pour confirmer que le feu s'est bien allumé
- Si on appui sur le bouton arrivée, on affiche le temps final
Dans mon boitier commande :
- Arduino Mega
- Module SIM900
- Afficheurs
- 3 boutons
- led de vérifications
Dans mon boitier feu :
- Arduino Mega
- Module SIM900
- 4 relais pour contrôler le feu
Donc tout fonctionne quand on appui sur le bouton start, le message part bien mais je n'arrive pas à recevoir le message retour... j'ai tout essayé mais je ne trouve pas...
Voici le programme du boitier de commande :
//MODULE GSM________________________________________________________________
#include <SoftwareSerial.h>
char inchar; // caractère arrivant par SMS
SoftwareSerial SIM900(10, 11); // ouverture du port série (Rx, Tx)
int verif;
//afficheur__________________________________________________________________
int digit1 = 43; //PWM Display pin 1
int digit2 = 41; //PWM Display pin 2
int digit3 = 39; //PWM Display pin 6
int digit4 = 37; //PWM Display pin 8
int segA = A1; //Display pin 14
int segB = 25; //Display pin 16
int segC = 31; //Display pin 13
int segD = 42; //Display pin 3
int segE = A0; //Display pin 5
int segF = 33; //Display pin 11
int segG = 27; //Display pin 15
int point = 38; //Display pin 7
#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH
#define DIGIT_OFF LOW
//BOUTONS____________________________________________________________________
const int ARRIV_BP = 6;
const int RESET_BP = 7;
const int START_BP = 8;
int E_START = 0;
int E_RESET = 0;
int E_ARRIV = 0;
//TEMPS______________________________________________________________________
float t1;
float t2;
int t3;
float latence;
//indicateur feu_____________________________________________________________
int led_verif = 52;
void setup() {
//afficheur__________________________________________________________________
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
pinMode(point, OUTPUT);
pinMode(13, OUTPUT);
//MODULE GSM________________________________________________________________
Serial.begin(19200); //port série sur 19200 bauds
SIM900power(); //allumage du module
SIM900.begin(19200);
for(int launch = 0 ; launch < 9999 ; launch++)
{
displayNumber(launch);
delayMicroseconds(5);
}
SIM900.print("AT+CMGF=1\r"); //allumage du mode sms
delay(100);
SIM900.print("AT+CNMI=2,2,0,0,0\r"); //vide la mémoire tampon sms
delay(100);
//BOUTONS____________________________________________________________________
pinMode(START_BP, INPUT);
pinMode(RESET_BP, INPUT);
pinMode(ARRIV_BP, INPUT);
//indicateur feu_____________________________________________________________
pinMode(led_verif, OUTPUT);
digitalWrite(led_verif, LOW);
}
void loop() {
do {E_START = digitalRead(START_BP);} while(E_START == 0);
Serial.println("5");
t1 = millis();
displayNumber(0000);
envoi_sms();
mode_sms();
verif = 1;
while(verif==1)
{
if(SIM900.available() >0)
{
digitalWrite(led_verif, HIGH);
inchar = SIM900.read();
verif = 0;
}
}
if (inchar == 79){
digitalWrite(led_verif, LOW);
latence = (t2-t1)/200;
displayNumber(latence);
do {
E_ARRIV = digitalRead(ARRIV_BP);
displayNumber((millis()- t1)/100 + latence);
} while(E_ARRIV == 0);
t2 = millis();
t3 = (t2-t1)/100+latence;
}
do {
E_RESET = digitalRead(RESET_BP);
displayNumber(t3);
} while(E_RESET == 0);
}
void envoi_sms()
{
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.println("AT+CMGS=\"+33661169689\"");
delay(100);
SIM900.println("S");
delay(100);
SIM900.println((char)26);
delay(100);
SIM900.println();
delay(5000);
}
void mode_sms()
{
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.print("AT+CNMI=2,2,0,0,0\r");
delay(1000);
}
void SIM900power()
// software equivalent of pressing the GSM shield "power" button
{
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(7000);
}
Voici le programme du feu :
//MODULE GSM________________________________________________________________
#include <SoftwareSerial.h>
char inchar; // caractère arrivant par SMS
SoftwareSerial SIM900(10, 11); // ouverture du port série (Rx, Tx)
int verif;
//relais________________________________________________________________
#define R_rouge 4 //rouge
#define R_jaune 3 //orange
#define R_vert 2 //vert
void setup() {
//RELAIS_____________________________________________________________________
pinMode(R_rouge, OUTPUT);
pinMode(R_jaune, OUTPUT);
pinMode(R_vert, OUTPUT);
digitalWrite(R_rouge, LOW);
delay(500);
digitalWrite(R_rouge, HIGH);
digitalWrite(R_jaune, LOW);
delay(500);
digitalWrite(R_jaune, HIGH);
digitalWrite(R_vert, LOW);
delay(500);
digitalWrite(R_vert, HIGH);
//MODULE GSM________________________________________________________________
Serial.begin(19200); //port série sur 19200 bauds
SIM900power(); //allumage du module
SIM900.begin(19200);
delay(15000); //donne le temps au module de se loguer
SIM900.print("AT+CMGF=1\r"); //allumage du mode sms
delay(100);
SIM900.print("AT+CNMI=2,2,0,0,0\r"); //vide la mémoire tampon sms
delay(100);
}
void loop() {
verif = 1;
while(verif==1)
{
if(SIM900.available() >0)
{
inchar = SIM900.read();
verif = 0;
}
envoi_sms();
if (inchar == 83){
digitalWrite(R_rouge, LOW);
delay(5000);
digitalWrite(R_rouge, HIGH);
digitalWrite(R_jaune, LOW);
delay(1500);
digitalWrite(R_jaune, HIGH);
digitalWrite(R_vert, LOW);
delay(5000);
digitalWrite(R_vert, HIGH);
delay(10000);
}
digitalWrite(R_rouge, HIGH);
digitalWrite(R_jaune, HIGH);
digitalWrite(R_vert, HIGH);
}
}
void envoi_sms()
{
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.println("AT+CMGS=\"+33786443943\"");
delay(100);
SIM900.println("O");
delay(100);
SIM900.println((char)26);
delay(100);
SIM900.println();
delay(5000);
}
void SIM900power()
// software equivalent of pressing the GSM shield "power" button
{
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(7000);
}
Si vous m'aidez à trouver une solution je vous ferai un GROS GROS bisous parce que là j'avance pas et je sature un peu :o
MERCI !