Управление отоплением в загородном доме (GSM)

Тема в разделе "Глядите, что я сделал", создана пользователем Вячеслав, 6 дек 2012.

  1. dwk26111974

    dwk26111974 Гик

    Благодарю за совет! В ближайшее время буду пробовать. Узнаю 0 или 1 )))
     
  2. vovka1021

    vovka1021 Нерд

    А как же инициализация и калибровка датчика? 0 и 1 это само собой. Вот только на что и как он будет срабатывать без калибровки это вопрос. Все же нужно переделывать код!!!
     
  3. ИгорьК

    ИгорьК Гуру

    Тоже хотел попробовать этот датчик. Не поделитесь ссылкой как его калибровать?
     
  4. alp69

    alp69 Форумчанин

    Большинство из сказанного в п.1 в плане логики обработки срабатываний, реализуется аппаратно самим датчиком, его настройками с помощью джампера и потенциометров. Так что если и изменять код - то только в отношении его действий при повторном взятии на охрану (автомат или ручной) после сработки.
    Какая инициализация? Какая калибровка? О чем Вы? Калибруется он сам после включения. Просто в течение минуты после холодного старта не рекомендуется провоцировать сработки.
     
    Последнее редактирование: 16 ноя 2016
  5. vovka1021

    vovka1021 Нерд

    не совсем согласен с вами, но все же кодом как то надежнее, вот пример
    Код (C++):
    int calibrationTime = 30;        //Время калибровки датчика (10-60 сек. по даташиту)    
    long unsigned int lowIn;         //Время, в которое был принят сигнал отсутствия движения(LOW)      
    long unsigned int pause = 5000;  //Пауза, после которой движение считается оконченным
    boolean lockLow = true;          //Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
    boolean takeLowTime;             //Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
    int pirPin = 12;                  //вывод подключения PIR датчика
    int ledPin = 13;                 //вывод сигнального диода
    int relayPin = 4;                //реле пин

    void setup()
    {
      pinMode(pirPin, INPUT);
      pinMode(ledPin, OUTPUT);
      pinMode(relayPin, OUTPUT);

    //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять HIGH на LOW
      digitalWrite(relayPin, HIGH);
      delay(4000);
      digitalWrite(pirPin, LOW);
    //дадим датчику время на калибровку
      for(int i = 0; i < calibrationTime; i++){
    //Во время калибровки будет мигать сигнальный диод
         i % 2 ? digitalWrite(ledPin, HIGH) : digitalWrite(ledPin, LOW);
         delay(1000);}
      digitalWrite(ledPin, HIGH);//По окончанию калибровки зажжем сигнальный диод
      delay(50);
    }

    void loop()
    {
      if(digitalRead(pirPin) == HIGH){   //Если обнаружено движение
        if(lockLow)//Если до этого момента еще не включили реле
        {
          lockLow = false;    
          digitalWrite(relayPin, LOW);//Включаем реле.
          delay(50);//!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять LOW на HIGH
        }      
        takeLowTime = true;
      }
      if(digitalRead(pirPin) == LOW){  //Ели движения нет
        if(takeLowTime)                //Если время окончания движения еще не записано
        {
          lowIn = millis();            //Сохраним время окончания движения
          takeLowTime = false;         //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
        }
        if(!lockLow && millis() - lowIn > pause){ //Если время без движение превышает паузу => движение окончено
          lockLow = true;                         //Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения              
          digitalWrite(relayPin, HIGH);
          delay(50);
        }
      }
    }
     
  6. ИгорьК

    ИгорьК Гуру

    Улыбает непадецки. :)
    Где-то есть ссылка на необходимость этого действа? И вообще - что дает ДАТЧИКУ неслушание его цифрового выхода.
     
  7. Aleks_NN

    Aleks_NN Нерд

    http://digitalchip.ru/datchik-dvizheniya-pir-motion-sensor-hc-sr501
    Тут достаточно внятное описание этих датчиков. Вообще он самодостаточен, переписывать скетч стоит, только в случае, если логику распознавания случайных и неслучайных срабатываний, планируется возложить на контролер. Соответственно, вначале, надо придумать этот алгоритм распознавания.
    Один раз я использовал подобный датчик, и при подключении питания, он выдавал единичку на выход, и лишь затем включал ноль и включался в рабочий режим. А это значит, что требуется пауза на считывание этого датчика при перезагрузке дуни.
     
  8. ИгорьК

    ИгорьК Гуру

    Не исключено, но вряд ли стоит называть это патетически "инициализация и калибровка датчика" - сильно в заблуждение вводит.
     
  9. Luk-men

    Luk-men Нуб

    Очень интересная идея! Скетч переделал для своих нужд, но почему то возникают ошибки компиляции. Не могу понять в чем проблема,начальный скетч компилируется без проблем

    [
    Сергей\Desktop\end_home_control\end_home_control.ino: In function 'void GetDatchik()':

    end_home_control:89: error: 'sendTextMessage' was not declared in this scope

    C:\Users\Сергей\Desktop\end_home_control\end_home_control.ino: In function 'void loop()':

    end_home_control:127: error: 'ParseSMS' was not declared in this scope

    end_home_control:151: error: 'sendTextMessage' was not declared in this scope

    end_home_control:171: error: 'ParseSMS' was not declared in this scope

    end_home_control:194: error: 'sendTextMessage' was not declared in this scope

    end_home_control:216: error: 'sendTextMessage' was not declared in this scope

    end_home_control:224: error: a function-definition is not allowed here before '{' token

    end_home_control:294: error: expected '}' at end of input

    end_home_control:294: error: expected '}' at end of input

    exit status 1
    'sendTextMessage' was not declared in this scope

    ]
    [
    #include <SoftwareSerial.h>
    #include "DHT.h"
    #define DHTPIN 7 // pin на котором висит датчик температуры
    #define DHTTYPE DHT11 // DHT 22 тип датчика
    //Отсылается смс в формате: влажность;температура;устройство1;устройство2;устройство3;устройство4;Контроль периметра;Состояние периметра;Контроль автотемпературы;Установленная температура;STEWARD;
    int powerGSM = 6; //Пин включения GSM
    int unit1 = 8; //Управляемое устройство 1
    int unit2 = 9; //Управляемое устройство 2
    int perimetr = 12;// Датчик периметра
    int voda = 4; //датчик уровня воды
    String statusHome;
    int t=0;

    unsigned long currentTime;
    unsigned long loopTime;

    boolean unit1status = false; //Управляемое устройство 1
    boolean unit2status = false; //Управляемое устройство 2
    boolean isvoda = false;//датчик уровня воды


    boolean isPerimetr = false; //Контроль периметра
    boolean sendSMS = false; //Для проверки что смс отсылаем только один раз
    boolean isAuto = false; //Автоматическое управление температурой
    int autoTemp = 0;
    int delta=2;

    DHT dht(DHTPIN, DHTTYPE);

    SoftwareSerial gprsSerial(2, 3);

    boolean prevBtn = LOW;
    String currStr = "";
    // Переменная принимает значение True, если текущая строка является сообщением
    boolean isStringMessage = false;

    void setup()
    {
    pinMode(unit1, OUTPUT);
    pinMode(unit2, OUTPUT);
    pinMode(voda, INPUT);
    pinMode(powerGSM, OUTPUT);
    pinMode(perimetr, INPUT);

    digitalWrite(unit1, HIGH);
    digitalWrite(unit2, HIGH);
    digitalWrite(powerGSM, LOW);

    //Включаю GSM Модуль
    digitalWrite(powerGSM, HIGH);
    delay(5000);
    gprsSerial.begin(19200);
    delay(300);
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    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);

    //Инициализация температурного датчика
    Serial.begin(9600);
    Serial.println("DHTxx test!");

    dht.begin();
    delay(3000);
    // ParseSMS("1;20;0;1;1;1;1");
    currentTime = millis();
    loopTime = currentTime;
    }



    void GetDatchik() {
    // Пол
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    // check if returns are valid, if they are NaN (not a number) then something went wrong!
    if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
    } else {
    statusHome = int(h)+String(";")+int(t)+String(";")+digitalRead(voda)+String(";")+int(isvoda)+String(";")+int(isPerimetr)+String(";")+digitalRead(perimetr)+String(";")+int(isAuto)+String(";")+int(autoTemp)+String(";STEWARD");
    sendTextMessage(statusHome);
    // Serial.print("H"); //Влажность
    // Serial.print(h);
    // Serial.print(";");
    // Serial.print("T"); //Температура
    // Serial.print(t);
    // Serial.println(";");
    // Serial.println(statusHome);

    }
    }






    void loop()
    {
    // delay(5000);
    // GetDatchik();
    int sostPerimetr; //Состояние периметра
    if (gprsSerial.available()){
    char currSymb = gprsSerial.read();
    // Serial.print(currSymb);

    // return;
    // char currSymb = gprsSerial.read();
    // Serial.println(currSymb);
    if ('\r' == currSymb) {
    if (isStringMessage) {
    //если текущая строка - SMS-сообщение,
    //отреагируем на него соответствующим образом
    if (!currStr.compareTo("STATUS"))
    {
    GetDatchik();
    }
    else if (currStr.startsWith("0")||currStr.startsWith("1")) {
    ParseSMS(currStr);
    }

    isStringMessage = false;
    } else {
    if (currStr.startsWith("+CMT")) {
    //если текущая строка начинается с "+CMT",
    //то следующая строка является сообщением
    isStringMessage = true;
    }
    }
    currStr = "";
    } else if ('\n' != currSymb) {
    currStr += String(currSymb);
    }
    }
    // Контроль периметра!!!
    if (isPerimetr==true) { //Проверка Включен ли контроль периметра
    sostPerimetr = digitalRead(perimetr);
    if (sostPerimetr==LOW) { //Проверка на разомкнутый периметр
    digitalWrite(unit1, LOW);
    delay(200);
    //и отсылаем СМС
    if (sendSMS==false){
    sendTextMessage("WARNING! The perimeter of the broken!");

    sendSMS=true;
    }
    }

    }
    int sosvoda; //Состояние воды
    if (gprsSerial.available()){
    char currSymb = gprsSerial.read();
    // Serial.print(currSymb);
    if ('\a' == currSymb) {
    if (isStringMessage) {
    //если текущая строка - SMS-сообщение,
    //отреагируем на него соответствующим образом
    if (!currStr.compareTo("STATUS"))
    {
    GetDatchik();
    }
    else if (currStr.startsWith("0")||currStr.startsWith("1")) {
    ParseSMS(currStr);
    }

    isStringMessage = false;
    } else {
    if (currStr.startsWith("+CMT")) {
    //если текущая строка начинается с "+CMT",
    //то следующая строка является сообщением
    isStringMessage = true;
    }
    }
    currStr = "";
    } else if ('\b' != currSymb) {
    currStr += String(currSymb);
    }
    }
    // Контроль воды!!!
    if (isvoda==true) { //Проверка Включен ли контроль воды
    sosvoda = digitalRead(voda);
    if (sosvoda==LOW) { //Проверка на разомкнутый воды
    delay(200);
    //и отсылаем СМС
    if (sendSMS==false){
    sendTextMessage("WARNING!VODA!");

    sendSMS=true;
    }
    }

    }
    // Контроль температуры!!!
    if (isAuto==true) { //Проверка Включен автоуправление батареями
    //Замер температуры можно проводить не чаще раз в 5 минут
    currentTime = millis();
    if(currentTime >= (loopTime + 60000)){
    t = int(dht.readTemperature());
    loopTime = currentTime;
    }
    //
    // Serial.print("t=");
    // Serial.println(t);
    // Serial.print("autoTemp+delta=");
    // Serial.println(autoTemp+delta);
    if (t < autoTemp-delta) {
    if (sendSMS==false){
    sendTextMessage("WARNING! TEMPERATURE!");
    sendSMS=true;
    }
    }




    void ParseSMS(String currStr) {
    int firstSemicolon;
    //Распарсиваем SMS
    firstSemicolon = 1;//находим первую ;
    //Получаем значение Автоматического режима контроля температуры
    // if (currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )) == "0"){
    if (currStr.substring(0,1) == "0"){
    isAuto=false;
    }
    else{
    isAuto=true;
    }
    // Serial.println(currStr.substring(0,1));
    // Serial.print("isAuto=");
    // Serial.println(isAuto);
    firstSemicolon = currStr.indexOf(';');
    //Получаем значение Автоматического уровня температуры
    autoTemp = stringToNumber(currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )));
    firstSemicolon = currStr.indexOf(';',firstSemicolon + 1 );
    // Serial.println(autoTemp);
    //Получаем значение Контроля периметра
    if (currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )) == "0"){
    isPerimetr=false;
    } else {
    isPerimetr=true;
    }
    // Serial.println(isPerimetr);
    firstSemicolon = currStr.indexOf(';',firstSemicolon + 1 );
    //кОНТРОЛЬ ВОДЫ
    if (currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )) == "0"){
    isvoda=false;
    } else {
    isvoda=true;
    }
    // Serial.println(isvoda);
    firstSemicolon = currStr.indexOf(';',firstSemicolon + 1 );





    }

    /*
    * Функция отправки SMS-сообщения
    */
    void sendTextMessage(String text) {
    // Устанавливает текстовый режим для SMS-сообщений
    gprsSerial.print("AT+CMGF=1\r");
    delay(100); // даём время на усваивание команды
    // Устанавливаем адресата: телефонный номер в международном формате
    gprsSerial.println("AT + CMGS = \"+7909939XXXX\""); //Телефон нужно откорректировать
    delay(100);
    // Пишем текст сообщения
    gprsSerial.println(text);
    delay(100);
    // Отправляем Ctrl+Z, обозначая, что сообщение готово
    gprsSerial.println((char)26);
    }


    //Функция преобразовангия STRING в INT
    int stringToNumber(String thisString) {
    int i, value = 0, length;
    length = thisString.length();
    for(i=0; i<length; i++) {
    value = (10*value) + thisString.charAt(i)-(int) '0';;
    }
    return value;
    }
    }
    ]
     
  10. Aleks_NN

    Aleks_NN Нерд

    Наверное, все дело в орфографии и пунктуации. Компилятор не согласен с отсутствием знаков препинания. :)) Следите за ";" и проверяйте скобки "{ ... }" на парность.
     
  11. Luk-men

    Luk-men Нуб

    Спасибо за ответ. Исправил ошибки со скобками, вылезли новые.
    Код (C++):
    #include <SoftwareSerial.h>
    #include "DHT.h"
    #define DHTPIN 7    // pin на котором висит датчик температуры
    #define DHTTYPE DHT11  // DHT 22 тип датчика
    //Отсылается смс в формате: влажность;температура;устройство1;устройство2;устройство3;устройство4;Контроль периметра;Состояние периметра;Контроль автотемпературы;Установленная температура;STEWARD;
    int powerGSM = 6; //Пин включения GSM
    int unit1 = 8; //Управляемое устройство 1
    int unit2 = 9; //Управляемое устройство 2
    int perimetr = 12;// Датчик периметра
    int voda = 4; //датчик уровня воды
    String statusHome;
    int t=0;
    unsigned long currentTime;
    unsigned long loopTime;
    boolean unit1status = false; //Управляемое устройство 1
    boolean unit2status = false; //Управляемое устройство 2
    boolean isvoda = false;//датчик уровня воды

    boolean isPerimetr = false; //Контроль периметра
    boolean sendSMS = false; //Для проверки что смс отсылаем только один раз
    boolean isAuto = false; //Автоматическое управление температурой
    int autoTemp = 0;
    int delta=2;
    DHT dht(DHTPIN, DHTTYPE);
    SoftwareSerial gprsSerial(2, 3);
    boolean prevBtn = LOW;
    String currStr = "";
    // Переменная принимает значение True, если текущая строка является сообщением
    boolean isStringMessage = false;
    void setup()
    {
        pinMode(unit1, OUTPUT);
        pinMode(unit2, OUTPUT);
        pinMode(voda, INPUT);
        pinMode(powerGSM, OUTPUT);
        pinMode(perimetr, INPUT);
        digitalWrite(unit1, HIGH);
        digitalWrite(unit2, HIGH);
        digitalWrite(powerGSM, LOW);
        //Включаю GSM Модуль
        digitalWrite(powerGSM, HIGH);
        delay(5000);
        gprsSerial.begin(19200);
        delay(300);
        // Настраиваем приём сообщений с других устройств
        // Между командами даём время на их обработку
        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);
        //Инициализация температурного датчика
        Serial.begin(9600);
        Serial.println("DHTxx test!");
        dht.begin();
        delay(3000);
    // ParseSMS("1;20;0;1;1;1;1");
      currentTime = millis();
      loopTime = currentTime;
    }
    void GetDatchik() {
      // Пол
      // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
      float h = dht.readHumidity();
      float t = dht.readTemperature();
      // check if returns are valid, if they are NaN (not a number) then something went wrong!
      if (isnan(t) || isnan(h)) {
        Serial.println("Failed to read from DHT");
      } else {
        statusHome = int(h)+String(";")+int(t)+String(";")+digitalRead(voda)+String(";")+int(isvoda)+String(";")+int(isPerimetr)+String(";")+digitalRead(perimetr)+String(";")+int(isAuto)+String(";")+int(autoTemp)+String(";STEWARD");
        sendTextMessage(statusHome);
    //  Serial.print("H"); //Влажность
    //  Serial.print(h);
    //  Serial.print(";");
    //  Serial.print("T"); //Температура
    //  Serial.print(t);
    //  Serial.println(";");
    //  Serial.println(statusHome);
      }
    }
    void loop()
    {
    // delay(5000);
    // GetDatchik();
    int sostPerimetr; //Состояние периметра
      if (gprsSerial.available()){
      char currSymb = gprsSerial.read();
    // Serial.print(currSymb);
          //  return;
      //  char currSymb = gprsSerial.read();
      //  Serial.println(currSymb);
        if ('\r' == currSymb) {
            if (isStringMessage) {
                //если текущая строка - SMS-сообщение,
                //отреагируем на него соответствующим образом
                if (!currStr.compareTo("STATUS"))
                {
                  GetDatchik();
                }
                else if (currStr.startsWith("0")||currStr.startsWith("1")) {
                  ParseSMS(currStr);
                }
           
                isStringMessage = false;
            } else {
                if (currStr.startsWith("+CMT")) {
                    //если текущая строка начинается с "+CMT",
                    //то следующая строка является сообщением
                    isStringMessage = true;
                }
            }
            currStr = "";
        } else if ('\n' != currSymb) {
            currStr += String(currSymb);
        }
      }
    //  Контроль периметра!!!
      if (isPerimetr==true) { //Проверка Включен ли контроль периметра
          sostPerimetr = digitalRead(perimetr);
            if (sostPerimetr==LOW) { //Проверка на разомкнутый периметр
              digitalWrite(unit1, LOW);
              delay(200);
              //и отсылаем СМС
              if (sendSMS==false){
                sendTextMessage("WARNING! The perimeter of the broken!");
               
                sendSMS=true;
              }
          }
      }
      int sosvoda; //Состояние воды
      if (gprsSerial.available()){
      char currSymb = gprsSerial.read();
    // Serial.print(currSymb);
        if ('\a' == currSymb) {
            if (isStringMessage) {
                //если текущая строка - SMS-сообщение,
                //отреагируем на него соответствующим образом
                if (!currStr.compareTo("STATUS"))
                {
                  GetDatchik();
                }
                else if (currStr.startsWith("0")||currStr.startsWith("1")) {
                  ParseSMS(currStr);
                }
           
                isStringMessage = false;
            } else {
                if (currStr.startsWith("+CMT")) {
                    //если текущая строка начинается с "+CMT",
                    //то следующая строка является сообщением
                    isStringMessage = true;
                }
            }
            currStr = "";
        } else if ('\b' != currSymb) {
            currStr += String(currSymb);
        }
      }
    //  Контроль воды!!!
      if (isvoda==true) { //Проверка Включен ли контроль воды
          sosvoda = digitalRead(voda);
            if (sosvoda==LOW) { //Проверка на разомкнутый воды
              delay(200);
              //и отсылаем СМС
              if (sendSMS==false){
                sendTextMessage("WARNING!VODA!");
                sendSMS=true;
              }
          }
      }
    //  Контроль температуры!!!
      if (isAuto==true) { //Проверка Включен автоуправление батареями
      //Замер температуры можно проводить не чаще раз в 5 минут
          currentTime = millis();
      if(currentTime >= (loopTime + 60000)){
      t = int(dht.readTemperature());
      loopTime = currentTime;
      }
    //
    //  Serial.print("t=");
    //  Serial.println(t);
    //  Serial.print("autoTemp+delta=");
    //  Serial.println(autoTemp+delta);
        if (t < autoTemp-delta) {
         if (sendSMS==false){
                sendTextMessage("WARNING! TEMPERATURE!");
                sendSMS=true;  
         }
       }
      }
    }
    void ParseSMS(String currStr) {
      int firstSemicolon;
      //Распарсиваем SMS
      firstSemicolon = 1;//находим первую ;
      //Получаем значение Автоматического режима контроля температуры
      // if (currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )) == "0"){
        if (currStr.substring(0,1) == "0"){
        isAuto=false;
      }
        else{
          isAuto=true;
        }
      //  Serial.println(currStr.substring(0,1));
    //  Serial.print("isAuto=");
    //  Serial.println(isAuto);
      firstSemicolon = currStr.indexOf(';');
      //Получаем значение Автоматического уровня температуры
      autoTemp = stringToNumber(currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )));
      firstSemicolon = currStr.indexOf(';',firstSemicolon + 1 );
    // Serial.println(autoTemp);
      //Получаем значение Контроля периметра
      if (currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )) == "0"){
        isPerimetr=false;
      } else {
          isPerimetr=true;
        }
    //  Serial.println(isPerimetr);
      firstSemicolon = currStr.indexOf(';',firstSemicolon + 1 );
      //кОНТРОЛЬ ВОДЫ
       if (currStr.substring(firstSemicolon+1,currStr.indexOf(';', firstSemicolon + 1 )) == "0"){
        isvoda=false;
      } else {
          isvoda=true;
        }
    //  Serial.println(isvoda);
      firstSemicolon = currStr.indexOf(';',firstSemicolon + 1 );
    }
     
    /*
    * Функция отправки SMS-сообщения
    */

    void sendTextMessage(String text) {
        // Устанавливает текстовый режим для SMS-сообщений
        gprsSerial.print("AT+CMGF=1\r");
        delay(100); // даём время на усваивание команды
        // Устанавливаем адресата: телефонный номер в международном формате
        gprsSerial.println("AT + CMGS = \"+7909939XXXX\""); //Телефон нужно откорректировать
        delay(100);
        // Пишем текст сообщения
        gprsSerial.println(text);
        delay(100);
        // Отправляем Ctrl+Z, обозначая, что сообщение готово
        gprsSerial.println((char)26);
    //Функция преобразовангия STRING в INT
    int stringToNumber(String thisString) {
      int i, value = 0, length;
      length = thisString.length();
      for(i=0; i<length; i++)
        {
        value = (10*value) + thisString.charAt(i)-(int) '0';
        }
      return value;
    }
    }
     
    C:\Users\Сергей\Desktop\end_home_control\end_home_control.ino: In function 'void ParseSMS(String)':

    end_home_control:242: error: 'stringToNumber' was not declared in this scope

    C:\Users\Сергей\Desktop\end_home_control\end_home_control.ino: In function 'void sendTextMessage(String)':

    end_home_control:279: error: a function-definition is not allowed here before '{' token

    end_home_control:288: error: expected '}' at end of input

    exit status 1
    'stringToNumber' was not declared in this scope


     
  12. Aleks_NN

    Aleks_NN Нерд

    Нет закрывающей скобки в: void sendTextMessage(String text)
    и лишняя скобка в конце скетча.

    ЗЫ. Это вам не сочинение на тему "Война миров" писать. У компилятора запятую не отспоришь :)

    И уберите кириллицу из названия скетча. Оп, это не название, это путь к каталогу. Все равно не хорошо, сделайте каталог для проектов в корне диска, кириллица в виндовых путях - моветон.
     
    Последнее редактирование: 26 ноя 2016
  13. mastert

    mastert Нуб

    Всем привет. Воспользовался проектом valdai, с этой темы, все работает стабильно. Единственное напрягает при каждом запуске приложения появляется вот это предупреждение, кто знает что это такое и как убрать? Screenshot_2016-11-29-15-46-04.jpg SmartSelectImage_2016-11-29-15-33-12.png
     
    Последнее редактирование: 29 ноя 2016
  14. vovka1021

    vovka1021 Нерд

    Это он ругается на отсутствии резервного питания. Подключить + на пин(см. В скече #пина)
     
    mastert нравится это.
  15. kadr142

    kadr142 Нуб

    Всем привет! Помогите пожалуйста новичку... Как правильно соединить вот такие платы между собой? Нужно ли корректировать скетч опубликованный в начале темы?
     

    Вложения:

  16. saha1950

    saha1950 Нуб

    Добрый день. Очень понравились Ваши проекты. У меня есть UNOR3, LcdkeypadShield, датчики DH11, GSM модем. Если не пойдет модем докуплю какой нужно.

    Я не силен в программировании. Не могли бы Вы дать мне скетчи работающие (без ошибок) и андроидные программы бля пробы.

    Мой мейл altim1950@mail.ru
     
  17. vovka1021

    vovka1021 Нерд

    Если хочешь могу такой вариант предложить, он рабочий, но требуется доработка кода в плане стабильности работы Screenshot_20161210-153656.png
     
    andros нравится это.
  18. vist

    vist Нуб

    Добрый день! Будьте добры cбросьте исходники на ist-2010@mail.ru. Спасибо.
     
  19. saha1950

    saha1950 Нуб

    Я только хочу начать т.ч. Все пойдет главное рабочий скетч для ардуина
     
  20. Здравствуйте,подскажите пожалуйста.у меня такая проблема,стоял стевард(который из начала темы)на телефоне с андроидом версии 4.2,и прекрасно работал,но тут пришлось поменять телефон,а там версия андроида 5.1,и после установки и запуска стеварда пишет"произошла ошибка",скажите что можно сделать,может кто сталкивался,стевард 2,как писали выше мне не подойдет,потому что там не один датчик,а у меня один,да мне и не нужно больше,а при отсутствии датчиков никакой управляемости(отсылки и получении смс) не будет.Короче цель такова,как сделать,чтобы старый мною уважаемый стевард запускался на новом телефоне с андроидом 5.1