програма для 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 мс.
String currStr = ""; //======================== void readSoftSerial(){ while(gprsSerial.available()) { while(gprsSerial.available()) { currStr += (char) gprsSerial.read();//считываем из буфера уже пришедшее } delay(2); //подождем, не придет ли очередной символ } c = Serial.println(currStr); //длина строки Serial.print("c=");Serial.println(c); c = 0; Serial.println(); } далее разбираем строку или/и очищаем после currStr = "\0";А как мне ето добавить к основному коду?
Мне кажется вы взялись за непосильную для себя задачу, поищите в интернете готовый вариант - проще будет.
А как мне ето добавить к основному коду?
Пример
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); #define TELEFON_1 "380676630339" unsigned long box1 = 0; byte led = 4; byte flagRing = 0; String inString = ""; //======================== void readSoftSerial(){ byte c = 0; while(mySerial.available()) { while(mySerial.available()) { inString += (char) mySerial.read();//считываем из буфера уже пришедшее } delay(2); //подождем, не придет ли очередной символ } c = Serial.println(inString); //длина строки Serial.print("c=");Serial.println(c);//выводит длину строки Serial.println();//пустая строка } //======================= void setup() { delay(2000); pinMode(digitalRead(9), INPUT); pinMode(led, OUTPUT); digitalWrite(led, LOW); Serial.begin(9600); mySerial.begin(9600); mySerial.println("AT+CLIP=1"); //включить АОН delay(100); if(mySerial.available()){ readSoftSerial(); inString = "\0"; } mySerial.println("AT+CMGF=1"); // текстовый формат SMS delay(300); if(mySerial.available()){ readSoftSerial(); inString = "\0"; } mySerial.println("AT+CSCS=\"GSM\""); // кодировка текста - GSM delay(300); mySerial.println("AT+CNMI=2,2,0,0,0"); // вывод смс в консоль delay(300); if(mySerial.available()){ readSoftSerial(); inString = "\0"; } // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК } void loop() { if(mySerial.available()){ //если модуль что-то послал readSoftSerial(); if(inString.indexOf("RING") > -1){ //если есть входящий вызов, то проверяем номер if(inString.indexOf(TELEFON_1) > -1){ //если номер звонящего if(flagRing == 0){//пропускаем первый гудок flagRing = 1; Serial.println("RING_1"); }else{//второй гудок flagRing = 0; Serial.println("RING_2"); mySerial.println("ATH"); //разрываем связь //разбираем строку и что-то делаем } } } inString = "\0"; } }А как мне ето добавить к основному коду?
ну-у-у батенька... с такими вопросами вам в детский сад надо
програма должна работать
Кому должна?
Если должна и не работает, попробуй через суд заставить.