Код (C++): #include <arduino-timer.h> #include <SoftwareSerial.h> #include <arduino-timer.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(11, 10);//Возможно надо будет поменять местами char msg; char call; int pinSensor = 4;//Сенсор int pinButton = 3;//Кнопка int LED_R = 8; int LED_Y = 7; int LED_G = 6; auto timer = timer_create_default(); void setup() { mySerial.begin(9600); // Setting the baud rate of GSM Module Serial.begin(9600); // Setting the baud rate of Serial Monitor (Arduino) Serial.println("GSM SIM900A BEGIN"); Serial.println(); delay(100); pinMode(pinSensor, INPUT); pinMode(pinButton, INPUT); pinMode(LED_R, OUTPUT); pinMode(LED_Y, OUTPUT); pinMode(LED_G, OUTPUT); digitalWrite(LED_R, LOW);//Выключаем лампочки digitalWrite(LED_Y, LOW); digitalWrite(LED_G, HIGH);//Поморгаем, чтобы весело было delay(400); digitalWrite(LED_G, LOW); delay(400); digitalWrite(LED_G, HIGH); delay(400); digitalWrite(LED_G, LOW); timer.every(1000 * 60 * 60 * 60 * 24, [](void*) -> void {//Ставим таймер на каждые 24 часа с отправкой смс SendMessage("Its working!"); }); } void loop()//Эта функция выполняется по кругу, пока есть питание, т.е. всегда { timer.tick();//Это нужно, чтобы таймер работал Serial.write(mySerial.read());//Тут выводим ответы модема в нашу консоль checkSensor();//Работаем с сенсором checkButton();//Работаем с кнопкой } void checkSensor() { static unsigned int taskFinished;//Статик значит, что переменная сохранит значение между вызовами функции static bool timerSet = false; if (digitalRead(pinSensor) == HIGH) {//Если сенсор 1 digitalWrite(LED_G, HIGH); digitalWrite(LED_R, LOW); Serial.println("Если сенсор 1"); if (timerSet) {//Убиваем таймер, если он был установлен timer.cancel(taskFinished); } return; } else {//Если сенсор 0 timerSet = true; Serial.println("Сбрасывам таймер"); timer.in(1000 * 60 * 2, [](void*) -> void {//ставим таймер на 2 минуты if (digitalRead(pinSensor) == HIGH) {//сенсор все еще 1 digitalWrite(LED_G, HIGH); digitalWrite(LED_R, LOW); SendMessage("finished!");//отпраляем смс } Serial.println("Отправляем смс ФИНИШ"); timerSet = false; }); } } void checkButton() { static int clickCount = 0; static bool buttonReleased = true; static int ledStatus; static bool sequenceStarted = false; static unsigned int taskLed; if (digitalRead(pinButton) == HIGH) { if (!sequenceStarted) { sequenceStarted = true; ledStatus = LOW; taskLed = timer.every(300, [](void*) -> void { if (ledStatus == LOW) ledStatus = HIGH; else ledStatus = LOW; digitalWrite(LED_Y, ledStatus); }); timer.in(1000 * 60 * 60 * 2, [](void*) -> void { timer.cancel(taskLed); sequenceStarted = false; clickCount = 0; ledStatus = LOW; digitalWrite(LED_Y, ledStatus); }); Serial.println("Горитть желтый светодиод и таймер 2 часа"); } else { if (buttonReleased) { clickCount++; } } buttonReleased = false; } else { buttonReleased = true; } if (sequenceStarted && clickCount == 2) { timer.cancel(taskLed); Serial.println("Остановить таймер на желтый светодиод"); sequenceStarted = false; clickCount = 0; ledStatus = LOW; Serial.println("Сбросить кол-во нажатий"); digitalWrite(LED_Y, ledStatus); SendMessage("needed!"); Serial.println("Отпавить смс НУЖНА"); } } void SendMessage(char * text) { mySerial.println("AT+CMGF=1"); //Sets the GSM Module in Text Mode delay(1000); // Delay of 1000 milli seconds or 1 second mySerial.println("AT+CMGS=\"+70000000000\"\r"); // Replace x with mobile number delay(1000); mySerial.println(text);// The SMS text you want to send delay(100); mySerial.println((char)26);// ASCII code of CTRL+Z delay(1000); } Не сильно прокачен в написании кода... но в нужна прога... Лёгонькая.,. кто шарит ... тому думаю не составит труда найти ошибки... Суть состоит ПОХОЖА на охранную сигнализацию: Имеем 3 светодиода: Желтый, зеленый и красный Сенсор (датчик холла) Кнопка Модуль связи SIM900A (сеть подцепляется... модуль работает штатно) В программе всего 3 действия... Действие раз в сутки Раз в 24 часа отправляется смс "Я работаю"... Чтоб отследить работоспособность и состояние системы. Действие по сенсору Пока сенсор (Датчик холла) замкнут горит зеленый светодиод... Если датчик размыкается включается таймер и через 2 минуты он по прежнему разомкнут то отправляется СМС на номер ("Закончилась") Действие по кнопки При нажатии на кнопку начинает мигать желтый светодиод и если нажать еще 2 раза то отправляется СМС "Нужна" Программу и алгоритм приложил... ПОМОГИТЕ ПЛИЗ....
код написан человеком, похоже впервые взявшим ардуину в руки... Этот код не должен даже компилироваться. Число открывающих скобок не равно закрывающим, оператор return между if и else, таймер на совершенно дикое значение... это не считая таких мелочей, как дублированные инклюды в начале теста... Короче. выкиньте этот код в помойку и поищите другой. в инете много проектов самодельных сигнализаций.
Не а что пусть тренируется. По два раза ненужные библиотеки-это опечатка? У Пушного Звера есть и примеры и готовый код готового устройства. Но ничего плохого в том чтоб сделать самому
конечно пусть. если это его код... только мне показалось. что он его в инете нашел. Если так - лучше пусть поищет другой. более грамотный.