Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

Gость
2019-11-17 00:04:34

http://splash.kiev.ua/birds/
А сервоприводом можно дверку закрывать.

Avazart
2019-11-16 11:54:09

Покажите свой переписанный код.

dmb
2019-11-16 00:35:39
Avazart пише:

delay() в циклах как бы плохая идея лучше читать через Serial.readStringUnti('\n')  а еще наверное лучше сначала попробовать использовать библиотеку для GSM.

Возможно, Вы правы, но как это сделать? Сейчас попробовал удалить из кода проверочное слово "korm" и серва отрабатывает два или три цикла... Как с этим справиться?

dmb
2019-11-12 22:43:23
Avazart пише:

delay() в циклах как бы плохая идея лучше читать через Serial.readStringUnti('\n')  а еще наверное лучше сначала попробовать использовать библиотеку для GSM.

Я в этом не спец - мне главно, чтоб работало) Если работает плохо - я обращаюсь к вам)

Avazart
2019-11-12 22:08:41

delay() в циклах как бы плохая идея лучше читать через Serial.readStringUnti('\n')  а еще наверное лучше сначала попробовать использовать библиотеку для GSM.

dmb
2019-11-12 17:08:58
monser пише:

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

Ок, вот рабочий скетч на ардуино-нано:

#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/ - за что ему выражается искренняя признательность.

Kaka
2019-11-12 15:59:34

Если человеку нужны char *, нафига ему пихать String?

Avazart
2019-11-12 15:46:52
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] );
monser
2019-11-12 14:18:45

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

dmb
2019-11-12 11:50:22
monser пише:

попробуйте параллельно емкости на плате SIM800 прицепить еще порядка 1000мкф.
Как то так:
https://i.ibb.co/FBV0Sk6/20191112-093807.jpg

На самом деле вопрос решился, был он исключительно из за кривого скетча, мне на Амперке человек помог набросать весьма простой скетч, который встал на ардуино нано и серва заработала вполне бодро, подряд отправлял штук 10 смс - и все отработали без сбоя. Сейчас немного поэкспериментирую с "белым списком" (чтоб принимало только от нужного номера или с нужным текстом) - и запускать. Если тему не закроют - сброшу ссылку на трансляцию! А так - всем спасибо!

dmb
2019-11-12 11:43:27
monser пише:
dmb пише:
г0сть пише:

А без Sim800 никак не обойтись? У птиц wi-fi нет?

Надо, чтобы управляли кормушкой массовые пользователи)

Только SMS !!! причем платные!
Птичкам зёрнышко, а в карман копеечка. smile smile smile

таки да! Почему бы и нет?  cool

monser
2019-11-12 02:48:16

попробуйте параллельно емкости на плате SIM800 прицепить еще порядка 1000мкф.
Как то так:
20191112-093807.jpg

monser
2019-11-12 02:29:07
dmb пише:
г0сть пише:

А без Sim800 никак не обойтись? У птиц wi-fi нет?

Надо, чтобы управляли кормушкой массовые пользователи)

Только SMS !!! причем платные!
Птичкам зёрнышко, а в карман копеечка. smile smile smile

dmb
2019-11-11 22:56:46
г0сть пише:

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

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

г0сть
2019-11-11 22:17:48

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

Підвал форуму