програма для m590e
- Войдите на сайт для отправки комментариев
Пнд, 26/11/2018 - 12:56
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); unsigned long box0 = 380676630339; unsigned long box1 = 0; byte led = 4; String inString = ""; void setup() { delay(2000); // while (!Serial) { // ; // wait for serial port to connect. Needed for native USB port only //} pinMode(digitalRead(9), INPUT); pinMode(led, OUTPUT); digitalWrite(led, LOW); Serial.begin(9600); mySerial.begin(9600); mySerial.println("AT+CLIP=1"); //включить АОН delay(100); mySerial.println("AT+CMGF=1"); // текстовый формат SMS delay(300); mySerial.println("AT+CSCS=\"GSM\""); // кодировка текста - GSM delay(300); mySerial.println("AT+CNMI=2,2,0,0,0"); // вывод смс в консоль delay(300); // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК } void loop() { //if (digitalRead(9) == 1) { while (Serial.available() > 0) { int inChar = Serial.read(); if (isDigit(inChar)) { // convert the incoming byte to a char and add it to the string: inString += (char)inChar; } // if you get a newline, print the string, then the string's value: if (inChar == '\n') { Serial.println(inString.toInt()); Serial.println(inString); box1 = "+380" +inString.toInt(); inString = ""; Serial.println("box1" + box1); } } //} if(mySerial.available()) //если модуль что-то послал { char ch = ' '; String val = ""; while(mySerial.available()) { ch = mySerial.read(); val += char(ch); //собираем принятые символы в строку delay(3); } Serial.print("Neo send> "); Serial.println(val); if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер { if(val.indexOf(box0) > -1) // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль { Serial.println("Call my phone"); mySerial.println("ATH"); //разрываем связь Serial.println("Disconnection"); Serial.println("On D13"); digitalWrite(led, HIGH); //включаем светодиод на 5 сек Serial.println("5 sec pause"); delay(5000); digitalWrite(led, LOW); //выключаем Serial.println("Off D13"); } } } if (mySerial.available()) //если модуль что-то послал { char ch = ' '; String val = ""; while(mySerial.available()) { ch = mySerial.read(); val += char(ch); //собираем принятые символы в строку delay(3); } Serial.print("Neo send> "); Serial.println(val); if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер { if(val.indexOf(box1) > -1) // НОМЕР, с которого будем звонить на модуль { Serial.println("Call my phone"); mySerial.println("ATH"); //разрываем связь Serial.println("Disconnection"); Serial.println("On D13"); digitalWrite(led, HIGH); //включаем светодиод на 5 сек Serial.println("5 sec pause"); delay(5000); digitalWrite(led, LOW); //выключаем Serial.println("Off D13"); } } } }
Програма не работает. Взял пример Sring_to_int. И приделал к остольной програме. я не понимаю почему не работает.
А что именно не работает?
Модем на команду хоть отвечает?
54-84 и 90-120 это одно и то же, зачем дублировать?
14 строка для чего?
71-? номер нужен в текстовом (String) формате.
Каша какая то..
я хочу чтобы я мог добавлять номера в переменние box1 и box2. проблема в том что у меня прога не работает. дублировать надо для того, чтобы я мог звонить с двух номеров. не работает добавление номеров.
Есть сомнение, что она заработает с таким подходом.
Что значит с двух номеров?
Первый цикл из буфера все заберет, и там ничго для второго не останется. Или наоборот. Как вы будете попадать в такт?
я хочу чтоби если я набрал с определенного номера, то открились двери. но если я хочу чтоби набрал друг, я надсилаю команду которая добавляет номер друга.
програма должна работать
? логично..
програма должна работать
это все здорово, но вы-то сами что для этого делаете? Кроме вас заставить программу работать некому.
вам указали на ошибки - а вы, вместо того чтоб исправлять - права качаете.
ок. спасибо
http://arduino.ru/forum/programmirovanie/kak-ochistit-serial-vkhodyashch...
Я примерно понимаю про что тут идется. Но как очистить буфер я не понимаю. И когда надо очищать его. Я только начинаю. Поетому мои знания ето изучение чужих програм.
А зачем чистить буфер uart?
Масса примеров приёма данных от модема - отправили команду модему - ждёте входящую строку нужную. Отправили следующую - опять ждёте ответ и т д. Но в глобальном смысле это тупик - ответ может превышать всю память МК - соответственно принять его не сможете. Начните с простейших примеров.
Update : в вашем понимании конечно после отправки новой ат команды модему так называемый буфер необходимо очищать.
тоисть? я не понимаю что надо делать. Очищать буфер или делать паузи. Если делать паузи то какие и зачем?
В теории превышать может память МК, но на деле не больше размера буфера, дальше выбрасывает. Это я так не мог понять почему смс не более 15 символов
тоисть? я не понимаю что надо делать. Очищать буфер или делать паузи. Если делать паузи то какие и зачем?
Зачем его чистить? Все что от туда прочитывается, от туда и стирается.
Паузы для ответа. В идеале их анализировать надо, ответил что модуль и что..
Но судя по вопросам, вам надо с попроще примеров начать.
Проверять буфер нужно не реже 20-40 мсек и читать нужно быстро. При скорости 9600 бод буфер в 64 байта заполнится примерно за 64 мс.
Ответ от М590 содержит еще символы \r и \n
Чтоб прочитать буфер и посмотреть содержимое вызывайте функцию readSoftSerial(); в сетап() и в луп() с интервалом не более 20-40 мс.
А как мне ето добавить к основному коду?
Мне кажется вы взялись за непосильную для себя задачу, поищите в интернете готовый вариант - проще будет.
А как мне ето добавить к основному коду?
Пример
А как мне ето добавить к основному коду?
ну-у-у батенька... с такими вопросами вам в детский сад надо
програма должна работать
Кому должна?
Если должна и не работает, попробуй через суд заставить.