Re: Управление внешними устройствами с Arduino при помощи СМС
Вобщем ничего нового не скажу ... после определенного места в массиве на Freeduino2009 начинаются ошибки.
У кого платка с ATmega168, проверьте у себя этот скетч!!! также будет или нет???
Да, скорости менял, не помогает.
PHP код:
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2,3);
int i=1;
char strok[61]="";
int ledpin = 13;
long previousMillis = 0;
long interval = 30000;
void setup()
{
pinMode(ledpin, OUTPUT);
mySerial.begin(9600);
Serial.begin(9600);
mySerial.flush();
delay(2000);
mySerial.println("AT+CPMS =MT\r" );
delay(2000);
mySerial.println("AT+CNMI=1,1\r");
delay(2000);
}
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
mySerial.println("AT+CMGL=4\r");
delay(100);
}
// отправляю СМС - #a1
if(mySerial.read()=='0'&&mySerial.read()=='7'&&mySerial.read()=='9') //только, если в Serial1 есть СМС, а то он начинает читать с АТ+ и т.д.
{
for (i=1; i<58; i++) strok [i] = mySerial.read(); delay(100);
//ОТПРАВЛЮЯ #a1
// ЭТАЛОН
// 0
// 7
// 9
Serial.println(strok[1]); // 1 1
Serial.println(strok[2]); // 9 9
Serial.println(strok[3]); // 7 7
Serial.println(strok[4]); // 6 6
Serial.println(strok[5]); // 1 1
Serial.println(strok[6]); // 9 9
Serial.println(strok[7]); // 8 8
Serial.println(strok[8]); // 9 9
Serial.println(strok[9]); // 9 9
Serial.println(strok[10]); // 0 0
Serial.println(strok[11]); // 1 1
Serial.println(strok[12]); // F F
Serial.println(strok[13]); // 0 0
Serial.println(strok[14]); // 2 2
Serial.println(strok[15]); // 4 4
Serial.println(strok[16]); // 0 0
Serial.println(strok[17]); // B B
Serial.println(strok[18]); // 9 9
Serial.println(strok[19]); // 1 1
Serial.println(strok[20]); // 9 9
Serial.println(strok[21]); // 7 7
Serial.println(strok[22]); // 6 6
Serial.println(strok[23]); // 1 1
Serial.println(strok[24]); // 4 4
Serial.println(strok[25]); // 6 6
Serial.println(strok[26]); // 4 4
Serial.println(strok[27]); // 3 3
Serial.println(strok[28]); // 3 3
Serial.println(strok[29]); // 9 9
Serial.println(strok[30]); // F F ПОСЛЕ ЭТОГО МЕСТА ИДУТ ОШИБКИ
Serial.println(strok[32]); // 2 0 0 ошибка
Serial.println(strok[32]); // 0 0 0 ошибка
Serial.println(strok[33]); // 0 0 7 ошибка
Serial.println(strok[34]); // 0 7 0 ошибка
Serial.println(strok[35]); // 0 0 1 ошибка
Serial.println(strok[36]); // 2 1 1 ошибка
Serial.println(strok[37]); // 1 1 2 ошибка
Serial.println(strok[38]); // 4 2 0 ошибка
Serial.println(strok[39]); // 0 0 4 ошибка
Serial.println(strok[40]); // 7 4 3 ошибка
Serial.println(strok[41]); // 0 3 6 переменная
Serial.println(strok[42]); // 1 6 1 переменная
Serial.println(strok[43]); // 1 "1" 0 переменная
Serial.println(strok[44]); // 2 "0" 3 переменная
Serial.println(strok[45]); // 0 "3" A переменная
Serial.println(strok[46]); // 4 "A" 3 переменная
Serial.println(strok[47]); // 3 "3" 7
Serial.println(strok[48]); // 6 "7" 0
Serial.println(strok[49]); //"1" "0" 0
Serial.println(strok[50]); //"0" 0 C
Serial.println(strok[51]); //"3" * *
Serial.println(strok[52]); //"A" * *
Serial.println(strok[53]); //"3" * *
Serial.println(strok[54]); //"7" * *
Serial.println(strok[55]); //"0" *
Serial.println(strok[56]); // 0 * *
Serial.println(strok[57]); // C C *
Serial.println(strok[58]); // *
digitalWrite (ledpin, HIGH);
delay(3000);
digitalWrite (ledpin, LOW);
delay(10000);
}
}
Присутствует пропуск-потеря информации, неверная информация и закорючки...и все это происходит строго после определенного момента. происходит.
.
Re: Управление внешними устройствами с Arduino при помощи СМС
еще вариант незаметил где очистка флеша идет и еще я так понял в терминале таие же моменты происходят
Re: Управление внешними устройствами с Arduino при помощи СМС
Как определить что подкрутить когда этот флеш чистится.???:rolleyes:
Пробовал менять mySerial.flush(); delay(2000); на 5000. Но это не....то.
В терминале если я даю команду- ручками вбиваю, то в терминал ответ приходит четко! без ошибок и закорючек!!! С терминалом проблем нету никаких...все работает как надо. Вся строка СМС выводится по команде AT+CMGL=4 целиком без ошибок.
Проблема только в этом месте...ну не хочет без ошибок считываться с телефона никак блин. А кто тут виноват телефон или ардуина....больше похоже на ардуину! ИМХО.
ВОТ БЫ КТО ПРОВЕРИЛ!
+ + + +
А если в терминальном скетче забить строку
mySerial.println("AT+CMGL=4\r");
Будет ответ в терминал? Надо попробовать позже.
Re: Управление внешними устройствами с Arduino при помощи СМС
очистку флеша делай перед вызвом AT+CMGL=4\r в цикле void loop()
Re: Управление внешними устройствами с Arduino при помощи СМС
Цитата:
Сообщение от
andrei2882
очистку флеша делай перед вызвом AT+CMGL=4\r в цикле void loop()
Так?
mySerial.flush();
delay(2000);
mySerial.println("AT+CMGL=4\r");
Попробовал, ну что сказать -стало заметно стабильнее как-то, но всеравно есть пропуски там где и раньше где 0000 подряд. То 00 вылезет то 000 то 0000 затем вроде идет все правильно а в конце последние 2-4 символа косячат. А иной раз без ошибки выдает. Первые символы смс #a1 - 103А выдает стабильно, остальные *** как повезет.
Потом подробнее-поточнее попробую потестить.
Re: Управление внешними устройствами с Arduino при помощи СМС
опробуй так
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
delay(1000);
mySerial.flush();
delay(1000);
mySerial.println("AT+CMGL=4\r"); }
Re: Управление внешними устройствами с Arduino при помощи СМС
Так стало хуже, уже с того известного места строго стабильно идут закорючки.
Вобщем я ничего не понимаю, почему это происходит в скетче и почему этого нету чисто в терминале :mad:кщ
Потом как я только не пробовал всегда последние 6-7 символов закорючками, видимо какая то часть информации из этой строки несчитывается в телефоне и пропадает.
Возможно виноват и телефон где-то читал что на МЕ45 (и кажетсяS45) какаято своеобразная флеш память и там с этим были заморочки.
Попробую понять что за часть пропадает и за что она отвечает.
Хотелось бы чтоб ктото имеющий freeduino протестил на другом телефоне скетч.
Re: Управление внешними устройствами с Arduino при помощи СМС
Получилось таки считывать без ошибок и обрабатывать СМС.
Скетч примитивный(ну как умеем так умеем), но по размеру вроде такой же получается.
И еще вопрос! почему в прошлых скетчах получалось 60символов а тут 1символ равен двум цифрам и того выходит 120???
PHP код:
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2,3);
int a=1;
int i=1;
int ledpin = 8;
void setup()
{
pinMode(ledpin, OUTPUT);
mySerial.begin(9600);
Serial.begin(9600);
mySerial.flush();
delay(1000);
mySerial.println("AT+CPMS =MT\r" );
delay(1000);
mySerial.println("AT+CNMI=1,1\r");
delay(1000);
}
void loop()
{
mySerial.flush();
delay(1000);
mySerial.println("AT+CMGL=4\r");
delay(100);
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.print(mySerial.read()); //
Serial.println(mySerial.read()); //
Serial.print("a=");
a=mySerial.read();
Serial.println(a); //
i=mySerial.read();
Serial.print("i=");
Serial.println(i); //
if(a==70 && i==50)
{
digitalWrite(ledpin,HIGH);
delay(5000);
digitalWrite(ledpin,LOW);
delay(1000);
}
delay(10000);
}
Re: Управление внешними устройствами с Arduino при помощи СМС
60-120 скорее всего из-за разности в типе данных и кодировке. Ты засовываешь информацию в int, которая занимает 2 байта памяти, а в предыдущих скетчах был char - занимает 1 байт памяти.
Re: Управление внешними устройствами с Arduino при помощи СМС
Мой прошлый скетч оказывается с той же проблемой.:eek:
Уже собрался начинать писать скетч под свой проект и выясняется, что до 63парного символа все всегда совпадает... а мне нужно считывать дальше...а дальше опять полная неразбериха выводится.:mad:
:D
.
:D
.
:D
Всеж меня мучает ...а почему в этом скетче все выводится как надо!
PHP код:
#include <string.h>
#include <NewSoftSerial.h>
NewSoftSerial phone(2,3); // Tx телефона подключи к 2 пину, а Rx к 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);
}
}