GSM сигнализация с герконом сим900 ардуино уно

Aidana
Offline
Зарегистрирован: 06.06.2017

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

const int buzzer = 3;

const int sensor = 4;

int state; // 0 close - 1 open wwitch

void setup()

{

  pinMode(sensor, INPUT_PULLUP);

}

void loop()

{

  state = digitalRead(sensor);

  if (state == HIGH) {

    tone(buzzer, 40);

  }

  else {

    noTone(buzzer);

  }

  delay(200);

}

и для сим900 отдельно

#include <SoftwareSerial.h>

SoftwareSerial SIM900(7, 8); // Настройка последовательного порта для SIM900

char incoming_char=0; // Переменная содержит символы, которые рассылает SIM900

int salir = 0;

void setup()

{

SIM900.begin(19200); // Скорость последовательного набора для SIM900

delay(25000); // Задержка найти RED

Serial.begin(19200); // Скорость последовательного набора для Arduino

Serial.println("OK"); // OK сообщение в Arduino, чтобы знать, что все хорошо.

}

void call()

// Функция, которая позволяет вызывать локальную ячейку

{

// SIM900.println ( "ATD +77782886598;"); //Локальный номер

SIM900.println("ATD +77782886598;"); //сотовый

delay(100);

SIM900.println();

delay(60000); // Подождите 30 секунд ...

}

void loop()

{

call(); //позвонить

for(;;)

{

if(SIM900.available() >0)

{

incoming_char=SIM900.read(); //Получить символ из последовательного порта сотового.

Serial.print(incoming_char); //Вывести входящий символ в терминал.

}

if(Serial.available() > 0)

{

if(Serial.read() == 'A') break;

}

}

Serial.println("OK-2");

delay(100);

SIM900.println();

delay(30000);

while(1); // подождите некоторе время

}

проблема в том что я не знаю как их объеденить. пожалуйста помогите(((((( 

b707
Offline
Зарегистрирован: 26.05.2017

Aidana пишет:

добрый день. я новичек

проблема в том что я не знаю как их объеденить. пожалуйста помогите(((((( 

блин, ну откуда вы взяли это слово - новичЕк ?!!! - это слово пишется через "О" !

Как обьеденить... тьфу. объедИнить эти два обрывка:

1) Начала обоих скетчей до setup() просто пишете подряд

2) Содержимое setup() второго скетча добавляете в setup первого

3) Функцию call() из второго скетча копируете в конец первого, все остальное из второго счетча можно выкинуть

4) в первом скетче вместо tone(buzzer, 40); пишете вызов call(), ветку else выкинуть

ВСЕ.  Исправить ошибки.

Но работать как сигналка - не будет. Этому коду еще очень далеко до рабочего.

 

Aidana
Offline
Зарегистрирован: 06.06.2017

спасибо за ответ. писала в сонном состоянии и было не важно правильно ли я орфографически пишу или нет. а что и как нужно сделать чтоб она была рабочей?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Aidana. Под платформу Ардуино нет специализированых учебников,и разумеется учителей, по вопросу, как правильно писать программы(программные модули) под Ардуино ,и решать проблему с совмещением различных скетчей, которые отдельно работают. Но это не значит, что модули не совмещают и они не совместно работают. Просто рецепты у каждого свои. А вот подойдут они вам, я не скажу. Это вы должны решить сами. Мой рецепт, углубленое изучение Си и поиск оптимума перебором всевозможных вариантов.

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

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Да уж, видно пора написать, наконец, инструкцию, как объединять скетчи.

Aidana, на первом этапе нужно переписать скетчи так, чтобы они не содержали delay(), обычно именно она не позволяет совместить скетчи.

Когда:

а) избавитесь от delay(),

б) поместите сюда результат согласно правилам форума,

в) снабдите все это принципиальной схемой,

тогда появится предмет для обсуждения.

Aidana
Offline
Зарегистрирован: 06.06.2017
#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); // Настройка последовательного порта для SIM900
char remoteNumber[] = "+77782886598"; 
char incoming_char=0; // Переменная содержит символы, которые рассылает SIM900
int salir = 0;
const int buzzer = 3;
const int sensor = 4;
int state; // 0 close - 1 open wwitch
void setup()
{
  pinMode(sensor, INPUT_PULLUP);
{
SIM900.begin(19200); // Скорость последовательного набора для SIM900
Serial.begin(19200); // Скорость последовательного набора для Arduino
Serial.println("OK"); // OK сообщение в Arduino, чтобы знать, что все хорошо.
}
}
 
void call()
// Функция, которая позволяет вызывать локальную ячейку
{
// SIM900.println ( "ATD +77782886598;");  //Локальный номер
SIM900.println("ATD +77782886598;"); //сотовый
SIM900.println();
}
void loop()
{
  state = digitalRead(sensor);

  if (state == HIGH) {
    tone(buzzer, 40);
Serial.println("OK");
SIM900.println ("ATD +77782886598;");
SIM900.println();

  }
  else {
    noTone(buzzer);
  }
}  

 

b707
Offline
Зарегистрирован: 26.05.2017

и как, компилируется?

Навскидку

- скобки в строках 12 и 16 лишние.

- переменные remoteNumber[],  incoming_char, salir и  state, функция call() нигде не используются.

И главное - я же вам писал, что этот код далек от реального. Как только геркон замкнется, программа начнет звонить вам непрерывно. Запоминания состояния, чтобы не звонить вечно - в программе нет. Трубку вы не кладете, ответов от модема не получаете и анализируете.   Проверки включения модема нет. Проверки наличия сети - нет. И так далее...

В разделе "Проекты" есть сигнализация на другом модеме. Посмотрите, чтобы хотя бы представлять обьем работы.

Aidana
Offline
Зарегистрирован: 06.06.2017

он не совершает звонок. спасибо вам за ответы