hikarumk2 发表于 2014-3-5 10:24:11

作品1 2.0 添加短信通知功能

之前做了一个利用LCD屏监视植物土壤湿度和周围环境温度和湿度的小作品,昨晚修改了一下添加了当泥土湿度过高或者过低的时候arduino会发信息到预设好的手机提醒状况。基本上都是上次的配件,加上DFRobot的TEL0051模块。PS:不知道是其他问题,还是IDE的问题,还是GSM模块的问题发不了还有中文字的信息,希望前辈可以帮忙看看有没有办法修改一下。








代码如下:

//sensor pin A0, SCL AREF-2, SDA AREF-1; Sensor 3V, LCD 5V
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <dht11.h>
#define DHT11PIN A1
dht11 DHT11;
LiquidCrystal_I2C lcd(0x27, 24,3);
int sensorPin = A2;    // select the input pin for the potentiometer
int sensorValue = 0;// variable to store the value coming from the sensor
int counter=0;
int sentSMSCounter=0;
String num="AT+CMGS=\"***********\"";
void setup() {
// declare the ledPin as an OUTPUT:
   //Serial.begin(9600);
   //--------------------------------------
    //端口模式设置
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
    pinMode(5,OUTPUT);
    //GSM开机时序
    digitalWrite(5,HIGH);
    delay(1500);
    digitalWrite(5,LOW);

    //使能GSM串口
    digitalWrite(3,LOW);
    digitalWrite(4,HIGH);
    delay(2000);
    //设置波特率
    Serial.begin(9600);
    //等待call ready
    delay(5000);
    delay(5000);
    delay(5000);
   //--------------------------------------
}
double dewPoint(double celsius, double humidity){
      double A0= 373.15/(273.15 + celsius);
      double SUM = -7.90298 * (A0-1);
      SUM += 5.02808 * log10(A0);
      SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
      SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
      SUM += log10(1013.246);
      double VP = pow(10, SUM-3) * humidity;
      double T = log(VP/0.61078);   // temp var
      return (241.88 * T) / (17.558-T);
}
double dewPointFast(double celsius, double humidity){
      double a = 17.271;
      double b = 237.7;
      double temp = (a * celsius) / (b + celsius) + log(humidity/100);
      double Td = (b * temp) / (a - temp);
      return Td;
}
int backlightState = LOW;
void loop() {
backlightState = HIGH;
int chk = DHT11.read(DHT11PIN);
lcd.init();                      // initialize the lcd
lcd.backlight();
lcd.home();
lcd.setCursor(0, 0);
// read the value from the sensor:
sensorValue = analogRead(sensorPin);   
Serial.print("sensor = " );   
Serial.println(sensorValue);   

if(sensorValue<100){
    Serial.println("Dry Soil really need water");
    lcd.println("Dry Soil need water");
    lcd.setCursor(0, 1);
    lcd.print("Hum(%):");
    lcd.print((float)DHT11.humidity, 0);
    lcd.setCursor(0, 2);
    lcd.print("temp:");
    lcd.print((float)DHT11.temperature,0);//2 means 2 digi
    lcd.setCursor(0, 3);
    //lcd.println(counter);
    //----------------------------------------
      //发送AT命令同步
    Serial.println("AT");   
    delay(2000);
    Serial.println("AT");   
    delay(2000);

    //发送短信
    Serial.println("AT+CMGF=1");
    delay(1000);
    Serial.println(num)
    delay(1000);
    Serial.print("Dry Soil really need water! ");
    Serial.print("Hum(%):");
    Serial.print((float)DHT11.humidity, 0);
    Serial.print(" Temp:");
    Serial.print((float)DHT11.temperature,0);
    //Serial.print(" 请处理");
    delay(11000);
    Serial.write(26);

    while(1);
    sentSMSCounter++;
    if(sentSMSCounter=3){
      delay(30000);
    }
    if(sentSMSCounter>3){
      num="give up!";
      delay(100000);
    }

    //----------------------------------------
}
if(sensorValue<=600&&sensorValue>=100){
    Serial.println("Humid Soil Plants feeling good!");
   lcd.println("Humid Soil feeling good");
   lcd.setCursor(0, 1);
       lcd.print("Hum(%):");
    lcd.print((float)DHT11.humidity, 0);
    lcd.setCursor(0, 2);
    lcd.print("temp:");
    lcd.print((float)DHT11.temperature,0);//2 means 2 digi
    lcd.setCursor(0, 3);
   //lcd.println(counter);
}
if(sensorValue>600){
    Serial.println("Stop Too much water!!");
    lcd.println("Stop Too much water");
    lcd.setCursor(0, 1);
    lcd.print("Hum(%):");
    lcd.print((float)DHT11.humidity, 0);
    lcd.setCursor(0, 2);
    lcd.print("temp:");
    lcd.print((float)DHT11.temperature,0);//2 means 2 digi
    lcd.setCursor(0, 3);
    //lcd.println(counter);
    //----------------------------------------
      //发送AT命令同步
    Serial.println("AT");   
    delay(2000);
    Serial.println("AT");   
    delay(2000);

    //发送短信
    Serial.println("AT+CMGF=1");
    delay(1000);
    Serial.println(num)
    delay(1000);
    Serial.print("Too much water! ");
    Serial.print("Hum(%):");
    Serial.print((float)DHT11.humidity, 0);
    Serial.print(" Temp:");
    Serial.print((float)DHT11.temperature,0);
    //Serial.print(" 请处理");
    delay(11000);
    Serial.write(26);

    while(1);
    sentSMSCounter++;
    if(sentSMSCounter=3){
      delay(30000);
    }
    if(sentSMSCounter>3){
      num="give up!";
      delay(100000);
    }

    //----------------------------------------
}
counter++;
delay(1000);
}


页: [1]
查看完整版本: 作品1 2.0 添加短信通知功能