samedi 18 avril 2015

write timer without delay()

I wrote this code to send an SMS if an input is HIGH as you can see in it,but the problem is I have 4 inputs and delay()s are fatal and very wrong if I need to do more than one single thing at a time (I use 4 inputs).


So I need to change delay() with millis() or something else in void loop() ,Send_SMS() and initia().


can someone help me,and thank you in advance.



const int DI = 2;
const int DT = 3;
const int DGP1 = 4;
const int DGP2 = 5;

int value1_old = 0;
int value2_old = 0;
int value3_old = 0;
int value4_old = 0;

unsigned long previousMillis = 0;
unsigned long interval=100;

#include<SoftwareSerial.h>
SoftwareSerial SIM900 (7, 8);

void setup() {
pinMode(DI, INPUT);
pinMode(DT, INPUT);
pinMode(DGP1, INPUT);
pinMode(DGP2, INPUT);

SIM900.begin(19200);
SIM900power();
delay(20000);

}

void SIM900power(){
digitalWrite(9 ,HIGH);
delay(1000);
digitalWrite(9 ,LOW);
delay(5000);
}

void initia(){
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.println("AT + CMGS = \"+212xxxxxxx\"");
delay(100);
}

void Send_SMS(){
SIM900.println((char)26);
delay(100);
SIM900.println();
delay(100);
SIM900power();
}

void loop() {
int value1 = digitalRead (DI);
int value2 = digitalRead (DT);
int value3 = digitalRead (DGP1);
int value4 = digitalRead (DGP2);

if (value2 != value2_old && value2 == HIGH) {
initia();
SIM900.println("Station 85: Defaut electrique");
delay(100);
Send_SMS();
value2_old = value2;
}

if (value3 != value3_old && value3 == HIGH)
{
initia();
SIM900.println("Station 85: DefautGP1");
delay(100);
Send_SMS();
value3_old = value3;
}

if (value4 != value4_old && value4 == HIGH)
{
initia();
SIM900.println("Station 85:DD>1000");
delay(100);
Send_SMS();
value4_old = value4;
}
value2_old = value2;
value3_old = value3;
value4_old = value4;


}


Aucun commentaire:

Enregistrer un commentaire