Контроль автозапуска авто

soglaev
Offline
Зарегистрирован: 09.10.2017

Добрый день, недавно начал знакомство с arduino. Сделал себе простенький автозапуск по смс с помощью arduino nano, sim800l и реле. Подключил к реле второй брелок от сигнализации (tomahawk tw-9010). Теперь когда отправляешь смс с текстом "1" реле замыкается на 1 секунду, к которой подключена кнопка автозапуска на брелке. Как реле замыкается, arduino отправляет смс в ответ "komanda vipolnena". Но столкнулся с проблемой - сигнал от брелка не всегда с первого раза доходит до сигнализации, сказываются помехи на частоте 433 mhz. Хочу реализовать контроль автозапуска. Думается сделать по следующему принципу: нужно чтобы реле замкнулось на 1 сек, потом ардуино подождал пару секунд, и если поворотники не моргнули (что указывает о получении сигнала от брелка) то отправляет повторно команду на реле замкнуть на 1 сек. И так до тех пор пока не придет сигнал с поворотников, после получения сигнала отправляет смс с текстом "komanda vipolnena"

#include "SIM900.h"
#include <SoftwareSerial.h>

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

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


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

char smsDv[] ="Komanda Vipolnena!";
char pos;
char sendsms[160];

void setup() {

 pinMode(7, OUTPUT);
digitalWrite(7,HIGH);
Serial.begin(9600);


       if (gsm.begin(4800)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

}
void loop() {

pos = sms.IsSMSPresent(SMS_UNREAD); // смотрим непрочитанные СМС
      if (pos) {                    // Если непрочитанные СМС есть, то...
        
getsms(); // получаем непрочитанную СМС

if (input_string=="1"){Serial.print("YES!");
//n1.toCharArray(n,20);
sms.SendSMS(n, smsDv);
sms.DeleteSMS(1);
memset(n,0,20); // Команда "1" - действие
input_string=""; 
char smsbuffer[160]="";
digitalWrite(7,LOW);
delay(1000);
digitalWrite(7,HIGH);
}
sms.DeleteSMS(pos); // удаляем СМС  из симки
      }
}
void getsms()
{
sms.GetSMS(pos,n,20,smsbuffer,160);
input_string =String(smsbuffer);
          }

 

тут файлы библиотеки:

https://filecloud.me/g6lh010613xw.html

sadman41
Offline
Зарегистрирован: 19.10.2016

Думаю, что минимальная ставка в 500р уместна, как считаете, коллеги?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тыщщя. и пузырь

harus
Offline
Зарегистрирован: 29.06.2016

500 руб за три строчки - дороговато.
Предлагаю по 100 руб за строку

soglaev
Offline
Зарегистрирован: 09.10.2017

Лучше конечно было бы самому научиться все это делать , но как я новичок в этом деле сложновато пока. Сижу разбираюсь, дошел до if и else, но не могу понять как заставить повторять код если условие else .  

soglaev
Offline
Зарегистрирован: 09.10.2017
#include "SIM900.h"
#include <SoftwareSerial.h>

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

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


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

char smsDv[] ="Komanda Vipolnena!";
char pos;
char sendsms[160];

void setup() {

 pinMode(7, OUTPUT);
 pinMode(A0, INPUT);
digitalWrite(7,HIGH);
Serial.begin(9600);


       if (gsm.begin(4800)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

}
void loop() {

pos = sms.IsSMSPresent(SMS_UNREAD); // смотрим непрочитанные СМС
      if (pos) {                    // Если непрочитанные СМС есть, то...
        
getsms(); // получаем непрочитанную СМС

if (input_string=="1"){Serial.print("YES!");
//n1.toCharArray(n,20);
memset(n,0,20); // Команда "1" - действие
input_string=""; 
char smsbuffer[160]="";
digitalWrite(7,LOW);
delay(1000);
digitalWrite(7,HIGH);
delay(6000);
int ign = analogRead(A0) / 128;
if( ign > 0 )
{
sms.SendSMS(n, smsDv);
sms.DeleteSMS(1);
} 
else 
{
  
}
sms.DeleteSMS(pos); // удаляем СМС  из симки
      }
}
void getsms()
{
sms.GetSMS(pos,n,20,smsbuffer,160);
input_string =String(smsbuffer);
          }

думаю лучше не от поворотников контроль сделать а от включения зажигания 

sadman41
Offline
Зарегистрирован: 19.10.2016

Полагаю, что вы веткой ошиблись. Видите, там сверху написано: "Ищу исполнителя. Поиск возмездной помощи"?

Не светит тебе пузырь, Семён

soglaev
Offline
Зарегистрирован: 09.10.2017

переместите меня пожалуйста, и прошу прощения за это

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Жалка. Я уже стакан пратеръ. 

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

harus пишет:
500 руб за три строчки - дороговато. Предлагаю по 100 руб за строку

Я бы по индусски наговнокодил бы три тома блинка )))

soglaev
Offline
Зарегистрирован: 09.10.2017

Вы только за деньги людям помогаете? 

sadman41
Offline
Зарегистрирован: 19.10.2016

Семён за водку.

Вообще - мы помогаем, когда добрые. А добрые - когда пьяные. А пьяные... ну, сами понимаете.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Кто людям помогaaaaaaеееет.... 

soglaev
Offline
Зарегистрирован: 09.10.2017

весело у вас тут) может дадите ссылку где все доступным языком расписано как применять команды while я так понимаю мне через нее нужно реализовывать. хочется самому научиться программировать, интересная тема

Green
Offline
Зарегистрирован: 01.10.2015

soglaev пишет:

весело у вас тут) может дадите ссылку где все доступным языком расписано как применять команды while я так понимаю мне через нее нужно реализовывать.

А тут без бут. ну никак не разберёшься. Ага?
Вот посмотрите как вашу задачу другие будут делать, глядишь, и поймёте.
 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

soglaev пишет:

может дадите ссылку где все доступным языком расписано как применять команды while

хочется самому научиться программировать, интересная тема

Для начала сверху в шапке сайта Программирование.

Alexandsvoi
Offline
Зарегистрирован: 11.07.2017

soglaev пишет:

весело у вас тут) может дадите ссылку где все доступным языком расписано как применять команды while я так понимаю мне через нее нужно реализовывать. хочется самому научиться программировать, интересная тема

День добрый, что мешает Вам проверить дейстиве оператора while на  очень простом коде ? 

В Ардуино IDE море примеров, простых и сложный. 

 

soglaev
Offline
Зарегистрирован: 09.10.2017

Уже сделал

SerP_89
Offline
Зарегистрирован: 31.01.2017

контроль бери от тахометра на аналоговый вход через делитель напряжения

//читаем тахометр
  value1 = analogRead(analogInput1);
   vout1 = (value1 * 5) / 1024.0; // 
   tahometr = vout1 / (R4/(R3+R4)); 
  if (tahometr>=3.00){..........................
 
 
как то так
aln118
Offline
Зарегистрирован: 08.11.2017

Странно у меня этот скетч не работает. Может быть проблема в том что sim800l версии 2.2 ?

soglaev
Offline
Зарегистрирован: 09.10.2017

Могу скинуть готовый скетч , который на 100% работает сейчас на авто, и поначалу у меня тоже не работал пока библиотеки sim900 не подключился правильно

aln118
Offline
Зарегистрирован: 08.11.2017

Можно поподробнее про правильное подключение этой библиотеки!  

soglaev
Offline
Зарегистрирован: 09.10.2017

https://cloud.mail.ru/public/G7Ak/hHy7JSzdK

отсюда библиотеки подключи 

soglaev
Offline
Зарегистрирован: 09.10.2017
#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); //не уверен
      while(ign < 400)
      {
        count ++;
        if(count > 20) //количество попыток
        {
          sms.SendSMS(n, smsError);
          sms.DeleteSMS(1);
          error = true;
          break;
        }
        digitalWrite(7,LOW);
        delay(1000);
        digitalWrite(7,HIGH);
        delay(7000); //так мы будет каждые 7 секунд пытаться завести машину.
        ign = analogRead(A0);
      }
      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);
}

 

aln118
Offline
Зарегистрирован: 08.11.2017

все равно не хочет работать думаю трабл в модуле. работает только с этим скетчем и подобными.

.

aln118
Offline
Зарегистрирован: 08.11.2017
#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(2, 3); // установка контактов 2 и 3 для программного порта
int LedPin = 7; // для реле
 
void setup()
{
 gprsSerial.begin(4800);
 pinMode(LedPin, OUTPUT);
 digitalWrite(LedPin,HIGH);
 
 
 // настройка приема сообщений
 
 gprsSerial.print("AT+CMGF=1\r");
 delay(500); // задержка на обработку команды
 gprsSerial.print("AT+IFC=1, 1\r");
 delay(500);
 gprsSerial.print("AT+CPBS=\"SM\"\r");
 delay(500); // задержка на обработку команды
 gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
 delay(700);
}
 
String currStr = "";
// если эта строка сообщение, то переменная примет значение True
boolean isStringMessage = false;
 
void loop()
{
 if (!gprsSerial.available())
 return;
 
 char currSymb = gprsSerial.read();
 if ('\r' == currSymb) {
 if (isStringMessage) {
 // если текущая строка – сообщение, то…
 if (!currStr.compareTo("1")) {
 digitalWrite(LedPin, LOW);
delay(1000);
 digitalWrite(LedPin, HIGH);
 }  
 isStringMessage = false;
 } else {
 if (currStr.startsWith("+CMT")) {
 // если текущая строка начинается с "+CMT", то следующая сообщение
 isStringMessage = true;
 }
 }
 currStr = "";
 } else if ('\n' != currSymb) {
 currStr += String(currSymb);
 }
}
soglaev
Offline
Зарегистрирован: 09.10.2017

Трабл в сим 800 версия не подходит скорее всего