Помогите новичку, контроль автозапуска авто

Тема в разделе "Arduino & Shields", создана пользователем soglaev, 9 окт 2017.

  1. ORLENOK

    ORLENOK Гик

    Тогда с учётом всех моментов будет так:
    Код (C++):
    #include "SIM900.h"
    #include <SoftwareSerial.h>

    #include "sms.h"
    #include "call.h"
    SMSGSM sms;
    CallGSM call;

    //=================Пины 2 и 3 для Подключения GSM модуля

    boolean started=false;
    char smsbuffer[160];
    char n[20];
    String n1 = "+79088018800";
    String input_string = "";

    char smsDv[] ="Komanda Vipolnena!";
    char[] smsError = "Error";
    char pos;

    void setup() {

      pinMode(7, OUTPUT);
      pinMode(A0, INPUT);
      digitalWrite(7,HIGH);
     
      if (gsm.begin(4800))
      {
        started=true;
      }
     
    }
    void loop()
    {
      pos = sms.IsSMSPresent(SMS_UNREAD); // смотрим непрочитанные СМС
      if (pos)
      {                    // Если непрочитанные СМС есть, то...    
        getsms(); // получаем непрочитанную СМС
       
        if (input_string=="1") // Команда "1" - действие
        {
          n1.toCharArray(n,20); в n1 записываем номер, хранится в n.
          input_string="";
          digitalWrite(7,LOW);
          delay(1000);
          digitalWrite(7,HIGH);
          delay(6000);
          int count = 0;
          bool error = false;
          int ign = analogRead(A0) / 128; //не уверен
          while(ign != 1)
          {
            count ++;
            if(count > 30) //количество попыток
            {
              sms.SendSMS(n, smsError);
              sms.DeleteSMS(1);
              error = true;
              break;
            }
            digitalWrite(7,LOW);
            delay(1000);
            digitalWrite(7,HIGH);
            delay(6000); //так мы будет каждые 7 секунд пытаться завести машину.
            ign = analogRead(A0)/128;
          }
          if(!error)
          {
            sms.SendSMS(n, smsDv);
            sms.DeleteSMS(1);
          }
        }
        sms.DeleteSMS(pos); // удаляем СМС  из симки
        memset(n,0,20); //обнуляем массив n
      }
    }

    void getsms()
    {
      sms.GetSMS(pos,n,20,smsbuffer,160);
      input_string =String(smsbuffer);
    }
     
  2. soglaev

    soglaev Нерд

    при компилиции скетча ошибка
    exit status 1
    expected unqualified-id before '[' token
    и выделена строка char[] smsError = "Error";
    сделал строку так: char smsError[] = "Error";
    загружаю)
     
  3. soglaev

    soglaev Нерд

    отправил смс с текстом "1" реле сработало как должно было, не получив сигнала с A0 через 6 сек снова сработало, после чего замолчало. Смс в ответ не отправла. Последующие смс с кодом "1" реле срабатывала 1 раз
     
  4. soglaev

    soglaev Нерд

    Залил этот скетч, реле также сработало 2 раза, после чего пришло смс что команда выполнена. Хотя на A0 сигнал не давал.
     
  5. Airbus

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

    Я правильно понял что СМС передаётся на Ардуино которая в машине и она тупо нажимает кнопку автозапуска?Странный скетч...
     
  6. soglaev

    soglaev Нерд

  7. b707

    b707 Гуру

    ошибочки, которые вижу сразу
    1. начальное значение error должно быть истинным bool error = true;
    2. значение с аналогового пина не надо делить на 128
    3. условие цикла такое : while (ign >900)
     
  8. ORLENOK

    ORLENOK Гик

    Почему? Изначально считаем, что ошибок нет, если мы уже 30 раз пробовали запускать, но не сработало, то ошибка.
    Я написал, что не очень понимаю зачем это нужно
    Если больше 900, то на пин идёт сигнал, разве нет?
     
  9. ORLENOK

    ORLENOK Гик

    Думаю так будет лучше. Возможно условие цикла нужно поменять...
    Код (C++):
    #include "SIM900.h"
    #include <SoftwareSerial.h>

    #include "sms.h"
    #include "call.h"
    SMSGSM sms;
    CallGSM call;

    //=================Пины 2 и 3 для Подключения GSM модуля

    boolean started=false;
    char smsbuffer[160];
    char n[20];
    String n1 = "+79088018800";
    String input_string = "";

    char smsDv[] ="Komanda Vipolnena!";
    char smsError[] = "Error";
    char pos;

    void setup() {

      pinMode(7, OUTPUT);
      pinMode(A0, INPUT);
      digitalWrite(7,HIGH);
     
      if (gsm.begin(4800))
      {
        started=true;
      }
     
    }
    void loop()
    {
      if(!started)
        return;
      pos = sms.IsSMSPresent(SMS_UNREAD); // смотрим непрочитанные СМС
      if (pos)
      {                    // Если непрочитанные СМС есть, то...    
        getsms(); // получаем непрочитанную СМС
       
        if (input_string=="1") // Команда "1" - действие
        {
          n1.toCharArray(n,20);
          input_string="";
          int count = 0;
          bool error = false;
         
          do
          {
            count ++;
            if(count > 30) //количество попыток
            {
              sms.SendSMS(n, smsError);
              sms.DeleteSMS(1);
              error = true;
              break;
            }
            digitalWrite(7,LOW);
            delay(1000);
            digitalWrite(7,HIGH);
            delay(6000); //так мы будет каждые 7 секунд пытаться завести машину.
            ign = analogRead(A0);
          }while(ign < 900)
         
          if(!error)
          {
            sms.SendSMS(n, smsDv);
            sms.DeleteSMS(1);
          }
        }
        sms.DeleteSMS(pos); // удаляем СМС  из симки
        memset(n,0,20);
      }
    }

    void getsms()
    {
      sms.GetSMS(pos,n,20,smsbuffer,160);
      input_string =String(smsbuffer);
    }
     
  10. b707

    b707 Гуру

    Я бы по умолчанию сделал ошибку, а в случае успеха ставил ее в false. но можно и так.

    Что касается сигнала на аналоговом пине - вы правы. Чтобы записать там правильное условие, надо сначала договорится с автором. что за сигнал там будет - от зажигания, от поворотников... в какое время и какого уровня.
     
  11. soglaev

    soglaev Нерд

    Код (C++):
    #include "SIM900.h"
    #include <SoftwareSerial.h>

    #include "sms.h"
    #include "call.h"
    SMSGSM sms;
    CallGSM call;

    //=================Пины 2 и 3 для Подключения GSM модуля

    boolean started=false;
    char smsbuffer[160];
    char n[20];
    String n1 = "+79088018800";
    String input_string = "";

    char smsDv[] ="Komanda Vipolnena!";
    char smsError[] = "Error";
    char pos;

    void setup() {

      pinMode(7, OUTPUT);
      pinMode(A0, INPUT);
      digitalWrite(7,HIGH);
      if (gsm.begin(4800))
      {
        started=true;
      }
    }
    void loop()
    {
      pos = sms.IsSMSPresent(SMS_UNREAD); // смотрим непрочитанные СМС
      if (pos)
      {                    // Если непрочитанные СМС есть, то...  
        getsms(); // получаем непрочитанную СМС
     
        if (input_string=="1") // Команда "1" - действие
        {
          n1.toCharArray(n,20); // в n1 записываем номер, хранится в n.
          input_string="";
          digitalWrite(7,LOW);
          delay(1000);
          digitalWrite(7,HIGH);
          delay(6000);
          int count = 0;
          bool error = true;
          int ign = analogRead(A0); //не уверен
          while(ign < 900)
          {
            count ++;
            if(count > 3) //количество попыток
            {
              sms.SendSMS(n, smsError);
              sms.DeleteSMS(1);
              error = true;
              break;
            }
            digitalWrite(7,LOW);
            delay(1000);
            digitalWrite(7,HIGH);
            delay(6000); //так мы будет каждые 7 секунд пытаться завести машину.
            ign = analogRead(A0);
          }
          if(!error)
          {
            sms.SendSMS(n, smsDv);
            sms.DeleteSMS(1);
          }
        }
        sms.DeleteSMS(pos); // удаляем СМС  из симки
        memset(n,0,20); //обнуляем массив n
      }
    }
    этот код работает так как нужно, после 3х неудачных попыток приходит смс Error, но после удачного запуска не приходит komanda vipolnena. Все верно while(ign < 900) это от зажигания
     
  12. ORLENOK

    ORLENOK Гик

    Сейчас и ложные срабатывания из-за этого. Деление на 128, которое вообще не понятно зачем. выдавало значение 0-7.
    Вам нужно определиться с сигналом, который будет приходить на Ардуино. Сейчас если установите в машину, то не сможете получить смс, и возможно она будет пытаться автозапуск несколько раз включать. Нужно как-то подавать сигнал ардуино.
    В этом коде bool error = false; должно быть.
     
    Последнее редактирование: 9 окт 2017
  13. soglaev

    soglaev Нерд

    Все теперь заработало, bool error = false и стали приходить смс и error и vipolnena ) Счастлив как слон, но хотелось бы самому научиться этому искусству) В планах многое хочется добавить, и температуру двигателя чтоб показывал и тд. на что фантазии хватит.
     
  14. soglaev

    soglaev Нерд

    а как называется правильно, когда нужно 14в. перевести для ардуино в 5в? делитель напряжения или я не прав?
     
  15. Airbus

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

    Стабилизатор.LM7805
     
  16. soglaev

    soglaev Нерд

    спасибо.
     
  17. soglaev

    soglaev Нерд

    Lm7805 греться не будет? Или зависит от нагрузки на него?
     
  18. DetSimen

    DetSimen Guest

  19. Airbus

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

    Вообще то Ардуина сама может лихо управлять релюхами зажигания и срартера и отсылать команды на телефон плюс оповещать о несанкционированном открытии дверей багажника запуске а также вырубать двигатель по СМС.Зачем такая многоходовка Ардуино-брелок-автозапуск?
     
  20. soglaev

    soglaev Нерд

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