Включение электричества и регулировка температуры.

Тема в разделе "Глядите, что я сделал", создана пользователем lori, 25 фев 2014.

  1. lori

    lori Нуб

    На данный момент есть датчик температуры, и модуль gprs. Нужно сделать так, чтоб по отправке смс включались твердотельные реле, а на компе в сериал монитор постоянно выводилась температура.
    Прогать не особо умею, пока получился вот такой код(смс не принимаются, температура выводится):

    #include <SoftwareSerial.h>

    SoftwareSerial gprsSerial(7, 8);

    //для зелёного светодиода будем использовать второй цифровой вход,
    //а для жёлтого - третий
    int greenPin = 2;
    int yellowPin = 3;
    String currStr = "";
    // Переменная принимает значение True, если текущая строка является сообщением
    boolean isStringMessage = false;

    void setup()
    {
    gprsSerial.begin(19200);
    Serial.begin(9600);
    pinMode(greenPin, OUTPUT);
    pinMode(yellowPin, OUTPUT);

    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    delay(300);
    gprsSerial.print("AT+IFC=1, 1\r");
    delay(300);
    gprsSerial.print("AT+CPBS=\"SM\"\r");
    delay(300);
    gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
    delay(500);
    }



    void loop()
    {
    while (true) {
    if (!gprsSerial.available())
    return;
    tempreture();
    char currSymb = gprsSerial.read();
    if ('\r' == currSymb) {
    Serial.println ("222");
    if (isStringMessage) {
    Serial.println ("333");
    //если текущая строка - SMS-сообщение,
    //отреагируем на него соответствующим образом
    if (!currStr.compareTo("Green on")) {
    digitalWrite(greenPin, HIGH);
    } else if (!currStr.compareTo("Green off")) {
    digitalWrite(greenPin, LOW);
    } else if (!currStr.compareTo("Yellow on")) {
    digitalWrite(yellowPin, HIGH);
    } else if (!currStr.compareTo("Yellow off")) {
    digitalWrite(yellowPin, LOW);
    }
    isStringMessage = false;
    } else {
    if (currStr.startsWith("+CMT")) {
    //если текущая строка начинается с "+CMT",
    //то следующая строка является сообщением
    isStringMessage = true;
    }
    }
    currStr = "";
    } else if ('\n' != currSymb) {
    currStr += String(currSymb);
    }
    }

    }
    void tempreture()
    {
    float voltage = 5.0 / 1024.0 * analogRead(0);
    Serial.print(voltage);
    Serial.println(" B");
    float tempC = ( voltage - 0.5 ) * 100;
    Serial.print(tempC);
    Serial.println(" C");
    delay(1000);
    }
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Взято отсюда http://tinyurl.com/omw62xm ? Если да то всё работает СМС принимаются-сам пробовал.
     
  3. lori

    lori Нуб

    Всё работает если не включать контроль температуры:
    void tempreture()
    {
    float voltage = 5.0 / 1024.0 * analogRead(0);
    Serial.print(voltage);
    Serial.println(" B");
    float tempC = ( voltage - 0.5 ) * 100;
    Serial.print(tempC);
    Serial.println(" C");
    delay(1000);
    }
    Если датчик температуры прописать - СМС перестаёт приниматься.
     
  4. lori

    lori Нуб

    Может тут нужна многозадачность? Ардуино одновременно опрашивает датчик и шилд... Как это реализовать?