jeg er da kommet lidt vidre men er stødt lidt mod et problem.. jeg skal have sendt en sms når en indgang skifter status, det med at sende sms'en er på plads men mangler at trigge afsendelsen.. min sketch ser pt sådan her ud (kun void loop delen):
void loop()
{
int response=0;
char phone_num[20]; // array for the phone number string
char string[160];
int tono=0;
int Oldtemp; //temp since last flag
int Newtemp=tempC; //current temp
int Tempflag; //trigger variable
int Flameflag=2;
int Flame;
// if we get a valid byte, read analog ins:
{
if(digitalRead(in3) == 0 && Flame == 0)
{
Flameflag = 1;
}
if(digitalRead(in3) == 1 && Flame == 1)
{
Flameflag = 0;
}
if(digitalRead(in3) == 0)
{
Flame = 1;
}
if(digitalRead(in3) == 1)
{
Flame = 0;
}
if(Newtemp - Oldtemp > 5);
{
Tempflag = 1;
}
if(digitalRead(in1) == 0 && Tempflag == 1)
{
Tempflag = 0; // reset flag first thing
Oldtemp = tempC;
int tempCdec=tempC;
int tempCuni=(tempC*100)-(tempCdec*100);
sprintf(string,"Temperatura rilevata %d.%d gradi",tempCdec,tempCuni);
Serial.println(string);
response=gsm.SendSMS("+**********",string); //+********** insert your telephone number
Serial.print("response ");
Serial.println(response);
}
if(digitalRead(in3) == 0 && Flame == 1 && Flameflag == 1)
{
sprintf(string,"Flame On");
Serial.println(string);
response=gsm.SendSMS("+**********",string); //+********** insert your telephone number
Serial.print("response ");
Serial.println(response);
Flameflag=2;
}
if(digitalRead(in3) == 1 && Flame == 0 && Flameflag == 0)
{
sprintf(string,"Flame OFF");
Serial.println(string);
response=gsm.SendSMS("+**********",string); //+********** insert your telephone number
Serial.print("response ");
Serial.println(response);
}
}
}
Nogen der har bud på om de 2 sidste sektioner gør som jeg vil? der skal jo ikke en sms ud for hver gennemløb men kun når der er et skifte på in3
mvh bo
Jeg tænker en debounce funktion.
Altså når den hopper ind i den IF hvor den sender en SMS så sætter du et flag og det bliver først fjernet når der bliver ændret state.
/* TDGino example
Sketch to send a SMS with temperature and to check the DTMF section
created 2011
by Boris Landoni
This example code is in the public domain.
http://www.open-electronics.org
*/
#include <GSM.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//for enable disable debug rem or not the string #define DEBUG_PRINT
// definition of instance of GSM class
GSM gsm;
// Set pin numbers:
const int powergsm = 77;
const int ctsgsm = 39;
const int rtsgsm = 29;
const int dcdgsm = 27;
const int dtrgsm = 28;
const int reset = 35;
const int ring = 34;
const int ld1 = 25;
const int ld2 = 26;
const int stato = 76;
const int rele1 = 36;
const int rele2 = 37;
const int sda = 20;
const int scl = 21;
const int in1 = 84;
const int in2 = 83;
const int in3 = 82;
const int puls = 62;
const int sonda = 63;
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS sonda
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// arrays to hold device address
DeviceAddress insideThermometer;
float tempC=0;
int Flame;
int FlameState;
int Oldtemp; //temp since last flag
int Tempflag; //trigger variable
char phone_num[20]; // array for the phone number string
char string[160];
void setup() {
// set the digital pin as output:
pinMode(powergsm, OUTPUT);
pinMode(rtsgsm, OUTPUT);
pinMode(dtrgsm, OUTPUT);
pinMode(reset, OUTPUT);
pinMode(ld1, OUTPUT);
pinMode(ld2, OUTPUT);
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
pinMode(sda, OUTPUT);
pinMode(scl, OUTPUT);
// set the digital pin as input:
pinMode(ctsgsm, INPUT);
pinMode(dcdgsm, INPUT);
pinMode(ring, INPUT);
pinMode(stato, INPUT);
pinMode(in1, INPUT); //heater on/off
pinMode(in2, INPUT); //cabinfan on/off
pinMode(in3, INPUT); //Flamne on/off
pinMode(puls, INPUT);
pinMode(sonda, INPUT);
// start serial port at 9600 bps:
Serial.begin(9600);
//Serial1.begin(115200);
Serial.println("system startup");
//gsm.InitSerLine(); //initialize serial 1
gsm.TurnOn(115200); //module power on
gsm.InitParam(PARAM_SET_1);//configure the module
gsm.Echo(1); //enable AT echo
Serial.print("Locating DS18B20 devices...");
sensors.begin();
Serial.print("Found ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" devices.");
// report parasite power requirements
Serial.print("Parasite power is: ");
if (sensors.isParasitePowerMode()) Serial.println("ON");
else Serial.println("OFF");
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
// set the resolution to 9 bit (Each Dallas/Maxim device is capable of several different resolutions)
sensors.setResolution(insideThermometer, 9);
Serial.print("Device 0 Resolution: ");
Serial.print(sensors.getResolution(insideThermometer), DEC);
Serial.println();
FlameState = digitalRead(in3); // read the initial state
}
void loop()
{
int response=0;
int Newtemp=tempC; //current temp
Flame = digitalRead(in3); // read input value and store it
// if we get a valid byte, read analog ins:
{
if(Newtemp - Oldtemp > 5);
{
Tempflag = 1;
}
if(digitalRead(in1) == 0 && Tempflag == 1)
{
Tempflag = 0; // reset flag first thing
Oldtemp = tempC;
int tempCdec=tempC;
int tempCuni=(tempC*100)-(tempCdec*100);
sprintf(string,"Temperatura rilevata %d.%d gradi",tempCdec,tempCuni);
Serial.println(string);
response=gsm.SendSMS("+**********",string); //+********** insert your telephone number
Serial.print("response ");
Serial.println(response);
}
if (Flame != FlameState ) // the state has changed!
{
if (Flame == LOW)
{
sprintf(string,"Flame On");
Serial.println(string);
response=gsm.SendSMS("+**********",string); //+********** insert your telephone number
Serial.print("response ");
Serial.println(response);
}
if (Flame == HIGH)
{
sprintf(string,"Flame OFF");
Serial.println(string);
response=gsm.SendSMS("+**********",string); //+********** insert your telephone number
Serial.print("response ");
Serial.println(response);
}
FlameState = Flame; // save the new state in our variable
}
}
}