-
Re: Управление внешними устройствами с Arduino при помощи СМС
metaforos
Скетч проверил ...светодиод не включается отправлял 12345
пробовал "AT+CPMS =SM" и SM MT ME (у меня три память нашлось)
вместо "N" энок подставлял 0 7 9 1 9 7 6 1 в терминале (07919761989901F0240B919761464339F2000021308232539 1611B32994C2693C96432994C2693C96432994C2693C964329 90C)
пока научился только в путти вот чему
AT+CPMS=?
+CPMS: ("MT","SM","ME"),("MT","SM","ME"),("MT","SM","M E")
OK
AT+CMGL="ALL" (как то было что вывел все сообщения)
ERROR
AT+CPMS =ME
+CPMS: 4,25,0,20,0,20
OK
AT+CMGL="ALL"
ERROR
AT+CMGR=1 (чтение)
+CMGR: 1,,22
07919761989901F0240B919761464339F20000213062815431 610380700C
OK
AT+CMGD=1 (эта команда стирает )
OK
AT+CMGR=1
ERROR
ДА! ИНОГДА ТОЛЬКО СО ВТОРОГО РАЗА КОМАНДУ ПОНИМАЕТ...потому закономерности трудно понять ...я туплю и команды то работают то нет быррррр.
А разве AT+CMGL=0 это стирает СМС ...вроде нет, у меня не стирает точно
AT+CNMI=1,1\r (??? Что сиё делает???)
ERROR
AT+CMGL=4\r (??? Что сиё делает???)
ERROR
На freeduino rx-0 tx-1 на самой плате написано
но скетч
//http://www.compcar.ru
void setup()
{
pinMode(0, INPUT); //RX
pinMode(1, INPUT);//TX
}
void loop()
{
}
не работает с терминалами у меня
@@@@@@@
А не пробовали вот с помощью это оператора ""String"" вытаскивать нужные символы...мне в подобном случае помогли этим оператором...???
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Цитата:
Сообщение от
igvv
Скетч проверил ...светодиод не включается
У меня работает. "AT+CPMS =МТ" Попробуй предварительно стереть все СМС.
Цитата:
Сообщение от
igvv
А разве AT+CMGL=0 это стирает СМС ...вроде нет, у меня не стирает точно
Не стирает. Эта команда читает СМС
Цитата:
Сообщение от
igvv
AT+CNMI=1,1\r (??? Что сиё делает???)
Формат отображения (чтения) СМС. В терминале, будет ERROR, т.к. "/r" - это только для скетчей ("/r" говорит, что нужно перейти на следующую строку)
Цитата:
Сообщение от
igvv
AT+CMGL=4\r (??? Что сиё делает???)
Чтение СМС. В терминале, будет ERROR, т.к. "/r" - это только для скетчей ("/r" говорит, что нужно перейти на следующую строку)
Цитата:
Сообщение от
igvv
скетч
PHP код:
//http://www.compcar.ru
void setup()
{
pinMode(0, INPUT); //RX
pinMode(1, INPUT);//TX
}
void loop()
{
}
не работает с терминалами у меня
Должен работать. Это для использования Ардуины в качестве моста.
Цитата:
Сообщение от
igvv
А не пробовали вот с помощью это оператора ""String"" вытаскивать нужные символы...мне в подобном случае помогли этим оператором...???
Пробовал - http://www.compcar.ru/forum/showpost...&postcount=262
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Пробовал в терминале все возможные варианты AT+CMGL только один раз вылезли все сообщения ...больше никогда ничего не выводилось.
Читал что в 45серии из за того что автоматом смс пишутся на телефон а не в симку...есть проблемы с выуживанием смс притом что даже если принудить тел класть смс на симку.
Ок сотру все смс и проверю по новой!
-
Re: Управление внешними устройствами с Arduino при помощи СМС
У меня, в S55 тоже в памяти телефона сохраняются, поэтому я и использую "МТ", а памятей у меня столько, сколько и у тебя. АТ+CMGL=4 (эксперементируй, или разберись с АТ командами)
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Значит надо так
at+cpms=mt (перейти в эту память)
+CPMS: 3,45,0,20,0,20
OK
at+cmgl=4 (потом выводится, в другой памяти либо ERROR либо просто OK )
+CMGL: 3,1,,24
07919761989901F0240B919761464339F20000213082123060 6105B61B2E0703
+CMGL: 4,1,,24
07919761989901F0240B919761464339F20000213082127280 6105F4F29C1E03
+CMGL: 7,1,,32
07919761989901F0240B919761464339F20000213082327301 610EB3D96C369BCD66B3D96C369B01
но есть нестабильность в выводе информации:
at+cpms=mt
ERROR
at+cpms=mt
+CPMS: 3,45,0,20,0,20
at+cnmi=1,1
ERROR
at+cnmi=1,1
OK
так происходит с многими командами...только со второй попытки отвечает
а может и с первого раза ответить
?????МОЖЕТ ДЛИТЕЛЬ подкрутить????
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Не думаю, что в делителе дело. Хотя... Не знаю. Попробуй тел. вернуть к заводским установкам. Пока не будет стабильной работы телефона, программировать не имеет смысла.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Дело наверно в скорости обмена
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Блин яж его когда то перепрошивал ...может это повлияло!!! Надо поискать прошивки к нему!!!
УРА заррррработало
зажег по твоему скетчу светик!!!
удалил все смс -ки перед этим, как ты говорил!!!
Теперь проверю на стабильность из-за моего телефона... и будем думать(в меру мозгов) как включать пин по заданному тексту смс.
Chip
Попробую разные...пробовал 9600
-
Re: Управление внешними устройствами с Arduino при помощи СМС
изменение скорости не помогло
9600 работает но нестабильно
19200 работает но нестабильно
28800 неработает
36400 неработает
57600 работает но нестабильно
115200 работает но с ошибками в ответе
Буду искать второй телефон(дома потерян)...а пока не найду этот или перепрошивать или выкинуть!!!
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Теперь осталось выташитьт нужные байты. Но я все равно не могу понять, почему не работает substring в http://www.compcar.ru/forum/showpost...&postcount=262
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Посмотри вот в этом скетче это работает(String)...я сейчас уже с трудом понимаю что здесь насочинял :D:D:D да потом мне помогли в этом месте.
Там надо было вытащить из переменной в конце кусок и вывести в другом месте на экране
Или проблемы в другом ???
PHP код:
#include <LiquidCrystalRus.h> //БИБЛИОТЕКА lcd экрана
#include <OneWire.h> //БИБЛИОТЕКА цифровой датчик
volatile unsigned long t0; //обороты
volatile unsigned long t1; //обороты
volatile unsigned long dt; //обороты
OneWire ds(7); //ЦИФРОВОЙ ДАТЧИК температуры на цифровом 7 пине
LiquidCrystalRus lcd(12, 11, 10, 5, 4, 3, 1); // вместо 2 поставил 1 пин
int rpm; //переменная оборотов
int volt; // ++++++++переделать переменная напряжения
String volt_str; // для разделения числа на составные числа
int temp; //переменная температуры аналогового датчика температуры
String temp_str; // ????? отладка ?????????????????????????
int obog; //просто переменная
int x = 0; //переменная ключ, для вывода времени в пути и температуры на улице
boolean pitanie = LOW; // переменная габаритов
boolean gabarit = LOW; // ключ переменная габаритов
int Temp2; //!!!!!!!!!!!!!!??????????????????1!!!!!!!!!!!!!!!???????????????
int times2 = 1; // для моргания подсветкой при предельных значениях
int cur_millis , lastTick = 0; // переменные времени в пути
int mins, hour = 0; // время в пути
//==============================================================================================================
void setup()
{
millis(); // Время пошло
lcd.begin(16, 2); // Инициализация экрана 16 х 2
attachInterrupt(0, blink, FALLING); //прерывания обороты
t1 = 0; //
dt = 0; //
pinMode(8, OUTPUT); // 8 пин определяем как выход
digitalWrite(8, LOW); // на 8 пине земля
obog = 1; //
pinMode (6, INPUT); // пин для ГАБАРИТОВ
pinMode(9, OUTPUT); // пин для управления подсветкой экрана
digitalWrite(9, LOW); // подсветка выключена
pinMode(13, OUTPUT); // пин для мигания подсветкой экрана при предельных значениях.
digitalWrite(13, LOW); // подсветка не мигает-выключена
//------------------------вывод начальной инфы
lcd.setCursor(0, 0);
lcd.print("Хозяин Т");
lcd.setCursor(0, 1);
lcd.print("ЕЛ");
delay (1000);
lcd.clear(); //очистка экрана
lcd.setCursor(0, 0);
lcd.print("91672345");
lcd.setCursor(0, 1);
lcd.print("67");
delay (3000);
lcd.clear(); //очистка экрана
}
//==========================================================================================================
void loop() {
//------------------------------- определение времени мин. в пути----------------------------------------
cur_millis = millis() / 1000 / 60;
if (cur_millis - lastTick >= 1) {
lastTick = cur_millis;
mins++;
}
//--------------------------------определение состояния габаритов------------------------------------
if (digitalRead(6) == HIGH && pitanie == LOW) { // ВОЗМОЖНО ПРОЩЕ
gabarit = !gabarit; //
pitanie = HIGH;
}
else { pitanie = digitalRead(6); }
//-----------------------------------включение подсветки-----------------
if (digitalRead(6) == HIGH) {
digitalWrite(9, HIGH);
digitalWrite(13, HIGH);
}
else { digitalWrite(9, LOW); }
//-----------------------------------цифровой датчик начало-----------
{
byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
Temp2 = (data[1]<<8)+data[0];
Temp2 = Temp2>>4;
lcd.setCursor(14,1);
lcd.print(Temp2); // вывод цифрового датчика температуры
lcd.print(" "); // стераем старое лишнее
}
// -------------------------------цифровой датчик конец--------------
if (dt == 0) //
rpm = 0; //
else //
rpm = 60000000 / dt /50 * 50; // обороты
//----------------------------------------
volt = analogRead(4); //считывание вольт
volt = volt * 1.925; //вольты в нормальный вид, без запятой
volt_str = String(volt); //
if (volt_str.length() < 4) { volt_str = " " + volt_str; } //
//------------------------------------------
temp = analogRead(5); // считывание температуры
temp = temp * 0.48189 - 273; // температура в градусах цельсия
temp_str = String(temp); //
if (temp_str.length() < 2) { temp_str = " " + temp_str; } //
if (temp_str.length() < 3) { temp_str = " " + temp_str; } //
//------------------------------------------
if (temp < 40) // ЗАДАНИЕ ТЕМПЕРАТУРЫ ВКЛЮЧЕНИЯ...доп. оборудования
if (obog == 1) // !!!!!!!!!!!!!!!возможно упростить как с подсветкой lcd!!!!!!!!!!!!
{ //
digitalWrite(8, LOW); //
obog = 1 - obog; //
}
if (temp > 40) //ЗАДАНИЕ ТЕМПЕРАТУРЫ ВКЛЮЧЕНИЯ...
if (obog == 0) //
{
digitalWrite(8, HIGH); //
obog = 1 - obog; //
}
//++++++++++++++++++++++++ВЫВОД НА ЭКРАН++++++++++++++++++++++++++++++++++++++
if (rpm < 1000) { // мотор не заведен
lcd.setCursor(0,0);
lcd.print(temp);
lcd.print("c");
lcd.print(" ");
lcd.setCursor(5,0);
lcd.print(volt_str[0]);
lcd.print(volt_str[1]);
lcd.print(".");
lcd.setCursor(0,1);
lcd.print(volt_str[2]);
lcd.print(volt_str[3]);
// 1 3 9 c _ 1 2 . 3 4 пример, температура _ напряжение
delay(500);
}
// --------------------------------
if (gabarit == LOW && rpm > 1000) { // вкл...выкл и мотор работает
if(x == 0) {
lcd.clear(); //очистка экрана
if (mins >=60) { hour++; mins = 0; }
lcd.setCursor(0, 0);
lcd.print(hour); //вывод часов в пути
lcd.print(":");
if (mins < 10) {lcd.print("0");}
lcd.print(mins); // вывод минут в пути
lcd.print(" ");
lcd.print(Temp2); // вывод температуры на улице
lcd.print("c");
lcd.print(" ");
delay(2000);
lcd.clear(); //очистка экрана
x = 1; // изменяем ключ, чтоб только один раз использовался цикл
}
else
{
lcd.setCursor(0, 0);
lcd.print(rpm);
if (rpm <= 9999) { lcd.print(" "); }
lcd.setCursor(5, 0);
lcd.print(volt_str[0]);
lcd.print(volt_str[1]);
lcd.print(".");
lcd.setCursor(0,1);
lcd.print(volt_str[2]);
lcd.print(volt_str[3]);
// 9 9 9 9 _ 1 2 . 3 4 пример, обороты _ напряжение
delay(500);
}
}
//-------------------------------------------------
if (gabarit == HIGH && rpm > 1000) { // вкл...выкл мотор работает
if(x == 1) {
lcd.clear(); //очистка экрана
if (mins >=60) { hour++; mins = 0; }
lcd.setCursor(0, 0);
lcd.print(hour); //вывод часов в пути
lcd.print(":");
if (mins < 10) {lcd.print("0");}
lcd.print(mins); // вывод минут в пути
lcd.print(" ");
lcd.print(Temp2); // вывод температуры на улице
lcd.print("c");
lcd.print(" ");
delay(2000); // жде 2сек
lcd.clear(); //очистка экрана
x = 0; // изменяем ключ, чтоб только один раз использовался цикл
}
else
{
lcd.setCursor(0,0); //
lcd.print(rpm); //
lcd.print(" ");
if (rpm <= 9999) { lcd.print(" "); } // стераем лишнее
lcd.setCursor(6,0); //
lcd.print(temp_str[0]);
lcd.print(temp_str[1]);
lcd.setCursor(0,1);
lcd.print(temp_str[2]);
lcd.print("c");
// 9 9 9 9 _ _ 1 3 9 c пример, обороты _ температура
delay(500);
}
}
//--------------маргание подсветкой экрана при предельных значениях-------------
if (volt < 1150 || volt > 1450 || temp > 125) { // УСЛОВИЯ
if (millis() / 1000 >= times2 + 30) { // ИНТЕРВАЛ!!!!!!!!!!!
lcd.clear(); //очистка экрана
lcd.setCursor(0, 0);
//-------------------
float volt2; //переменная с запятой
volt2 = volt;
volt2 = volt2 / 100; // вольты в нормальном виде
if (volt < 1150) {lcd.print(volt2); lcd.print("v!");} //вывод предельных значений
if (volt > 1450) {lcd.print(volt2); lcd.print("v!");} //вывод предельных значений
if (temp > 125) {lcd.print(temp); lcd.print("c!!!"); } //вывод предельных значений
if (temp > 125 && (volt < 1150 || volt > 1450)) {lcd.setCursor(0, 0);
lcd.print(temp); lcd.print("c"); lcd.print(volt2);} //вывод предельных значений
//-------------------
digitalWrite(13, LOW); // цикл моргания подсветки
delay(200);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(200);
digitalWrite(13, HIGH); //2
delay(100);
digitalWrite(13, LOW);
delay(200);
digitalWrite(13, HIGH); //3
delay(100);
digitalWrite(13, LOW);
delay(300);
digitalWrite(13, HIGH); //3
delay(100);
lcd.clear(); //очистка экрана
times2 = millis() / 1000; // переменная для цикла
}
}
}
//++++++++++++++++++++++++++++++ПРЕРЫВАНИЯ. ОБОРОТЫ ДВИЖКА+++++++++++++++++++++
void blink()
{
noInterrupts();
t0 = t1;
t1 = micros();
if (t0 > 0)
if (t0 < t1)
if (t1 - t0 > 5000)
{
dt = t1 - t0;
if (dt > 500000) dt = 0;
}
else
t1 = 0;
interrupts();
}
А может и TX и RX оба через делитель пустить???
-
Re: Управление внешними устройствами с Arduino при помощи СМС
-
Re: Управление внешними устройствами с Arduino при помощи СМС
:D Хрен редьки не слаще... я не разберусь.
Вот этот твой код(с мелким изменением) отработал 10 раз без ошибок. походу у меня только с терминалом телефон не дружит!!!
PHP код:
#include <NewSoftSerial.h>
char inchar[40];
//NewSoftSerial gsm(2,3);
NewSoftSerial gsm(9,8);
int ledpin = 13;
long previousMillis = 0;
long interval = 30000;
void setup()
{
pinMode(ledpin, OUTPUT);
gsm.begin(19200); // эксперементируй со скоростью
Serial.begin(19200);
gsm.flush();
delay(5000);
gsm.println("AT+CPMS =MT" ); // тут тоже эксперементы, или SM или МТ
delay(2000);
gsm.println("AT+CNMI=1,1\r");
delay(2000);
}
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
gsm.println("AT+CMGL=4\r");
delay(1000);
}
if(gsm.read()=='0'&&gsm.read()=='7'&&gsm.read()=='9'&&gsm.read()=='1'&&gsm.read()=='9'&&gsm.read()== '7'&&gsm.read()=='6'&&gsm.read()=='1')
{
digitalWrite(ledpin,HIGH);
delay(60000);
gsm.println("AT+CMGD=1\r");
delay(2000);
digitalWrite(ledpin,LOW);
delay(1000);
}
}
-
Re: Управление внешними устройствами с Arduino при помощи СМС
В терминале:
1- выставь скорость, которая в скетче в Serial
2- выставь Both NL & CR
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Цитата:
Сообщение от
metaforos
В терминале:
1- выставь скорость, которая в скетче в Serial
2- выставь Both NL & CR
1 скетч пока этот пользую с терминалом putty
//http://www.compcar.ru
uint8_t TX_Pin=9; // 2
uint8_t RX_Pin=8; //3
void setup()
{
pinMode(0, INPUT); //RX
pinMode(1, OUTPUT);//TX
pinMode(RX_Pin, OUTPUT);
pinMode(TX_Pin, INPUT);
}
void loop()
{
PORTB = PIND;
PORTD = PINB;
}
2 Извини, а что это, где копать, в putty(на русском) не нашел такого! а ардуиновский в ответ пишет то что я шлю.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
В Ардуиновском Serial Мониторе. Если используещь NewSoftSerial, для тестов попробуй вот что:
Tx телефона подключи к 2 пину, а Rx к 3 пину
PHP код:
#include <string.h>
#include <NewSoftSerial.h>
NewSoftSerial phone(2,3);
char incoming_char=0;
void setup()
{
Serial.begin(9600);
phone.begin(9600);
Serial.println("Starting Communication...");
}
void loop() {
if(phone.available() >0){
incoming_char=phone.read();
Serial.print(incoming_char);
}
if(Serial.available() >0){
incoming_char=Serial.read();
Serial.print(incoming_char);
phone.print(incoming_char);
}
}
-
Re: Управление внешними устройствами с Arduino при помощи СМС
metaforos
Спасибо... и с этим помог. Теперь команды идут отлично и ответ всегда правильный!!!
Но есть странность
Шлю AT а в ответ...
at
at
OK
То есть любой мой посыл два раза печатается, потом нормальный ответ.
Мне кажется так не должно быть. Ну да и бог с ним главное проблема пропала.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Теперь вопрос к Chip. У меня начало происходить что-то странное. Использую http://www.compcar.ru/forum/showpost...&postcount=208
Все работает, но очень-очень тускло горят светодиоды. Раньше нормально было. Проверяю пины со светиками Blink'ом, - ярко горят. Посылаю СМС - тускло. В чем дело может быть?
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Цитата:
Сообщение от
metaforos
Теперь вопрос к Chip. У меня начало происходить что-то странное. Использую
http://www.compcar.ru/forum/showpost...&postcount=208
Все работает, но очень-очень тускло горят светодиоды. Раньше нормально было. Проверяю пины со светиками Blink'ом, - ярко горят. Посылаю СМС - тускло. В чем дело может быть?
Извините, туплю... Пины то я перевесил, а здесь не поменял - for(byte i=10; i<14; i++) pinMode(i, OUTPUT);
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Добрый день. Прочитал всю ветку форума, но так и не понял смог кто нибудь отправить смс с arduino при помощи siemens s45 например.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Я пока не смог. Как купил шилд, так и забросил эту идею. Но как только научусь принимать, займусь отправкой.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Цитата:
Сообщение от
metaforos
Я пока не смог. Как купил шилд, так и забросил эту идею. Но как только научусь принимать, займусь отправкой.
Получилось отправить смс с текстом привет на номер такой то.
PHP код:
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3);
void setup()
{
Serial.begin(9600);
Serial.println("Goodnight moon!");
mySerial.begin(9600);
}
void loop() // run over and over
{
mySerial.println("AT+CMGF=0"); // устанавливаем pdu режим
delay(3000);
mySerial.println("AT+CMGS=26"); //Количество октетов
delay(3000);
mySerial.print("0011000B919760691665F10008FF0C043F04400438043204350442");
delay(3000);
mySerial.write(26);
delay(3000);
}
Пробуйте!:)
P.S. программа для конвертации текста в pdu. Как бы такой конвертик в код ардуино внедрить. Есть идеи?
-
Re: Управление внешними устройствами с Arduino при помощи СМС
rimidalw
У меня не выходит отправить
пробовал и \r подставлять, ну не шлет телефон и все!!!
текст конвертил, телефон вбивал, 26 заменял....
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Проверил. Работает. Спасибо, на одну проблему меньше. :)
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Цитата:
Сообщение от
metaforos
Проверил. Работает. Спасибо, на одну проблему меньше. :)
А принимать и обрабатывать смс решили проблему? :)
-
Re: Управление внешними устройствами с Arduino при помощи СМС
С обработкой не решено...
вообщем то тривиальная задача для программистов, вытащить из этой изменяемой строки постоянный кусок...как я это понимаю.
Подскажи кроме упущенной скобки внизу скетча все остальное так и должно быть???
mySerial.print без ln так и должно быть где текст смс
Пробовал по разному...у меня телефон не отправляет почему то.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Цитата:
Сообщение от
igvv
С обработкой не решено...
вообщем то тривиальная задача для программистов, вытащить из этой изменяемой строки постоянный кусок...как я это понимаю.
Подскажи кроме упущенной скобки внизу скетча все остальное так и должно быть???
mySerial.print без ln так и должно быть где текст смс
Пробовал по разному...у меня телефон не отправляет почему то.
Ага точно пропустил скобку. Все так и должно быть в этом коде Println означает просто переход на новую строку, а Print нет если я не ошибаюсь. Может у вас с подключением к ардуино косяк? И да я использую Siemens S45.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Извини не понял.
mySerial.print("0011000B919760691665F10008FF0C043F 04400438043204350442");
mySerial.print так и должно быть????
Ты поправь просто все в том сообщении со скетчем!!!
С подключением все правильно ...я же на других скетчах уже работал с NewSoftSerial mySerial(2, 3);
Где то косячу а где не пойму.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
rimidalw
А у тебя тоже МЕГАдуина???
Вот по этому коду у меня идет дозвон на другой телефон затем вешается трубка в скетче...а вот смс не отправляется.
PHP код:
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3);
void setup()
{
Serial.begin(19200); // 9600 пробовал
Serial.println("Goodnight moon!");
mySerial.begin(19200); // 9600 пробовал
}
void loop() // run over and over
{
digitalWrite(13, HIGH);delay(500);
digitalWrite(13, LOW);delay(200);
mySerial.println(" ATD+79161234567;");
digitalWrite(13, HIGH);delay(20000);
mySerial.println(" ATH");
digitalWrite(13, LOW);delay(5000);
mySerial.println("AT+CMGF=0"); // устанавливаем pdu режим
delay(3000);
mySerial.println("AT+CMGS=26"); //Количество октетов
delay(3000);
mySerial.print("0011000B919761464339F20008FF3400310031003100310031003100310031003100310031003100310031003100310031003100310031003100310031003100310031");
delay(3000);
mySerial.write(26);
delay(3000);
}
В pdu конверторе вбиваю номер другого телефона и текст(длинной26символов) может тут что-то не так делаю???
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Опять же, думаю проблема с NewSoftSerial. Попробуй повесь телефон на Serial. Вместо mySerial пиши просто Serial и убери из скетча строки:
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3);
mySerial.begin(9600);
Serial.println("Goodnight moon!");
И конечно-же, поменяй строку "0011000B919760691665F10008FF0C043F044004380432043 50442" на свою и измени "AT+CMGS=26"
-
Re: Управление внешними устройствами с Arduino при помощи СМС
мост заработал ...почему раньше не получалось не знаю
PHP код:
//http://www.compcar.ru
void setup()
{
pinMode(0, INPUT); //RX
pinMode(1, INPUT);//TX
}
void loop()
{
}
Поменял но вот по этому скетчу все равно...и не звонит и не шлет смс...единственное телефон сеть то теряет то находит...В ТЕРМИНАЛ ВСЕ ВЫВОДИТ
Посмотрите нет в нем косяков!?
PHP код:
void setup()
{
Serial.begin(9600);
}
void loop() // run over and over
{
digitalWrite(13, HIGH);delay(500);
digitalWrite(13, LOW);delay(200);
Serial.println(" ATD+79166434932;");
digitalWrite(13, HIGH);delay(20000);
Serial.println(" ATH");
digitalWrite(13, LOW);delay(5000);
Serial.println(" AT+CMGF=0"); // устанавливаем pdu режим
delay(3000);
Serial.println(" AT+CMGS=26"); //Количество октетов
delay(3000);
Serial.print("0011000B919761464339F20008FF3400310031003100310031003100310031003100310031003100310031003100310031003100310031003100310031003100310031");
delay(3000);
Serial.write(26);
delay(3000);
}
в тексте смс 11111111111111111111111111(26штук) ну и номер +7916ХХХХХХХ свой ставлю
-
Re: Управление внешними устройствами с Arduino при помощи СМС
У меня тоже по началу телефон сеть терял пока я не подпаял резисторов и диодов. Что то сомневаюсь что у вас длинна 26, воспользуйтесь лучше программой конвертером http://www.avrdevices.ru/Soft/Pdu.exe
Вот нарыл в гугле интересный пример. Я так понял он как раз конвертрует текст в скетче в формат пду, но у меня не заработало(
PHP код:
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3);
#define num_to_char(number) ((number) < 10 ? \
('0' + (number)) : \
(('A' - 10) + (number)) )
/* To select the 4 bits we do this */
#define first_four(byte) (0x0F & (byte))
/* Last four: Shift left to get to a number < 16 */
#define last_four(byte) ((0xF0 & (byte)) >> 4)
/* The MSB goes first. */
#define hexdump_a(byte) num_to_char( last_four(byte))
#define hexdump_b(byte) num_to_char(first_four(byte))
int timesToSend = 1; // Numbers of SMS to send
int count = 0;
void setup()
{
Serial.begin(9600);
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
//mySerial.println("Hello, world?");
}
void loop() // run over and over
{
send_sms("Hello World");
/*
if (Serial.available() > 0) {
// number_in = Serial.read();
mySerial.println("AT+CMGF=0"); // Set PDU mode
delay(3000);
mySerial.println("AT+CMGS=30"); // Number of octets
delay(3000);
mySerial.print("0011000B919731630470F20008FF10043F0440043E043204350440043A0430"); // Sends "Hello" to "00 46707112233"
delay(3000);
mySerial.write(26);
delay(3000);
}*/
}
void hexdump_byte(unsigned char byte)
{
mySerial.print(hexdump_a(byte), BYTE);
mySerial.print(hexdump_b(byte), BYTE);
}
void send_sms(char *data)
{
size_t data_length, x;
char c, l;
long i;
long n;
data_length = strlen(data);
i = data_length * 7;
/* Round i up to a multiple of 8 */
if (i & 0x07) i = (i & ~0x07) + 0x08;
/* Calculate the number of message octets */
i = i / 8;
//Select operating mode for sms: PDU, since it doesnt understand anything else
mySerial.println("AT+CMGF=0");
delay(1500);
mySerial.print("AT+CMGS=");
//Now we say "AT+CMGS=..." that gives it the cellphone number.
//This is also in weirdass PDU format, so i am sending a message to myself at "0031-653587738"
// which was the destination phone nr. Serial.print("AT+CMGS=");
delay(1500);
mySerial.println(i + 14);
delay(1500);
//This is actually the number. If you want to use your own number you just have to figure out where to put your digits.
//Mine was "31653587738" Because this is an uneven amount of numbers, there is an F included before the last 8.
//If you check it out you probably figure it out: you have to make your phonenumber so that they're
//switched in pairs of two, so like if your number is "123456789" it will become "21436587F9"
//And if its "123456" it will be "214365". I know, it's weird and ancient.
//that's why im posting this code.
mySerial.print("0011000B919731630470F20000AA"); //1356537837F8 is the phonenr
hexdump_byte(data_length & 0xFF);
l = 0;
n = 0;
//The rest of the code then is just about changing our serial info "Hello World" into neat PDU HEX format.
for (x = 0; x < data_length; x++)
{
if (data[x] == '$') data[x] = 0x02;
n |= (data[x] & 0x7F) << l;
l += 7;
if (l >= 8)
{
hexdump_byte(n & 0xFF);
l -= 8;
n >>= 8;
}
}
if (l != 0)
{
hexdump_byte(n & 0xFF);
}
mySerial.println(0x1A, BYTE);
//mySerial.write(26);
}
Ссылка на оригинал.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
вот строка с 11111111111111111111111111(26шт)
0011000B919761214365F70008FF3400310031003100310031 00310031003100310031003100310031003100310031003100 3100310031003100310031003100310031
телефон там +79161234567
Я тоже все смотрю на твою строку и не пойму почему она у тебя короче моей вышла.
Прога из твоей ссылки
резисторы(делитель) стоят ...да и работало ведь все уже... может все таки второй делитель поставить.
У тебя какая платка дуина????
Не тут софтовый непорядок кажися.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Цитата:
Сообщение от
igvv
вот строка с 11111111111111111111111111(26шт)
0011000B919761214365F70008FF3400310031003100310031 00310031003100310031003100310031003100310031003100 3100310031003100310031003100310031
телефон там +79161234567
Я тоже все смотрю на твою строку и не пойму почему она у тебя короче моей вышла.
Прога из твоей ссылки
резисторы(делитель) стоят ...да и работало ведь все уже... может все таки второй делитель поставить.
У тебя какая платка дуина????
Не тут софтовый непорядок кажися.
У меня freeduino 2009. Схему подключения позже выложу. У вас символов в сообщении 26, а размер pdu 66 внимательнее надо быть.
http://s1.hostingkartinok.com/upload...5df47a214c.png
-
Re: Управление внешними устройствами с Arduino при помощи СМС
В программе, внизу, краснім цветом написано "Размер PDU", вот эту цифру и вписывай в AT+CMGS=
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Всем спасибо понял свою ошибку(теперь работает)...кстати я уже об этом думал и пробовал вбивать 66 но не выходило ....попутно отыскал и плохой контакт на макетке...
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Отлично! Этот код у меня заработал. Через каждые 18 секунд отправляет Hello World. Есстественно Hello World меняем на свое и номер тела!
PHP код:
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3);
#define num_to_char(number) ((number) < 10 ? \
('0' + (number)) : \
(('A' - 10) + (number)) )
#define first_four(byte) (0x0F & (byte))
#define last_four(byte) ((0xF0 & (byte)) >> 4)
#define hexdump_a(byte) num_to_char( last_four(byte))
#define hexdump_b(byte) num_to_char(first_four(byte))
int timesToSend = 1; // Numbers of SMS to send
int count = 0;
void setup()
{
// Serial.begin(9600);
// Serial.println("Goodnight moon!");
mySerial.begin(9600);
}
void loop()
{
for (int k=0;k<=1;k++){
send_sms("Hello World");
delay(18000);
}
}
void send_sms(char *data)
{
size_t data_length, x;
char c, l;
long i;
long n;
data_length = strlen(data);
i = data_length * 7;
if (i & 0x07) i = (i & ~0x07) + 0x08;
i = i / 8;
mySerial.println("AT+CMGF=0");
delay(1500);
mySerial.print("AT+CMGS=");
delay(1500);
mySerial.println(i + 14);
delay(1500);
// mySerial.print("0011000B919731630470F20008FF");
//перевернутый номер тела 19731630470F2 изменить на свой этот кусок
mySerial.print("0011000B919731630470F20000AA");
hexdump_byte(data_length & 0xFF);
l = 0;
n = 0;
for (x = 0; x < data_length; x++)
{
if (data[x] == '$') data[x] = 0x02;
n |= (data[x] & 0x7F) << l;
l += 7;
if (l >= 8)
{
hexdump_byte(n & 0xFF);
l -= 8;
n >>= 8;
}
}
if (l != 0)
{
hexdump_byte(n & 0xFF);
}
mySerial.write(26);
}
void hexdump_byte(unsigned char byte)
{
mySerial.print(hexdump_a(byte), BYTE);
mySerial.print(hexdump_b(byte), BYTE);
}
-
Re: Управление внешними устройствами с Arduino при помощи СМС
Код несомненно полезный. НО! Учитывая ограниченную память Ардуино, думаю, что если есть программа, то лучше конвертацию в ней проводить.
-
Re: Управление внешними устройствами с Arduino при помощи СМС
У меня работает он :D:D:D
Ну в принципе если влезет в основной проект, то пускай будет , а так пока тоже особо смысла не вижу лично для своих задач.
Вот обратную конвертацию бы еще нашел, тогда бы все вопросы решил :D
Могла бы пригодиться здорово.
Но проще будет просто вытащить кусок и сравнить...вроде пустячок а никак...