Да, я согласен, у меня проблема с кириллицей . Единственный вопрос - почему?
Если я копирую с поста # 216, получаю:
001
#include <EEPROM.h>
002
#include <OneWire.h>
003
#include<SoftwareSerial.h>
004
SoftwareSerial mySerial(2, 3);
005
006
OneWire ds(12); // датчик температуры подключен к 9 пину, подтяжка 4.7кОм на +.
007
#define DOOR 4 // концевик двери.
008
#define PIR 5 // датчик движения.
009
#define Led 8 // состояние системы. моргает - на охране.
010
#define BUZ 10 // сирена.
011
#define GAS A0 // датчик дыма.
012
013
// DOOR - если сработал, на входе "+" HIGH.
014
// PIR - если сработал, на входе "+" HIGH.
015
// GAS - если сработал, на входе "+" HIGH.
016
// BUZ - если "-" LOW, то горит.
017
// Led - если "-" LOW, то горит.
SoftwareSerial mySerial(8, 9); //На этих пинах подключен модем RX, TX
#define RLed 10 // Красный светодиод
#define BLed 11 // Синий светодиод
#define GLed 12 // Зеленый светодиод
#define AlarmPin 4 // Выход "тревожного" пина, при срабатывании датчика на этом пине устанавливается сигнал высокого уровня на время указанное в переменной AlarmInterval, по умолчанию 60 секунд.
#define InverseAlarmPin 5 // Инверсный выход "тревожного" пина, при срабатывании датчика на этом пине устанавливается сигнал низкого уровня на время указанное в переменной AlarmInterval, по умолчанию 60 секунд.
#define DoorPin 6 // Номер входа, подключенный к датчику
int8_t DoorState = 0; // Переменная для хранения состояния датчика
int8_t DoorFlag = 1;
unsigned long previousAlarmMillis = 0;
uint16_t AlarmInterval = 60; // Секунд до отключения "тревожного" пина.
unsigned long previousMillis = 0;
uint16_t interval = 100;
uint8_t PauseTime = 15; // Время, указывается в минутах, на которое сигнализация должна засыпать при получении смс команды Pause.
uint8_t ch = 0;
int8_t sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
int8_t AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
int8_t guard = 1; //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
int8_t sendsmscaller; //Переменная для отправки смс о снятии или установки на охрану пользователям которые отсутствуют в массиве AlarmPhone
int8_t LedTestOn = 0;
int8_t LedOn = 1;
String BalanceNumber = "#100#"; //Команда запроса баланса. #100# - ответ латинскими буквами, *100# - ответ русскими буквами. Работает только с латинскими буквами. В данном случае команда запроса баланса Beeline(Россия).
uint8_t BalanceStringLen = 22; //Число символов от начала строки которые нужно переслать в смс сообщении при получении USSD ответа о балансе. Убираем спам от оператора при запросе баланса, особо критично для модема M590, обрезаем всё лишнее.
const char* AllowPhone[] = {"70001234501", "70001234502", "70001234503", "70001234504", "70001234505"}; //Номера которым разрешено управлять охраной. На первый номер будут отправляться смс монитора порта (для отладки)
int8_t CountPhone = sizeof(AllowPhone) / sizeof(AllowPhone[0]);
const char* AlarmPhone[] = {"70001234501", "70001234502"}; //Номера для отправки смс при срабатывании датчиков и о снятии или установки на охрану. На первый номер будет осуществляться вызов если AlarmRing = 1;
int8_t CountAlarmPhone = sizeof(AlarmPhone) / sizeof(AlarmPhone[0]);
/*
EEPROM Data:
№ ячейки - значение;
0 - если записана не 1, то необходимо затереть часть памяти eeprom'a и восстановить стандартную конфигурацию.
10 - sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
11 - AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
12 - LedTestOn = 0;
13 - LedOn = 1;
14 - guard =1; //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
*/
void setup() {
Шта? Уважаемый, ну почитайте уже основы ардуиноведенья! Ардуины самопрограммируются обычно. По UART. Из среды разработки Arduino IDE, которую можно скачать на официальном сайте. Потом еще библиотеки потребуется подключить. Большая часть пятикласников с этим легко справляются. Или Вы хотите шить программатором скомпилированный бинарник?
Хотел использовать как миниUPS. Для этих целей не подошла. После отключения внешнего питания, вполне нормально высаживает аккумулятор, а по достижению предела его отключает. Однако после этого при подаче питания толком работу не возобновляет (на выходе платы питание некоторое время переключается между 2V и 5V), требуется аккумулятор отключить, а затем подключить заново. В целом, плата рабочая.
Это не ИБП, а контроллер - заряда разряда на 2,1А и плата защиты. Да, и на преобразование 3,7В -> 5В потратите 50% ёмксти акума. Да и плата совсем не бюджетная.
Речь не про стоимость, если есть потребность, найдутся и предложения. В который раз убеждаюсь, что почти все можно купить у китайцев готовое, а не изобретать свое.
unsigned long door2 = 3258553; // адрес 433 передатчика геркона двери
меняем на
#define door2 3258553 // адрес 433 передатчика геркона двери
а почему бы вот эти строки:
int p = 0;
int GASThres = 400; // предельная концентрация газа
int interval_alarm = 20; // Секунд до отключения "тревожного" пина.
int previousMillis_alarm = 0;
int interval_led = 1000; // для мигания LED, 1 сек.
int previousMillis_led = 0;
int interval_door = 10; // секунд не смотрим на датчик двери.
int previousMillis_door = 0;
int interval_door2 = 20; // секунд не смотрим на датчик двери 2.
int previousMillis_door2 = 0;
int interval_pir = 20; // секунд не смотрим на датчик движения.
int previousMillis_pir = 0;
int interval_gas = 60; // секунд не смотрим на датчик газа.
int previousMillis_gas = 0;
записать как:
int p = 0;
#define GASThres 400 // предельная концентрация газа
#define interval_alarm 20 // Секунд до отключения "тревожного" пина.
int previousMillis_alarm = 0;
#define interval_led 1000 // для мигания LED, 1 сек.
int previousMillis_led = 0;
#define interval_door 10 // секунд не смотрим на датчик двери.
int previousMillis_door = 0;
#define interval_door2 20 // секунд не смотрим на датчик двери 2.
int previousMillis_door2 = 0;
#define interval_pir 20 // секунд не смотрим на датчик движения. (а этих вообще переменных нету в коде)
int previousMillis_pir = 0;
#define interval_gas 60 // секунд не смотрим на датчик газа. (а этих вообще переменных нету в коде)
int previousMillis_gas = 0;
Еще тогда меньше памяти занимать будет
понимаю конечно 13 байт памяти и 2 байта динамической для переменных это нет ни что, но все же оптимизация екарный бабык)
По этой ссылке внизу написано: Этот модуль не подходит для бесперебойного питания (ИБП), если вам нужно модуля ибп,Нажмите здесь, чтобы купить
Модуль интеренсный, но все эти повышающие модули подходять для чего угодно, кроме питания модемов. Из-за пульсаций повышайки модемы "сходят с ума", и регистрируются в сети оператора через раз, а то и вобще отказываются регистрироваться. Именно по этой причине пришлось отказался от повышайки, плюс кэтому автономность работы устройства выросла с 24 часов до 60.
Речь не про стоимость, если есть потребность, найдутся и предложения. В который раз убеждаюсь, что почти все можно купить у китайцев готовое, а не изобретать свое.
Если речь не о стоимости, тогда зачем изобретать велосипед? Можно пойти и купить готовое охранное устройство.
Давайте без крайностей. И почему нельзя фильтровать пульсации? Ведь импульсные преобразователи (БП) по сути одинаковы, повышайки или понижайки суть одно же. Тем более вч пульсации.
Если речь не о стоимости, тогда зачем изобретать велосипед? Можно пойти и купить готовое охранное устройство.
А Вы не понимаете?
Это же хобби. Я делаю что-то потому, что получаю от этого удовольствие, и плачу именно за это удовольствие, а не за конечное изделие. Его (удовольствие) Вы тоже предлагаете купить готовое?
Вас послушать, так охотники и рыбаки все идиоты, т.к. на базаре можно купить и рыбу и мясо заметно дешевле, чем стоят их "экспедиции".
Если речь не о стоимости, тогда зачем изобретать велосипед? Можно пойти и купить готовое охранное устройство.
PS. Пост 486.
А Вы не понимаете?
Это же хобби. Я делаю что-то потому, что получаю от этого удовольствие, и плачу именно за это удовольствие, а не за конечное изделие. Его (удовольствие) Вы тоже предлагаете купить готовое?
Вас послушать, так охотники и рыбаки все идиоты, т.к. на базаре можно купить и рыбу и мясо заметно дешевле, чем стоят их "экспедиции".
Я всё понимаю, читаю внимательно и последовательно.
Речь не про стоимость, если есть потребность, найдутся и предложения. В который раз убеждаюсь, что почти все можно купить у китайцев готовое, а не изобретать свое.
Все это отлично, но если вы в реальности используете ардуино для охраны помещения, подключаете датчики на проводах. и т.д.
То неизбежны случаи когда проц иногда, но будет "вешаться" в силу причин наличия испульсных помех на входах где висят датчики с проводами. ЭТО БУДЕТ ПРОИСХОДИТЬ.! ЭТО БУДЕТ ОБЯЗАТЕЛЬНО ПРОИСХОДИТЬ! РАНО ИЛИ ПОЗДНО!
Так вот - вопрос всем в лоб: КАК ПРОГРАММНО ЗАПУСТИТЬ ВОЧДОГ? чтобы например проц не работает более 30 сек - и сам рессетится?
Без такой фичи - это бесполезная железка, поверьте мне на слово.
Я лично давно смотрю в сторону собаки, читал статейки как и что работает. Однако попадались мне темы где описывали проблемы с собакой в том что если ставить его на максимум то при сработке он не успевает заново установить новый промежуток и ардуинке встаёт в вечный ребут. Это связано вроди как с прошивкой какой-то, и от версии зависит.
Кто пробовал ставить собаку ?
Как-то давно то же хотел сделать сигналку на на М590 (кстати на том же исходнике, что и третьем посте), но пока модем ехал, начал писать код под сигналку без GSM (в надежде на последующее воссоединение) на ключах (домофонные).
Код рабочий (до воссоединения так дело и не дошло) , может кому пригодится, вообщем делюсь.
#include <EEPROM.h>
#include <OneWire.h>
#define zone1 A0
#define oxr 2
#define Zone1LED 4
#define alarm1LED 5
#define STOP1LED 6
int statusZ;
int timeOUT;
int statusO;
byte alarm;
byte Norma;
byte armed = 0;
const byte saveKey = 3; // вход для кнопки обнуления
const byte statusLed = 13;
OneWire ds(8);
byte addr[8];
byte allKey; // всего ключей
// функция сверяет два адреса (два массива)
boolean addrTest(byte addr1[8], byte addr2[8]){
for(int i = 0; i < 8; i++) {
if (addr1[i] != addr2[i]) return 0;
}
return 1;
}
void error(){
while(1){
digitalWrite(statusLed, !digitalRead(statusLed));
delay(300);
}
}//
boolean keyTest(){ // возвращает 1 если ключ есть в еепром
byte addrTemp[8];
for (int i = 0; i < allKey; i++){
for(int y = 0; y < 8; y++) addrTemp[y] = EEPROM.read((i << 3) + y );
if (addrTest(addrTemp, addr)) return 1;
}
return 0;
}//
void save(){ // сохраняет ключ в еепром
digitalWrite(statusLed, HIGH);
if (allKey >= 63) error(); // если места нет
while (!ds.search(addr)) ds.reset_search(); // ждем ключ
if ( OneWire::crc8( addr, 7) != addr[7]) error();
if (keyTest()) error(); // если нашли ключ в еепром.
for(int i = 0; i < 8; i++) EEPROM.write((allKey << 3) + i, addr[i]);
allKey++; // прибавляем единицу к количеству ключей
EEPROM.write(511, allKey);
digitalWrite(statusLed, LOW);
}//
void button ()
{
armed = !armed;
Serial.print (keyTest());
delay(1000);
}
void setup () {
Serial.begin(9600);
pinMode(zone1, INPUT);
pinMode(oxr, INPUT);
pinMode(Zone1LED, OUTPUT);
pinMode(alarm1LED, OUTPUT);
pinMode(STOP1LED, OUTPUT);
attachInterrupt(0, button, RISING);
pinMode(statusLed, OUTPUT);
pinMode(saveKey, INPUT_PULLUP);
// если при включении нажата кнопка, сбрасываем ключи на 0
if (!digitalRead(saveKey)) EEPROM.write(511, 0);
allKey = EEPROM.read(511); // читаем количество ключей
}
void loop () {
ds.reset_search();
statusZ = analogRead(zone1);
if (keyTest()) button(); // если нашли ключ в еепром, открываем дверь
boolean keyTest(false);
Serial.println("A0 =");Serial.println(statusZ);
if (armed == 0) {
digitalWrite (Zone1LED, LOW);
digitalWrite (alarm1LED, LOW);
digitalWrite (STOP1LED, HIGH);
alarm = 0;
Norma = 0;
timeOUT = 0;
if (statusZ > 200)
{
Serial.println("Kopotkoe zamikanie");
LED2 ();
}
if (statusZ == 0)
{
Serial.println("Obriv");
LED2 ();
}
}
if (Norma == 0)
{
if (statusZ > 150 && statusZ < 200)
{
Norma = 1;
}
else
{
Norma = 0;
}
}
if (armed == 1 && alarm == 0 && Norma == 1)
{
if (statusZ > 150 && statusZ < 200 )
{
Serial.println("Norma");
digitalWrite (Zone1LED, HIGH);
digitalWrite (alarm1LED, LOW);
digitalWrite (STOP1LED, LOW);
}
if (statusZ < 150 || statusZ > 200)
{
if (timeOUT == 300)
{
Serial.println("Alarm");
digitalWrite (Zone1LED, LOW);
digitalWrite (alarm1LED, HIGH);
digitalWrite (STOP1LED, LOW);
alarm = 1;
timeOUT = 0;
}
timeOUT = timeOUT ++;
Serial.print("timeOUT = ");Serial.println(timeOUT);
delay(timeOUT);
}
}
if (armed == 1 && alarm == 0 && Norma == 0)
{
LED ();
Serial.println("Error");
}
//if (!digitalRead(saveKey)) save(); // если нажали кнопку
// сканируем шину, если нет устройств выходим из loop
if (!ds.search(addr));// return;
// if ( OneWire::crc8( addr, 7) != addr[7]); //return;
}
void LED ()
{
digitalWrite (Zone1LED, HIGH);
delay(100);
digitalWrite (alarm1LED, HIGH);
delay(100);
digitalWrite (Zone1LED, LOW);
delay(100);
digitalWrite (alarm1LED, LOW);
delay(100);
}
void LED2 ()
{
digitalWrite (STOP1LED, HIGH);
delay(100);
digitalWrite (alarm1LED, HIGH);
delay(100);
digitalWrite (STOP1LED, LOW);
delay(100);
digitalWrite (alarm1LED, LOW);
delay(100);
}
тем не менее проблемы собак в гсм сигналке - не обсуждались. вообще.
Нет никакой проблемы в собаке - ни вообще, ни в гсм-сигналке в частности. В ардуино Уно,Нано есть штатный вотчдог, код его использования занимает ровно три строки, включая #include для вызова библиотеки. проще некуда:
Нет никакой проблемы в собаке - ни вообще, ни в гсм-сигналке в частности.
как нет? сейчас в 3 сек докажу, что есть:
вы пишите - wdt_enable (WDTO_8S); // start watcdog for 8sec
тоесть каждый, весь цикл в программе должен проходить всегда не медленнее чем 8 сек? а то, что пишут здесь этому отвечает? :) вот поэтому я написал вопрос за 30 сек.. :)
Тут его сложнее нужно прописывать, как - я пока не знаю.
1
что то с кириллицей у вас
#include
#include
SoftwareSerial mySerial(8, 9); //На этих пинах подключен модем RX, TX
#define RLed 10 // Красный светодиод
#define BLed 11 // Синий светодиод
#define GLed 12 // Зеленый светодиод
#define AlarmPin 4 // Выход "тревожного" пина, при срабатывании датчика на этом пине устанавливается сигнал высокого уровня на время указанное в переменной AlarmInterval, по умолчанию 60 секунд.
#define InverseAlarmPin 5 // Инверсный выход "тревожного" пина, при срабатывании датчика на этом пине устанавливается сигнал низкого уровня на время указанное в переменной AlarmInterval, по умолчанию 60 секунд.
#define DoorPin 6 // Номер входа, подключенный к датчику
int8_t DoorState = 0; // Переменная для хранения состояния датчика
int8_t DoorFlag = 1;
int8_t RLedState = LOW;
int8_t GLedState = LOW;
int8_t BLedState = LOW;
unsigned long previousAlarmMillis = 0;
uint16_t AlarmInterval = 60; // Секунд до отключения "тревожного" пина.
unsigned long previousMillis = 0;
uint16_t interval = 100;
uint8_t PauseTime = 15; // Время, указывается в минутах, на которое сигнализация должна засыпать при получении смс команды Pause.
uint8_t ch = 0;
int8_t sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
int8_t AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
int8_t guard = 1; //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
int8_t sendsmscaller; //Переменная для отправки смс о снятии или установки на охрану пользователям которые отсутствуют в массиве AlarmPhone
int8_t LedTestOn = 0;
int8_t LedOn = 1;
String BalanceNumber = "#100#"; //Команда запроса баланса. #100# - ответ латинскими буквами, *100# - ответ русскими буквами. Работает только с латинскими буквами. В данном случае команда запроса баланса Beeline(Россия).
uint8_t BalanceStringLen = 22; //Число символов от начала строки которые нужно переслать в смс сообщении при получении USSD ответа о балансе. Убираем спам от оператора при запросе баланса, особо критично для модема M590, обрезаем всё лишнее.
String val = "";
String RingPhone = "";
String LastEvent = "System -> guard ";
int8_t ModemID = 0;
const char* AllowPhone[] = {"70001234501", "70001234502", "70001234503", "70001234504", "70001234505"}; //Номера которым разрешено управлять охраной. На первый номер будут отправляться смс монитора порта (для отладки)
int8_t CountPhone = sizeof(AllowPhone) / sizeof(AllowPhone[0]);
const char* AlarmPhone[] = {"70001234501", "70001234502"}; //Номера для отправки смс при срабатывании датчиков и о снятии или установки на охрану. На первый номер будет осуществляться вызов если AlarmRing = 1;
int8_t CountAlarmPhone = sizeof(AlarmPhone) / sizeof(AlarmPhone[0]);
/*
EEPROM Data:
№ ячейки - значение;
0 - если записана не 1, то необходимо затереть часть памяти eeprom'a и восстановить стандартную конфигурацию.
10 - sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
11 - AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
12 - LedTestOn = 0;
13 - LedOn = 1;
14 - guard =1; //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
*/
void setup() {
Serial.begin(9600);
//EEPROM.update(0, 255); //reset config;
eepromconfig();
pinMode(RLed, OUTPUT);
pinMode(GLed, OUTPUT);
pinMode(BLed, OUTPUT);
digitalWrite(RLed, HIGH);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, HIGH);
digitalWrite(RLed, LOW);
delay(500);
digitalWrite(RLed, HIGH);
digitalWrite(GLed, LOW);
delay(500);
digitalWrite(GLed, HIGH);
digitalWrite(BLed, LOW);
delay(500);
digitalWrite(BLed, HIGH);
pinMode(DoorPin, INPUT);
pinMode(AlarmPin, OUTPUT);
digitalWrite(AlarmPin, LOW);
pinMode(InverseAlarmPin, OUTPUT);
digitalWrite(InverseAlarmPin, HIGH);
InitModem();
}
void loop() {
if (LedTestOn == 0) digitalWrite(BLed, HIGH);
if (LedTestOn == 1) LedTest();
Led();
AlarmPinOff();
Detect();
if (mySerial.available()) {
while (mySerial.available()) {
ch = mySerial.read();
val += char(ch);
delay(20);
}
if (val.indexOf("+PBREADY") > -1) InitModem();
if (val.indexOf("RING") > -1) {
if (CheckPhone() == 1) {
mySerial.println("ATH0");
sendsmscaller = 1;
MasterRing();
} else {
mySerial.println("ATH0");
}
} else if (val.indexOf("+CMT:") > -1) {
if (CheckPhone() == 1) {
sendsmscaller = 1;
MasterSms();
}
} else if (val.indexOf("+CUSD:") > -1) {
Serial.println(RingPhone);
Serial.println(val);
if (val.indexOf("\"") > -1) {
sms(String(val.substring(String(val.indexOf("\"")).toInt() + 1, String(val.indexOf("\"")).toInt() + BalanceStringLen)), String("+" + RingPhone));
delay(1000);
}
mySerial.println("AT+CUSD=0");
delay(200);
} else
Serial.println(val);
val = "";
}
if (Serial.available()) {
while (Serial.available()) {
ch = Serial.read();
val += char(ch);
delay(20);
}
mySerial.println(val);
ConsolePrint();
val = "";
}
}
void eepromconfig() {
pinMode(13, OUTPUT);
if (EEPROM.read(0) != 1) {
for (int i = 0 ; i < 20 ; i++) {
EEPROM.update(i, 255);
delay(10);
}
EEPROM.update(10, 1); // sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
EEPROM.update(11, 1); // AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
EEPROM.update(12, 0); // LedTestOn = 0;
EEPROM.update(13, 1); // LedOn = 1;
EEPROM.update(14, 1); //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
EEPROM.update(0, 1);
digitalWrite(13, HIGH);
}
if (EEPROM.read(0) == 1) {
sendsms = EEPROM.read(10); // sendsms = 1; //Отправка смс: 1 - включена, 0 - выключена. Глобальный параметр отправки сообщений. Управляется через смс командами SmsOn и SmsOff.
AlarmRing = EEPROM.read(11); // AlarmRing = 1; //Звонок: 1 - включен, 0 - выключен. Звонить на первый номер массива AlarmPhone при срабатывании датчика. Управляется через смс командами RingOn и RingOff.
LedTestOn = EEPROM.read(12); // LedTestOn = 0;
LedOn = EEPROM.read(13); // LedOn = 1;
guard = EEPROM.read(14); //Охрана: 1 - включена, 0 - выключена. Если включена, будут отправляться смс при срабатывании датчиков
if (guard == 1) LastEvent = LastEvent + "on";
if (guard == 0) LastEvent = LastEvent + "off";
}
}
void InitModem() {
delay(2000);
Serial.begin(9600);
mySerial.begin(9600);
mySerial.println("AT");
delay(100);
mySerial.println("ATI");
delay(100);
if (mySerial.find("M590")) ModemID = 1;
mySerial.println("ATI");
delay(100);
if (mySerial.find("SIM800")) ModemID = 2;
delay(100);
mySerial.println("AT+CLIP=1");
delay(100);
mySerial.println("AT+CMGF=1");
delay(100);
mySerial.println("AT+CSCS=\"GSM\"");
delay(100);
mySerial.println("AT+CNMI=2,2");
delay(100);
}
int CheckPhone() {
for (int i = 0; i < CountPhone; i++) {
if (val.indexOf(AllowPhone[i]) > -1) {
RingPhone = AllowPhone[i];
Serial.println("Event: +" + RingPhone);
return 1;
}
}
return 0;
}
void Detect() {
DoorState = digitalRead(DoorPin);
if (DoorState == LOW && DoorFlag == 0) {
DoorFlag = 1;
delay(100);
if (LedOn == 1) digitalWrite(GLed, LOW);
Alarm();
}
if (DoorState == HIGH && DoorFlag == 1) {
DoorFlag = 0;
delay(100);
}
}
void Led() {
if (guard == 1) {
digitalWrite(GLed, HIGH);
digitalWrite(RLed, LOW);
}
if (guard == 0) {
digitalWrite(RLed, HIGH);
if (LedOn == 1) digitalWrite(GLed, LOW);
}
}
void LedTest() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (RLedState == LOW)
RLedState = HIGH;
else
RLedState = LOW;
digitalWrite(BLed, RLedState);
}
}
void AlarmPinOff() {
unsigned long currentAlarmMillis = millis();
if (currentAlarmMillis - previousAlarmMillis > AlarmInterval * 1000) {
digitalWrite(AlarmPin, LOW);
digitalWrite(InverseAlarmPin, HIGH);
}
}
void Alarm() {
if (guard == 1) {
digitalWrite(AlarmPin, HIGH);
digitalWrite(InverseAlarmPin, LOW);
previousAlarmMillis = millis();
for (int i = 0; i < CountAlarmPhone; i++) {
sms(String("Srabotal datchik dveri!"), String("+" + String(AlarmPhone[i])));
delay(1000);
}
if (AlarmRing == 1) {
mySerial.println("ATD+" + String(AlarmPhone[0]) + ";");
delay(1000);
}
}
}
void MasterRing() {
if (guard == 1) GuardOff();
else if (guard == 0) GuardOn();
}
void GuardOff() {
guard = 0;
EEPROM.update(14, guard);
LastEvent = "Guard Off. Phone +" + RingPhone;
Serial.println(LastEvent);
delay(1000);
for (int i = 0; i < CountAlarmPhone; i++) {
if (RingPhone == String(AlarmPhone[i])) sendsmscaller = 0;
delay(1000);
sms(String(LastEvent), String("+" + String(AlarmPhone[i])));
delay(1000);
}
if (sendsmscaller == 1) {
delay(1000);
sms(String("Guard Off"), String("+" + RingPhone));
delay(1000);
}
}
void GuardOn() {
guard = 1;
EEPROM.update(14, guard);
DoorFlag = 1;
LastEvent = "Guard On. Phone +" + RingPhone;
Serial.println(LastEvent);
delay(1000);
for (int i = 0; i < CountAlarmPhone; i++) {
if (RingPhone == String(AlarmPhone[i])) sendsmscaller = 0;
delay(1000);
sms(String(LastEvent), String("+" + String(AlarmPhone[i])));
delay(1000);
}
if (sendsmscaller == 1) {
delay(1000);
sms(String("Guard On"), String("+" + RingPhone));
delay(1000);
}
}
void MasterSms() {
val.toLowerCase();
if ((val.indexOf("resetconfig") > -1)) {
EEPROM.update(0, 255);
eepromconfig();
}
if ((val.indexOf("money") > -1)) {
delay(1000);
balance();
delay(1000);
}
if ((val.indexOf("pause") > -1)) {
delay(1000);
sms(String("Pause " + String(PauseTime) + " min"), String("+" + RingPhone));
digitalWrite(BLed, LOW);
delay(PauseTime * 60000);
digitalWrite(BLed, HIGH);
}
if ((val.indexOf("ringon") > -1)) {
delay(1000);
AlarmRing = 1;
EEPROM.update(11, AlarmRing);
sms(String("RingOn: Alarm Ring is ON"), String("+" + RingPhone));
delay(1000);
}
if ((val.indexOf("ringoff") > -1)) {
delay(1000);
AlarmRing = 0;
EEPROM.update(11, AlarmRing);
sms(String("RingOff: Alarm Ring is OFF"), String("+" + RingPhone));
delay(1000);
}
if ((val.indexOf("smson") > -1)) {
delay(1000);
sendsms = 1;
EEPROM.update(10, sendsms);
sms(String("Sms On"), String("+" + RingPhone));
delay(1000);
}
if ((val.indexOf("smsoff") > -1)) {
delay(1000);
sms(String("Sms Off"), String("+" + RingPhone));
sendsms = 0;
EEPROM.update(10, sendsms);
delay(1000);
}
if ((val.indexOf("guardon") > -1)) {
delay(1000);
GuardOn();
}
if ((val.indexOf("guardoff") > -1)) {
delay(1000);
GuardOff();
}
if ((val.indexOf("info") > -1)) {
delay(1000);
sms(String("Info: " + LastEvent), String("+" + RingPhone));
delay(1000);
}
if ((val.indexOf("clearsms") > -1)) {
clearsms();
delay(2000);
sms(String("Clear: All messages removed"), String("+" + RingPhone));
delay(1000);
}
if ((val.indexOf("teston") > -1)) {
delay(1000);
LedTestOn = 1;
EEPROM.update(12, LedTestOn);
delay(1000);
}
if ((val.indexOf("testoff") > -1)) {
delay(1000);
LedTestOn = 0;
EEPROM.update(12, LedTestOn);
digitalWrite(BLed, HIGH);
delay(1000);
}
if ((val.indexOf("ledoff") > -1)) {
delay(1000);
LedOn = 0;
EEPROM.update(13, LedOn);
digitalWrite(GLed, HIGH);
delay(1000);
}
if ((val.indexOf("ledon") > -1)) {
delay(1000);
LedOn = 1;
EEPROM.update(13, LedOn);
digitalWrite(GLed, LOW);
delay(1000);
}
clearsms();
}
void ConsolePrint() {
val.toLowerCase();
if ((val.indexOf("clearsms") > -1)) {
clearsms();
delay(2000);
}
if ((val.indexOf("resetconfig") > -1)) {
EEPROM.update(0, 255);
eepromconfig();
}
}
void balance() {
mySerial.println("AT+CUSD=1");
delay(200);
mySerial.println("ATD" + BalanceNumber);
delay(200);
}
void clearsms() {
if (ModemID == 1) mySerial.println("AT+CMGD=0,4");
if (ModemID == 2) mySerial.println("AT+CMGD=4");
}
void sms(String text, String phone) {
if (sendsms == 1 ) {
mySerial.println("AT+CMGS=\"" + phone + "\"");
delay(500);
mySerial.print(text);
delay(500);
mySerial.print((char)26);
delay(500);
Serial.println("SMS sended! Phone: " + phone + "; Message: " + text);
delay(5000);
} else {
delay(1000);
Serial.println("Silent mode, SMS not sended! Phone: " + phone + "; Message: " + text);
}
}
что здесь не так немогу запрограмирувать ардуино
#include
#include
Так не должно быть! #include подключает библиотеку.
"что здесь не так немогу запрограмирувать ардуино"
Не так тут всё.....
а что мне далать с кодом редактировать или надо что то удалить от туда ?
Спрячь под спойлер.
а поксажите как спрятать я в етом деле новичок?
Не туда галку ткнул. Ниже надо. Сворачивать код по умолчанию.
а как перенести в програматор ардуино
Шта? Уважаемый, ну почитайте уже основы ардуиноведенья! Ардуины самопрограммируются обычно. По UART. Из среды разработки Arduino IDE, которую можно скачать на официальном сайте. Потом еще библиотеки потребуется подключить. Большая часть пятикласников с этим легко справляются. Или Вы хотите шить программатором скомпилированный бинарник?
а как перенести в програматор ардуино
Вам наверное для диплома надо? :)
спасибо
нет а что такое
нет а что такое
Да так, обознался... :) Оставлю тут, так, просто поржать https://mysku.ru/blog/ebay/43282.html#comment2273204
ну и что с того мне не смешно
ну и что с того мне не смешно
Да, иногда так бывает, кому-то смешно, а кому-то - нет.
ну я выжу ви неочень хотыте помогать ему
Нда, мне нада и ниипет! Армия сука страшная. kvolk, ты случаем не золотая рыбка? Может и мне что-то нада? Да точно нада! :)
Повеселил с утра. И откуда они такие берутся?
Таким никто не любит помогать. Потому что сразу пытаются влезть на шею и ножки свесить.
Вам наверное для диплома надо? :)
да какой диплом, что вы... вы посмотрите, как он пишет. Кто такому даст диплом?
он может хочет научитса а ви тут все прям умникы !
А мы тут универ с преподавателями холявными. Хочет учиться - научится. Он халяву хочет скорее, чтобы не учится, а диплом получить.
Кто там бесперебойник просил? https://ru.aliexpress.com/item/DC-5-2-1A-DIY-4-2/32824032545.html?spm=a2g0v.10010108.1000023.2.4065f35EFTlOP
Кто там бесперебойник просил? https://ru.aliexpress.com/item/DC-5-2-1A-DIY-4-2/32824032545.html?spm=a2g0v.10010108.1000023.2.4065f35EFTlOP
Я просил... Коменты читали?
Хотел использовать как миниUPS. Для этих целей не подошла. После отключения внешнего питания, вполне нормально высаживает аккумулятор, а по достижению предела его отключает. Однако после этого при подаче питания толком работу не возобновляет (на выходе платы питание некоторое время переключается между 2V и 5V), требуется аккумулятор отключить, а затем подключить заново. В целом, плата рабочая.
Это не ИБП, а контроллер - заряда разряда на 2,1А и плата защиты. Да, и на преобразование 3,7В -> 5В потратите 50% ёмксти акума. Да и плата совсем не бюджетная.
Не, чукча не читатель! :)
Может это частный случай? Там ссылка есть на другой лот, который по их мнению именно миниUPS.
И вот еще на гике статья https://geektimes.ru/company/nag/blog/294315/
И вот еще на гике статья https://geektimes.ru/company/nag/blog/294315/
Очень дорого :) Народная плата на TP4056 + транзистор + пару диодов обойдётся в разы дешевле .
Речь не про стоимость, если есть потребность, найдутся и предложения. В который раз убеждаюсь, что почти все можно купить у китайцев готовое, а не изобретать свое.
Кто там бесперебойник просил? https://ru.aliexpress.com/item/DC-5-2-1A-DIY-4-2/32824032545.html?spm=a2g0v.10010108.1000023.2.4065f35EFTlOP
По этой ссылке внизу написано: Этот модуль не подходит для бесперебойного питания (ИБП), если вам нужно модуля ибп, Нажмите здесь, чтобы купить
вот это
меняем на
а почему бы вот эти строки:
записать как:
Еще тогда меньше памяти занимать будет
понимаю конечно 13 байт памяти и 2 байта динамической для переменных это нет ни что, но все же оптимизация екарный бабык)
d13lider, благодарю. Именно так и сделаю. нашел, почему отсутствуют interval_pir и interval_gas. исправил у себя в скетче
Кто там бесперебойник просил? https://ru.aliexpress.com/item/DC-5-2-1A-DIY-4-2/32824032545.html?spm=a2g0v.10010108.1000023.2.4065f35EFTlOP
По этой ссылке внизу написано: Этот модуль не подходит для бесперебойного питания (ИБП), если вам нужно модуля ибп, Нажмите здесь, чтобы купить
Модуль интеренсный, но все эти повышающие модули подходять для чего угодно, кроме питания модемов. Из-за пульсаций повышайки модемы "сходят с ума", и регистрируются в сети оператора через раз, а то и вобще отказываются регистрироваться. Именно по этой причине пришлось отказался от повышайки, плюс кэтому автономность работы устройства выросла с 24 часов до 60.
Речь не про стоимость, если есть потребность, найдутся и предложения. В который раз убеждаюсь, что почти все можно купить у китайцев готовое, а не изобретать свое.
Если речь не о стоимости, тогда зачем изобретать велосипед? Можно пойти и купить готовое охранное устройство.
Давайте без крайностей. И почему нельзя фильтровать пульсации? Ведь импульсные преобразователи (БП) по сути одинаковы, повышайки или понижайки суть одно же. Тем более вч пульсации.
И почему нельзя фильтровать пульсации?
Можно фильтровать. Сначала созавать пульсации, а потом фильтровать. Можно героически преодолевать трудности которые сами себе и создали.
Даже комментировать не хочется. Разве это трудности?!
Если речь не о стоимости, тогда зачем изобретать велосипед? Можно пойти и купить готовое охранное устройство.
А Вы не понимаете?
Это же хобби. Я делаю что-то потому, что получаю от этого удовольствие, и плачу именно за это удовольствие, а не за конечное изделие. Его (удовольствие) Вы тоже предлагаете купить готовое?
Вас послушать, так охотники и рыбаки все идиоты, т.к. на базаре можно купить и рыбу и мясо заметно дешевле, чем стоят их "экспедиции".
Если речь не о стоимости, тогда зачем изобретать велосипед? Можно пойти и купить готовое охранное устройство.
PS. Пост 486.
А Вы не понимаете?
Это же хобби. Я делаю что-то потому, что получаю от этого удовольствие, и плачу именно за это удовольствие, а не за конечное изделие. Его (удовольствие) Вы тоже предлагаете купить готовое?
Вас послушать, так охотники и рыбаки все идиоты, т.к. на базаре можно купить и рыбу и мясо заметно дешевле, чем стоят их "экспедиции".
Я всё понимаю, читаю внимательно и последовательно.
http://arduino.ru/forum/proekty/gsm-signalizatsiya-m590arduino?page=9#co...
Речь не про стоимость, если есть потребность, найдутся и предложения. В который раз убеждаюсь, что почти все можно купить у китайцев готовое, а не изобретать свое.
PS. Пост 481.
Так что там по поводу рыбаков и охотников?
ИТАК - ЛОЖКА ДЕГТЯ В ВАШУ БОЧКУ С МЕДОМ!
Все это отлично, но если вы в реальности используете ардуино для охраны помещения, подключаете датчики на проводах. и т.д.
То неизбежны случаи когда проц иногда, но будет "вешаться" в силу причин наличия испульсных помех на входах где висят датчики с проводами. ЭТО БУДЕТ ПРОИСХОДИТЬ.! ЭТО БУДЕТ ОБЯЗАТЕЛЬНО ПРОИСХОДИТЬ! РАНО ИЛИ ПОЗДНО!
Так вот - вопрос всем в лоб: КАК ПРОГРАММНО ЗАПУСТИТЬ ВОЧДОГ? чтобы например проц не работает более 30 сек - и сам рессетится?
Без такой фичи - это бесполезная железка, поверьте мне на слово.
Я лично давно смотрю в сторону собаки, читал статейки как и что работает. Однако попадались мне темы где описывали проблемы с собакой в том что если ставить его на максимум то при сработке он не успевает заново установить новый промежуток и ардуинке встаёт в вечный ребут. Это связано вроди как с прошивкой какой-то, и от версии зависит.
Кто пробовал ставить собаку ?
Поищите по форуму, тут уже на этом столько собак съели, что бить пальцы ещё раз сил никаких нет.
Поищите по форуму, тут уже на этом столько собак съели, что бить пальцы ещё раз сил никаких нет.
тем не менее проблемы собак в гсм сигналке - не обсуждались. вообще.
и именно проблема секунд на 30 например.
Как-то давно то же хотел сделать сигналку на на М590 (кстати на том же исходнике, что и третьем посте), но пока модем ехал, начал писать код под сигналку без GSM (в надежде на последующее воссоединение) на ключах (домофонные).
Код рабочий (до воссоединения так дело и не дошло) , может кому пригодится, вообщем делюсь.
Схема подключения
https://drive.google.com/file/d/1DpYQdxiG8xGtC35NtK7onOeuB2n-udkzrA/view?usp=sharing - подключение шлейфа.
https://drive.google.com/file/d/1BT8MQj5NYY5-n0--kbRcd-i8Za32rOETuA/view?usp=sharing - считывателя и индикаторов
тем не менее проблемы собак в гсм сигналке - не обсуждались. вообще.
Нет никакой проблемы в собаке - ни вообще, ни в гсм-сигналке в частности. В ардуино Уно,Нано есть штатный вотчдог, код его использования занимает ровно три строки, включая #include для вызова библиотеки. проще некуда:
Единственная тонкость - если у вас Нано, надо сначало перешить загрузчик на оптибут или просто на штатный загрузчик от Уно.
мой рассказ про собаку https://www.youtube.com/watch?v=ZTKsBBE9aGQ
как нет? сейчас в 3 сек докажу, что есть:
вы пишите -
wdt_enable (WDTO_8S);
// start watcdog for 8sec
тоесть каждый, весь цикл в программе должен проходить всегда не медленнее чем 8 сек?
а то, что пишут здесь этому отвечает? :) вот поэтому я написал вопрос за 30 сек.. :)Тут его сложнее нужно прописывать, как - я пока не знаю.