-
Помощь в программировании Arduino+GSM
Учусь посылать и принимать смс (читать содержимое), звонить с GSM модуля на базе Siemens TC35.
Через терминал команды на отправку смс, на звонок - все ок.
Начинаю с самой ардуины звонить - молчит сволочь(((
Команда на звонок:
atd"+79121234565"; <ENTER>
Код:
#include <NewSoftSerial.h>
NewSoftSerial gsm(2,3);
void setup()
{
//Serial.begin(9600);
gsm.begin(9600);
}
void loop()
{
gsm.print("atd");
gsm.print(34,BYTE); // символ "
gsm.print(43,BYTE); // символ +
gsm.print("79121234565");
gsm.print(34,BYTE); // символ "
gsm.print(59,BYTE); // символ ;
gsm.print(13,BYTE); // символ <cr>
delay(10000);
}
А вообще хотелось бы выводить все это на строковый индикатор (16 символов 2 строки) и параллелить в терминал.
Т.е. допустим, то что ввожу в терминале отображается в 1ой строке индикатора, а то, что приходит от gsm модуля - в нижней строке.
-
Re: Помощь в программировании
Дело то в том, что если посылать команды с самой ардуины, не видно ошибок GSM шилда, никак не отладить и не понять из-за чего скетч не работает :(
-
Re: Помощь в программировании
А что мешает читать ответ от модема?
-
Re: Помощь в программировании
Терминалом? Вот как ето сделать.... на таком простом месте не могу придумать(((
-
Re: Помощь в программировании
-
Re: Помощь в программировании
Принцип хотябы, как все должно произойти ?:)
-
Re: Помощь в программировании
Какая конструкция должна быть? открыть серийный порт или чтением\записью цифровых ног?
-
Re: Помощь в программировании
Этот пример может помочь.
-
Re: Помощь в программировании
-
Re: Помощь в программировании
Там по крайней мере есть как прочитать с использованием библиотеки NewSoftSerial.h. Ты же вроде это спрашивал?
-
Re: Помощь в программировании
неа, не работает это((( помима этого я перебрал скетчей 20 для отправки смс или звонка, результат - 0 (((((
-
Re: Помощь в программировании
Может в твоем скетче этого не хватает gsm.print(10,BYTE); перед задержкой?
-
Re: Помощь в программировании
Про newsoftserial....
PHP код:
#include <NewSoftSerial.h> //Include the NewSoftSerial library to send serial commands to the cellular module.
#include <string.h> //Used for string manipulations
char incoming_char=0; //Will hold the incoming character from the Serial Port.
NewSoftSerial cell(2,3); //Create a 'fake' serial port. Pin 2 is the Rx pin, pin 3 is the Tx pin.
void setup()
{
//Initialize serial ports for communication.
Serial.begin(9600);
cell.begin(9600);
//Let's get started!
Serial.println("Starting SM5100B Communication...");
}
void loop() {
//If a character comes in from the cellular module...
if(cell.available() >0)
{
incoming_char=cell.read(); //Get the character from the cellular serial port.
Serial.print(incoming_char); //Print the incoming character to the terminal.
}
//If a character is coming from the terminal to the Arduino...
if(Serial.available() >0)
{
incoming_char=Serial.read(); //Get the character coming from the terminal
cell.print(incoming_char); //Send the character to the cellular module.
}
}
Вот такое не работает,
если взять скетч Chipa,
PHP код:
uint8_t ETX_Pin=3;
uint8_t ERX_Pin=2;
void setup()
{
pinMode(0, INPUT);
pinMode(1, OUTPUT);
pinMode(ETX_Pin, INPUT);
pinMode(ERX_Pin, OUTPUT);
}
void loop()
{
int pc2vrbot = digitalRead(0);
digitalWrite(ERX_Pin, pc2vrbot);
int vrbot2pc = digitalRead(ETX_Pin);
digitalWrite(1, vrbot2pc);
}
через терминал все ок, пробовал скетч написать, который бы слал в шилд данные, а ответы в серийный порт - там белеберда отображается.. то квадраты, то еще чего
Вообще, простейший скетч - отображение символов вводимых склавиатуры(ардуина засылает обратно символ или цифру, которую ввели с клавы) - работает прекрасно, когда пытаюсь параллелить на строковый монитор - на мониторе единицы(1), в терминал-ахинея(((
С++ последний раз трогал 5 лет назад, после этого только на php писал.
Общение с железом требует выдержки и терпения((((
-
Re: Помощь в программировании
Хммм, может кто в двух словах рассказать в каком виде данные передаются и принимаются между железяками??
Ну не знаю, из символа преобразуется в его код, и так далее....
Я к тому, что вот на такое ардуина матерится:
PHP код:
digitalWrite(RX, "AT");
а вот на такое нет:
PHP код:
digitalWrite(RX, 'AT');
если таким способом передали "строку", то надо нажать ЕНТЕР, чтобы шилд ее начал обрабатывать. Наверное единственный способ -
PHP код:
digitalWrite(RX, 13);
на что шилд молчит....
Как вообще засылать туда и символы, и коды клавиш, а также принимать обратно и смотреть в нормальном виде?:)
-
Re: Помощь в программировании
В сообщении за N13 первый скетч должен работать при правильном подключении устройств - адруина принимает данные из терминала и отправляет их в newserialport, а так же принимает данные от newserialport и отправляет в терминал
Но судя по второму скетчу твоя ошибка в том, что ERX_Pin у тебя output, хотя должен быть input, потому как это приём данных от другого устройства. Аналогично ETX_Pin. Исходя из этой ошибки советую почитать теорию
И схему подключения к адруино покажи
-
Re: Помощь в программировании
Т. е. Для прямого взаимодействия Rx адруины нужно настроить как вход и подключить к Tx железяки, Tx адруины -выход - Rx железяки
Для первого скетча из сообщения 13
Rx_adruino --- Tx_PC
Tx_adruino --- Rx_PC
Newserial_pin2 (Rx, input) --- Tx_gsm
Newserial_pin3 (Tx, output) --- Rx_gsm
Вроде так
Скачай LGComSpy - бесплатный монитор COM-порта, т. е. порт открываешь терминалом, а в ней тоже смотришь, чтотпришло, только там есть различные виды отображения - ASCII, hex и т.д. Но работает она только с COM1, поэтому если у тебя он не 1, нужно его переименовать
-
Re: Помощь в программировании
Цитата:
Сообщение от
alekseykok
Хммм, может кто в двух словах рассказать в каком виде данные передаются и принимаются между железяками??
Ну не знаю, из символа преобразуется в его код, и так далее....
Я к тому, что вот на такое ардуина матерится:
PHP код:
digitalWrite(RX, "AT");
а вот на такое нет:
PHP код:
digitalWrite(RX, 'AT');
если таким способом передали "строку", то надо нажать ЕНТЕР, чтобы шилд ее начал обрабатывать. Наверное единственный способ -
PHP код:
digitalWrite(RX, 13);
на что шилд молчит....
Как вообще засылать туда и символы, и коды клавиш, а также принимать обратно и смотреть в нормальном виде?:)
Ты бы хоть букварь почитал что-ли?
Здесь можно почитать в чем разница между Write и Print применительно к Serial. Подозреваю что для NewSoftSerial аналогично :)
Попробуй так:
PHP код:
#include <NewSoftSerial.h>
NewSoftSerial gsm(2,3);
void setup()
{
gsm.begin(9600);
gsm.print('atd');
gsm.print(34,BYTE); // символ "
gsm.print('+79121234565');
gsm.print(34,BYTE); // символ "
gsm.println(';');
}
void loop()
{
}
-
Re: Помощь в программировании
не работает:(:mad::confused:
-
Re: Помощь в программировании
-
Re: Помощь в программировании
Такой вопрос: пробую скетч Fade из экзамплов... Там одна функция analogWrite(...) Не даёт на 9 ноге 168й ардуины плвное изменение яркости светодиода. При значениях 0-127 светит "на полную", при 128-255 полностью потушен. Что за проблем?
-
Re: Помощь в программировании
Резистор ставил, какой номинал?
-
Re: Помощь в программировании
Вопрос остался открытым, нифига не работает.... Нуль модемный кабель - это перевернутые RX и TX - меня программно, нифига не работает(((
-
Re: Помощь в программировании
Программный Serial работает на скорости 4800-9600 , у тебя модем на какой скорости конектится по умолчанию?
-
Re: Помощь в программировании
9600, термиал putty коннектился, все нормально работает по схеме комп-ардуино-модем.... команды выполняет, звонит куда надо и т.д., а вот напрямую с ардуины не хочет(((
-
Re: Помощь в программировании
Смотрел осцилографом TX и RX
Зашил в ардуино скетч, который раз в 3 секунды отправляет команду AT
Осцилографом видно что ардуина работает, а от модема нету ответа... Пробовал менять местами TX и RX - тоже не помогает
-
Re: Помощь в программировании
после AT нужно оправить "возврат каретки" и "перевод строки" - т.е. CR и LF
-
Re: Помощь в программировании
Хмммм, на форумах везде пишут gsm.println("AT"); - т.е. уже с переходом строки
-
Re: Помощь в программировании
Вот что еще.... у меня Графический тач - дисплей еще есть.... на него тоже не выводится инфа
Вывожу след образом
if(gsm.available())
{
myGLCD.setColor(255, 255, 255);
myGLCD.printNumI(gsm.read(), CENTER , 10);
}
-
Re: Помощь в программировании
А просто gsm.print отправляет что нибудь в порт?
Просто мне кажется, что это относится к средству отправки, а не к содержанию. И потом много где пишут не использовать стандартный IDE, потому что он как раз не отправляет cr lf
-
Re: Помощь в программировании
Кодировки еще могут отличатся
-
Re: Помощь в программировании
Ну чтож, пришлось отцепить одно устройство и подключить GSM на Serial1 - и тогда все заработало.... и выводит на граф. экран буфер модема, то бывает с "неполными квадратами"....
Щас надо учиться читать смс и отправлять....
-
Re: Помощь в программировании
PHP код:
Serial1.print("atd");
Serial1.print(34,BYTE); // символ "
Serial1.print(43,BYTE); // символ +
Serial1.print("79126160385");
Serial1.print(34,BYTE); // символ "
Serial1.println(59,BYTE); // символ ;
как выводил на экран:
PHP код:
if(Serial1.available())
{
gsmbuf[g]=Serial1.read();
gsmbuf[g+1]='\0';
myGLCD.setBackColor(0, 0, 0);
myGLCD.setColor(255, 255, 255);
myGLCD.setFont(SmallFont);
myGLCD.print(gsmbuf, LEFT , str);
g++;
if(g>=35)
{
gsmbuf[0]='\0';
g=0;
myGLCD.setColor(0, 0, 0);
myGLCD.fillRect(0, 0, 310, 30);
}
}
else
{
myGLCD.setBackColor(0, 0, 0);
myGLCD.setColor(255, 255, 255);
myGLCD.print("no signal", CENTER , 50);
}
}