Ви не увійшли.
http://splash.kiev.ua/birds/
А сервоприводом можно дверку закрывать.
Покажите свой переписанный код.
delay() в циклах как бы плохая идея лучше читать через Serial.readStringUnti('\n') а еще наверное лучше сначала попробовать использовать библиотеку для GSM.
Возможно, Вы правы, но как это сделать? Сейчас попробовал удалить из кода проверочное слово "korm" и серва отрабатывает два или три цикла... Как с этим справиться?
delay() в циклах как бы плохая идея лучше читать через Serial.readStringUnti('\n') а еще наверное лучше сначала попробовать использовать библиотеку для GSM.
Я в этом не спец - мне главно, чтоб работало) Если работает плохо - я обращаюсь к вам)
delay() в циклах как бы плохая идея лучше читать через Serial.readStringUnti('\n') а еще наверное лучше сначала попробовать использовать библиотеку для GSM.
Можно и сюда скетч закинуть. Мало ли кому пригодится.
Ок, вот рабочий скетч на ардуино-нано:
#include <SoftwareSerial.h>
#include <Servo.h> // подключаем библиотеку для работы с сервоприводом
Servo servo1; // объявляем переменную servo типа "servo1"
SoftwareSerial mySerial(5, 3); // Выводы SIM800L Tx & Rx подключены к выводам 5 и 3
char incomingByte;
String inputString;
void setup()
{
mySerial.begin(9600);
servo1.attach(8); // привязываем сервопривод к цтфровому выходу 8
servo1.write(0); // начальное положение сервы 0
while(!mySerial.available()){ // Зацикливаем и ждем инициализацию SIM800L
mySerial.println("AT"); // Отправка команды AT
delay(1000); // Пауза
Serial.println("Connecting…"); // Печатаем текст
}
Serial.println("Connected!"); // Печатаем текст
mySerial.println("AT+CMGF=1"); // Отправка команды AT+CMGF=1
delay(1000); // Пауза
mySerial.println("AT+CNMI=1,2,0,0,0"); // Отправка команды AT+CNMI=1,2,0,0,0
delay(1000); // Пауза
mySerial.println("AT+CMGL=\"REC UNREAD\"");
}
void loop()
{
if(mySerial.available()){ // Проверяем, если есть доступные данные
delay(100); // Пауза
while(mySerial.available()){ // Проверяем, есть ли еще данные.
incomingByte = mySerial.read(); // Считываем байт и записываем в переменную incomingByte
inputString += incomingByte; // Записываем считанный байт в массив inputString
}
delay(10); // Пауза
Serial.println(inputString); // Отправка в "Мониторинг порта" считанные данные
if (inputString.indexOf("korm") > -1){ // Проверяем полученные данные, если korm - включаем серву
servo1.write(145); // ставим угол поворота под 145
delay(2000); // ждем 2 секунды
servo1.write(0); // ставим угол поворота под 00
delay(2000); // ждем 2 секунды
}
delay(50);
if (inputString.indexOf("OK") == -1){
mySerial.println("AT+CMGDA=\"DEL ALL\""); // стираем смс-ку
delay(1000);}
inputString = "";}
}
Изначальный скетч был взят здесь: https://robotchip.ru/upravlenie-nagruzkoy-cherez-sms-gsm-i-arduino/ , после чего был любезно доработан для моих целей человеком, с ником Airbus на форуме http://forum.amperka.ru/ - за что ему выражается искренняя признательность.
Если человеку нужны char *, нафига ему пихать String?
char *checkPhone = {
(char *)"79", // Phone number to check
};
char *checkSms[] = {
(char *)"CMT:", // Sms string
};
char *initSim[] = {
(char *)"AT", // Ping module
};
char *initTextMode[] = {
(char *)"AT+CMGF=1\r\n", // Mobile network status
};
Что это за шняга? Почитайте про массивы и строки.
enum Cmd{ phone,sms, initSim, cmdCount };
const String cmds[cmdCount]=
{
"79",
"CMT:",
"AT"
};
// Использование:
Serial.println( cmds[sms] );
Можно и сюда скетч закинуть. Мало ли кому пригодится.
попробуйте параллельно емкости на плате SIM800 прицепить еще порядка 1000мкф.
Как то так:
https://i.ibb.co/FBV0Sk6/20191112-093807.jpg
На самом деле вопрос решился, был он исключительно из за кривого скетча, мне на Амперке человек помог набросать весьма простой скетч, который встал на ардуино нано и серва заработала вполне бодро, подряд отправлял штук 10 смс - и все отработали без сбоя. Сейчас немного поэкспериментирую с "белым списком" (чтоб принимало только от нужного номера или с нужным текстом) - и запускать. Если тему не закроют - сброшу ссылку на трансляцию! А так - всем спасибо!
dmb пише:г0сть пише:А без Sim800 никак не обойтись? У птиц wi-fi нет?
Надо, чтобы управляли кормушкой массовые пользователи)
Только SMS !!! причем платные!
Птичкам зёрнышко, а в карман копеечка.
таки да! Почему бы и нет?
попробуйте параллельно емкости на плате SIM800 прицепить еще порядка 1000мкф.
Как то так:
г0сть пише:А без Sim800 никак не обойтись? У птиц wi-fi нет?
Надо, чтобы управляли кормушкой массовые пользователи)
Только SMS !!! причем платные!
Птичкам зёрнышко, а в карман копеечка.
В дополнение к тому что вам уже на двух форумах сказали о кривизне кода - серва довольно таки мощная, а у еспэшки уровень выхода всего 3.3 В. Вполне возможно что серве этого не хватает и при срабатывании она просто вешает контроллер. Попробуйте вместо сервопривода подключить, например, светодиод и понаблюдайте за работой устройства
Именно кривизна кода и послужила причиной обращения на форумы. По поводу сервы - она питается отдельным адаптером, от контроллера идет только логика.. Но, возможно Вы правы - посмотрю на это.
В дополнение к тому что вам уже на двух форумах сказали о кривизне кода - серва довольно таки мощная, а у еспэшки уровень выхода всего 3.3 В. Вполне возможно что серве этого не хватает и при срабатывании она просто вешает контроллер. Попробуйте вместо сервопривода подключить, например, светодиод и понаблюдайте за работой устройства