==
490@220
510@220 corner: 550.0d@260
490@220 corner: 570.0d@260
514@244.5d
160@80
180@80 corner: 327.0d@300
160@80 corner: 347.0d@300
227.0d@94.0d
70@100
90@100 corner: 129.0d@120
70@100 corner: 149.0d@120
94@113.5d
70@110
90@110
70@100 corner: 90@120
129.0d@100 corner: 149.0d@120
149.0d@110
1
gosms
2
31.0d
7.0d
0.0d
129.0d@110
149.0d@110 corner: 149.0d@110
In_sms
160@110
180@110
In
733dcb6e-5b41-4cff-a699-c4c746c81d4c
25470667-0e8f-4848-9ae5-899d155b1a91
173dd596-248e-436d-8841-20975237a0db
if ( In == true)
{ // ключ нажат - вывод подтянут к высокому уровню сигнала
delay(100); // задержка для устранения дребезга контактов ключа
runnin = !runnin; // инвертирование переменной running
digitalWrite(LEDpin, runnin) ; // индикация светодиодом
}
314
pinMode(LEDpin, OUTPUT);
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH); // включить подтягивающий резистор
127
светодиод подключен к выводу 5
LEDpin
= 13;
int
ключ подключен к выводу 13, другой вывод подключен к земле
switchPin
= 2;
int
runnin
= false;
boolean
runnin1
= false;
boolean
e28b2991-30d8-41e9-87dd-641dccb0757a
160@100 corner: 180@120
70@120
90@120 corner: 130.0d@140
70@120 corner: 150.0d@140
94@134.5d
70@130
90@130
70@120 corner: 90@140
130.0d@120 corner: 150.0d@140
150.0d@130
teleph
0
32.0d
9.0d
0.0d
130.0d@130
150.0d@130 corner: 150.0d@130
Phone
160@130
180@130
adc49d19-4ee9-4037-9446-147f6c73ae10
2a0a1b31-924c-4588-b575-eeb9a9e99cf9
55e0ac92-10eb-433c-90d9-23f4b60c9a5e
Последняя разработка
if ( In == true)
{
digitalWrite(LED, HIGH) ;
Serial.print("AT+CMGS=\"");
Serial.print( Phone );
Serial.println("\"");
}
else {
digitalWrite(LED, LOW) ;
}
169
Serial.begin(9600);
pinMode(LED, OUTPUT);
44
LED
= 13;
int
ae3d23c4-4c67-497d-8c24-175c9c4f37af
160@120 corner: 180@140
text
stop
160@150
180@150
139.0d@154.5d
SIM 900
f0527995-7b55-4ee5-b390-efa6adaba935
08bc550c-64e3-4e3a-b14a-1e378cb3e358
a6ea1548-470b-4d48-bbd1-1e8cb1b2c223
SIM 900 Serial1
if ( In == true)
{
Serial1.print("AT + CMGS = \"");
delay(300);
Serial1.print( Phone );
delay(300);
Serial1.println("\"");
delay(300);
// Serial1.println( Text sms );
delay(300);
Serial1.println((char)26);
delay(300);
Serial1.println();
delay(300);
}
else {
digitalWrite(LED, LOW) ; // контрольный светодиод убрать
}
328
Serial1.begin(9600);
pinMode(LED, OUTPUT); //контрольный светодиод убрать
// настройка шилда
Serial1.print("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
delay(300);
Serial1.print("AT+CLIP=1\r"); // устанавливает программный контроль потоком передачи данных
delay(300);
Serial1.print("AT+CSCS=\"GSM\"\r");
delay(300);
Serial1.println("AT+CNMI=1,2,2,1,0\r"); // Настройка вывода смс в консоль.
delay(500);
Serial1.print("ATS0=2\r"); // поднимать трубку после второго звонка
delay(500);
Serial1.print("AT+CMGD=1,4\r"); // Стираем Смс
delay(500);
// настройка шилда
672
контрольный светодиод убрать
LED
= 13;
int
fae71e77-4801-4518-a803-bb358809b408
160@140 corner: 180@160
Reject_call
160@170
180@170
m590 mega2560
a131b89a-32b1-43b7-abc8-c9d1701fd391
Сброс звонка
7760b87d-d2b8-4192-a97f-ac059fd205a2
Net
a2d42309-5a06-48f2-a27d-221976f445c9
Подключен к сети
6875df1a-317b-40a9-ba3b-0920a48b80a1
dBm
87a64b62-2488-4116-b3c6-2229454e6d59
Уровень сигнала
375cee25-509e-4be0-882b-7192829c4f30
m590 mega2560 115200
отправка смс из строк 1-2-3
Намер телефона клиента
строка смс 1
text 1
394e2336-a382-47e0-bf1b-a826009b105f
строка смс 2
154f7805-6f31-49e3-b0a5-5185f3a7442e
text2
66a95e0d-5da0-4709-bb47-63019c1c9f0c
строка смс 3
578b7f00-0b31-4f34-b0b8-6950a45ed8ee
out
985669be-77bd-4edb-b9e4-5f276bb35f47
a9235eff-09cd-457f-b991-5f1e731f173e
9bc60d94-25b8-4547-afc9-f1e77fc816cf
// Отправляем смс
if ( In == true)
{
Serial1.print("AT + CMGS = \"");
delay(300);
Serial1.print( Phone );
delay(300);
Serial1.println("\"");
delay(300);
Serial1.println( text );
delay(300);
Serial1.println((char)26);
delay(300);
Serial1.println();
delay(300);
}
else {
digitalWrite(LED, LOW) ; // контрольный светодиод убрать
}
// Отправляем смс
// Принимаем смс
// if (Serial1.available() > 0)
// {
//
// out = Serial.read();
// }
470
контрольный светодиод убрать
LED
= 13;
int
3ce7ef08-920f-4bca-bde6-b62a8aca2d77
получено из смс
test
ea76600c-405e-417c-840d-75e17db13ddf
e8c13239-ab3d-4370-ab0e-600a2f38547a
22a40700-ca43-4380-9aca-cc7d793d3c10
SIM 900 Serial1 v1
// Отправляем смс
if ( In == true)
{
Serial1.print("AT + CMGS = \"");
delay(300);
Serial1.print( Phone );
delay(300);
Serial1.println("\"");
delay(300);
Serial1.println( text );
delay(300);
Serial1.println((char)26);
delay(300);
Serial1.println();
delay(300);
}
else {
}
// Отправляем смс
// Принимаем смс
if (!Serial1.available())
return;
char currSymb = Serial1.read();
test = currStr;
if ('\r' == currSymb) {
if (isStringMessage) {
// если текущая строка – сообщение, то…
out = currStr;
isStringMessage = false;
}
else {
if (currStr.startsWith("+CMT")) {
// если текущая строка начинается с "+CMT", то следующая сообщение
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
810
pinMode(greenPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
Serial1.begin(9600);
delay(3000);
// настройка шилда
Serial1.print("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
delay(300);
Serial1.print("AT+CLIP=1\r"); // устанавливает программный контроль потоком передачи данных
delay(300);
Serial1.print("AT+CSCS=\"GSM\"\r");
delay(300);
Serial1.println("AT+CNMI=1,2,2,1,0\r"); // Настройка вывода смс в консоль.
delay(500);
Serial1.print("AT+IFC=1, 1\r"); //установка программного контроля потоком передачи данных
delay(300);
Serial1.print("ATS0=2\r"); // поднимать трубку после второго звонка
delay(500);
Serial1.print("AT+CMGD=1,4\r"); // Стираем Смс
delay(500);
// настройка шилда
813
для зеленого
greenPin
= 13;
int
для желтого светодиода
yellowPin
= 3;
int
если эта строка сообщение, то переменная примет значение True
currStr
= "";
String
isStringMessage
= false;
boolean
af20e311-815a-4313-ae83-81277007e616
SIM 900 Serial1 v2 test
// Отправляем смс
if ( In == true)
{
Serial1.print("AT + CMGS = \"");
delay(300);
Serial1.print( Phone );
delay(300);
Serial1.println("\"");
delay(300);
Serial1.println( text );
delay(300);
Serial1.println((char)26);
delay(300);
Serial1.println();
delay(300);
}
// Принимаем смс
if (!Serial1.available())
return;
char currSymb = Serial1.read();
if ('\r' == currSymb) {
if (isStringMessage) {
// если текущая строка – сообщение, то…
out = currStr;
isStringMessage = false; }
else {
if (currStr.startsWith("+CMT")) {
// если текущая строка начинается с "+CMT", то следующая сообщение
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
754
Serial1.begin(9600);
delay(3000);
// настройка шилда
Serial1.print("AT+CMGF=1\r"); // устанавливает текстовый режим смс-сообщения
delay(300);
Serial1.print("AT+CLIP=1\r"); // устанавливает программный контроль потоком передачи данных
delay(300);
Serial1.print("AT+CSCS=\"GSM\"\r");
delay(300);
Serial1.println("AT+CNMI=1,2,2,1,0\r"); // Настройка вывода смс в консоль.
delay(500);
Serial1.print("AT+IFC=1, 1\r"); //установка программного контроля потоком передачи данных
delay(300);
Serial1.print("ATS0=2\r"); // поднимать трубку после второго звонка
delay(500);
Serial1.print("AT+CMGD=1,4\r"); // Стираем Смс
delay(500);
// настройка шилда
755
currStr
= "";
String
если эта строка сообщение, то переменная примет значение True
isStringMessage
= false;
boolean
text1
text2
text3
f2dcb62c-36ba-43e9-a876-19b570640a37
7d7b74cf-5c22-43e5-9aa9-be63b7eb8dc8
text4
f83142ba-6044-4479-a24d-2af24eb3d911
8dc3e42d-ca04-4258-a7ec-6fc6426a1bfe
text5
d2fa00a5-3627-4623-9df4-349bbf8ce582
7e75afa8-3398-4753-94f0-06f29a691a0f
text6
86a0d736-b9be-4159-8362-a2a3981e0e8e
5839b677-8b33-49cd-a54c-d33b1665fa34
text7
781f5089-d490-4569-ab92-98e80f51cbd9
7162c89a-e215-4e58-9bf5-4db5b9161900
Call
out_sms
300f1901-b539-4081-8262-df47b88dd60b
m590 mega2560 115200
скорость 115200
RX3 (15) в TX модема
TX3 (14) в RX модема
инфо http://flprog.ru/forum/18-642-2
94
if ( In_sms == true)
{
Serial3.print("AT + CMGS = \"");
delay(300);
Serial3.print( Phone );
delay(300);
Serial3.println("\"");
delay(300);
Serial3.println( text );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text1 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text2 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text3 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text4 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text5 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text6 );
delay(1000);
Serial3.println( "\n" );
delay(300);
Serial3.println( text7 );
delay(1000);
Serial3.println((char)26);
delay(300);
Serial3.println();
delay(300);
}
if (!Serial3.available());
char currSymb = Serial3.read();
if ('\r' == currSymb) {
Call = currStr;
if (isStringMessage) {
out_sms = currStr;
isStringMessage = false; }
else {
if (currStr.startsWith("+CMT")) {
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
1206
Serial3.begin(115200);
delay(20000);
Serial3.println("AT+CMGF=1\r");
delay(200);
Serial3.println("AT+CSCS=\"GSM\"\r");
delay(200);
Serial3.println("AT+CNMI=2,2\r");
delay(200);
Serial3.println("AT+CLIP=1\r");
delay(200);
220
currStr
= "";
String
isStringMessage
= false;
boolean
726d0829-22b4-4a18-ab02-10747e6080ea
84e909e3-5164-4e1f-bf01-5944fef622ee
b669819f-f009-4898-af17-a684f491f9ab
c7beb266-fe66-4df8-8a9a-85cc88f49dfa
1e18c0e3-6ef3-4dfb-803f-7ca7306262e0
text8
d6e7d474-7b13-47dd-9c76-8c5331d9b584
cdfecbcb-d30e-4b2a-a99a-b0901c5e5737
b414533e-70e8-440b-861f-5f82caf80eef
if ( In_sms == true)
{
Serial3.print("AT+CMGS=\"+");
delay(50);
Serial3.print(Phone);
delay(50);
Serial3.println("\"");
delay(50);
Serial3.println();
delay(50);
Serial3.println(text);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text1);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text2);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text3);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text4);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text5);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text6);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text7);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text8);
delay(50);
Serial3.println((char)26);
delay(50);
Serial3.println();
}
if (!Serial3.available());
char currSymb = Serial3.read();
if ('\r' == currSymb) {
Call = currStr;
if (isStringMessage) {
out_sms = currStr;
isStringMessage = false; }
else {
if (currStr.startsWith("+CMT")) {
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
}
1156
Serial3.begin(115200);
delay(3000);
Serial3.println("AT+CMGF=1\r");
delay(50);
Serial3.println("AT+CSCS=\"GSM\"\r");
delay(50);
Serial3.println("AT+CNMI=2,2,0,0,0\r");
delay(50);
Serial3.println("AT+CLIP=1\r");
210
5a439fd2-7f2c-4639-b0e0-ffabbd6ea9c6
sms
78a799b0-71f7-4661-9d8a-d80ade578c5b
2b6a3685-b885-4e3a-9883-9a011aa7c5c3
ce94cb6c-3b56-40eb-bcf2-b1d9c2acf222
if ( In_sms == true)
{
Serial3.print("AT+CMGS=\"");
delay(50);
Serial3.print(Phone);
delay(50);
Serial3.println("\"");
delay(50);
Serial3.println();
delay(50);
Serial3.println(text);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text1);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text2);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text3);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text4);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text5);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text6);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text7);
delay(50);
Serial3.println("\n");
delay(50);
Serial3.println(text8);
delay(50);
Serial3.println((char)26);
delay(50);
Serial3.println();
}
if (!Serial3.available());
char currSymb = Serial3.read();
if ('\r' == currSymb) {
Call = currStr;
if (isStringMessage) {
out_sms = currStr;
isStringMessage = false;
sms =true; }
else {
if (currStr.startsWith("+CMT")) {
isStringMessage = true;
}
}
currStr = "";
} else if ('\n' != currSymb) {
currStr += String(currSymb);
sms = false;
}
1142
delay(2000);
Serial3.begin(115200);
delay(50);
Serial3.println("AT+CMGF=1\r");
delay(50);
Serial3.println("AT+CSCS=\"GSM\"\r");
delay(50);
Serial3.println("AT+CNMI=2,2,0,0,0\r");
delay(50);
Serial3.println("AT+CLIP=1\r");
delay(50);
232
Received_SMS
18039b27-cb01-4ce5-bd77-e8455fb0e496
Получена СМС
Текст СМС
T_Nomer
Номер с которого пришло СМС
Sent_SMS
1174c3e1-c5ae-46ca-bc4e-f32953816209
Отправлена СМС
d535058c-83fc-4da3-ae1a-7c562d9e8eae
ERROR
90a1f2ef-7628-4a3b-9476-873b328f1edf
Ошибка отправка СМС
2575f78c-25fc-401a-9ceb-eade206ea0e7
5534ccac-65c1-4b31-8bb9-483c15f3bd04
скорость 115200
RX3 (15) в TX модема
TX3 (14) в RX модема
инфо http://flprog.ru/forum/18-642-2
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
ERROR :
0- норма;
1- неверный номер отправления;
2 - Ошибка при отрпвлении
3- Нет ответа от модуля при отправки сообщения
302
speed
115200
Скорость порта, см описание
f32f9e34-ce80-45b3-9050-077e33f7d03a
689d6ab0-dd41-41ef-920f-f8dd0336a9f8
DELL_SMS
Отчистка СМС
07cee270-f81f-488c-8574-bd5b26a650b5
b4aada34-d9f0-46b3-81af-c42ebc3b551d
Received_SMS =0;
Sent_SMS =0;
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if ( _trgrt1 && !Triger_)
{
if ( Phone.length() > 4) { Triger_=1; count_=0;}
else { ERROR =1; Triger_=0;}
}
if(Triger_)
{
if (return==1) {Triger_=0; ERROR =0; return=0; Sent_SMS =1;}
else if (return==2){Triger_=0; ERROR =2; return=0;}
if( millis() >=time1) {
time1 =millis() + 100;
switch ( count_ ) {
case 0:
Serial3.print("AT+CMGF=1\r");
break;
case 1:
Serial3.println("AT+CMGS=\"+ Phone +\"");
break;
case 2:
Serial3.println(text);
break;
case 3:
Serial3.println(text1);
break;
case 4:
Serial3.println(text2);
break;
case 5:
Serial3.println(text3);
break;
case 6:
Serial3.println(text4);
break;
case 7:
Serial3.println(text5);
break;
case 8:
Serial3.println(text6);
break;
case 9:
Serial3.println(text7);
break;
case 10:
Serial3.println(text8);
break;
case 11:
Serial3.println((char)26);
break;
case 12:
time1 =time1 + 4900;
break;
default:
Triger_=0;
ERROR =3;
}
count_++;
}
}
while(Serial3.available())
{
ch = Serial3.read();
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(line); line = ""; }
else
line += ch;
}
1364
delay(2000);
Serial3.begin( speed );
delay(50);
Serial3.println("AT+CMGF=1");
delay(50);
Serial3.println("AT+CSCS=\"GSM\"");
delay(50);
Serial3.println("AT+CNMI=2,2,0,0,0");
delay(50);
Serial3.println("AT+CLIP=1");
delay(50);
225
isStringMessage
= false;
boolean
Ответ модема на команду 1-OK 2-ERROR
return
=0;
byte
line
;
String
ch
;
char
time1
=0;
unsigned long
Triger_
= 0;
bool
count_
=0;
int
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
ошибки 0-норма 1- неверный номер
err
=0;
byte
if (isStringMessage)
{
out_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
int t1=line.indexOf("\"+");
T_Nomer=line.substring(t1+1,t1+13);
isStringMessage = true;
}
if (line == F("ERROR")) // ошибка
return=2;
if(line == F("OK")) // всё ок
return=1;
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
589
void
GotLineFromNeoway
const String&
line
Text_sms
Ошибка
Call
1bddc233-0f62-460d-8695-120adebe04e8
Входящий вызов
bae63d59-68bd-4419-acb3-1c4808c819e6
51d90042-7a76-4e4d-aff5-88f543961e95
m590 mega2560_Т2
инфо http://flprog.ru/forum/18-642-2
RX3 (15) в TX модема
TX3 (14) в RX модема
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
Входы
In_sms- отправляет СМС по переднему фронту, если блок не занят предыдущей операцией
Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх
text - данные которые будут отправлены в СМС
Выходы
Received_SMS - импульс в один программный цикл, при получении СМС
Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
Text_sms - Строка содержащая текст СМС
T_Nomer - Строка содержащая номер отправителя СМС
ERROR : Код ошибки, появляется только на 1 програмный цикл
0- норма;
1 - Ошибка в ответ на команду
2 - Нет ответа от модуля при отправки команды
3 - недопустимый номер для отправки СМС
796
16e12fff-4256-4d68-b8a2-5a4d17930a64
Time_wait
2000
Время ожидание ответа модуля, мс
b83e41f8-5061-49f7-8ae0-d3fa683da2b0
1236d93b-73c6-4e26-a38c-fca5f3630a9d
Time_Net
30000
Период проверки связи с сетью, мс
19320255-4a11-446a-8be1-c2e745fb9fb1
03376554-1469-40d2-af28-6c264ae6c7e2
Received_SMS =0; //Сброс статутса СМС Принята
Sent_SMS =0; //Сброс статуса СМС Отправлена
ERROR =0; //Сбром ошибки
while(Serial3.available()) //Получаем данные с модема
{
ch = Serial3.read();
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(line); line = ""; }
else line += ch;
}
//---Отправка СМС--
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if (_trgrt1 ) s_sms=1;
if ( s_sms && !busy) //можно ли отправлять СМС
{
s_sms=0;
if ( Phone.length() > 4) { Triger_=1; busy=1;} //проверка корректности номера
else(ERROR =3;)
}
if(Triger_)
{
if (sms_sent()){ Triger_=0; busy=0; }
}
//Авто проверка связи
if( (Time_Net >0)&&!busy)
{
if((millis()-time_n)> Time_Net){time_n=millis(); busy=1; Net_T=1;}
}
if(Net_T)
{
if (net_status()){ Net_T=0; busy=0; }
}
//Обработка входящего вызова
if (isRing) {busy=1; Call =1;}
if ( Reject_call ) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;};
if(Call) {if (incoming_call()){ Call =0; busy=0; }}
if(Call&&_trgrt2) {AT("ATH");}
1134
delay(2000); //пауза на включение модуля
Serial3.begin( speed );
delay(50);
Serial3.println("AT+CMGF=1");
delay(50);
Serial3.println("AT+CSCS=\"GSM\"");
delay(50);
Serial3.println("AT+CNMI=2,2,0,0,0");
delay(50);
Serial3.println("AT+CLIP=1");
delay(50);
254
isStringMessage
= false;
bool
final
=0;
bool
ожидание ответа от модуля
wait
=0;
bool
Ответ модема на команду 1-OK 2-ERROR
M_return
=0;
byte
line
;
String
Ответ модуля на команду
reply
;
String
ch
;
char
Время посылки команды
time1
=0;
unsigned long
Время последнего опроса связи с сетью.
time_n
=0;
unsigned long
Triger_
= 0;
bool
count_
=0;
int
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
_trgrt2
= 0;
bool
_trgrt2I
= 0;
bool
Net_T
=0;
bool
isRing
=0;
bool
s_sms
=0;
bool
идет запрос, запрет других операций.
busy
=0;
bool
M_return=3;
if (isStringMessage)
{
Text_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
int t1=line.indexOf("\"+");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
isStringMessage = true;
}
if (line == F("RING")) isRing=1; //Всходящий звонок
if (line == F("ERROR")) // ошибка
M_return=2;
if(line == F("OK")) // всё ок
M_return=1;
if(M_return==3)reply=line;
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
bool st=0;
byte ret;
switch ( count_ ) {
case 0:
ret=AT("AT+CMGF=1\r",1);
if(ret==1) count_++;
else if(ret==2) st=1;
break;
case 1:
ret=AT("AT+CMGS=\""+ Phone +"\"\r" + text + (char)26, 2);
if(ret==1) count_++;
else if(ret==2) st=1;
break;
default:
Sent_SMS =1;
st=1;
}
if (st)count_=0;
return st;
315
bool
sms_sent
byte ret=0;
if(wait)
{
switch (M_return) {
case 1:
M_return=0;
ret=1;
break;
case 2:
M_return=0;
ERROR =1;
ret=2;
break;
case 3:
M_return=0;
ret=3;
break;
}
if(millis()>time1){ERROR=2; ret=2;}
}
else
{
time1 =millis() + Time_wait;
wait=1;
if(tip==1) Serial3.print(text);
else if(tip==2) Serial3.println(text);
}
}
return ret;
368
byte
AT
String
text
byte
tip
bool st=0;
byte ret;
switch ( count_ ) {
case 0:
ret=AT("AT+CREG?",2);
if(ret==1) count_++;
else if(ret==2) st=1;
else if(ret==3)
{
if (reply == F("+CREG: 0,1")) Net =1;
else Net =0;
}
break;
case 1:
ret=AT("AT+CSQ", 2);
if(ret==1) count_++;
else if(ret==2) st=1;
else if(ret==3)
{
if (reply.startsWith(F("+CSQ:"))
{
int t1=line.indexOf(":");
if(t1>-1) dBm =( ( (line.substring(t1+1,t1+3) ).toInt())*(2) );
if(dBm>0) dBm=-120; //нет сети
}
break;
default:
st=1;
}
if (st)count_=0;
return st;
544
bool
net_status
bool st=0;
switch (M_return) {
case 1:
M_return=0;
st=1;
break;
case 2:
M_return=0;
ERROR =1;
st=1;
break;
case 3:
M_return=0;
if (reply.startsWith(F("+CLIP:"))
{
int t1=line.indexOf("\"7");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
}
if (reply == F("NO CARRIER")) st=1;
}
if(ret==1) count_++;
else if(ret==2)
else if(ret==3)
{
if (reply == F("+CREG: 0,1")) Net =1;
else Net =0;
}
break;
case 1:
ret=AT("AT+CSQ", 2);
if(ret==1) count_++;
else if(ret==2) st=1;
else if(ret==3)
{
if (reply.startsWith(F("+CSQ:"))
{
int t1=line.indexOf(":");
if(t1>-1) dBm =( ( (line.substring(t1+1,t1+3) ).toInt())*(2) );
if(dBm>0) dBm=-120; //нет сети
}
break;
default:
st=1;
}
return st;
if(millis()>time1){ERROR=2; ret=2;}
}
else
884
bool
incoming_call
4429c943-1cc9-4540-bda4-c520defcda3d
160@160 corner: 180@180
Get_Balance
160@190
180@190
933e1a73-f90e-4922-a024-e7f8ae08cff2
Запрос баланса
0e66f15d-c493-46f9-9441-ebf06db3217a
Error_Code
bc84d102-ca7a-4b18-9805-5166f55a9107
Number_calls
bb5716b0-2334-4309-9215-72ead220c33b
Номер текущего гудка
213e77f7-84ed-4fe6-899e-b01d1d0eb571
202aced0-0626-4389-b3d2-41e2fc6408a1
инфо http://flprog.ru/forum/18-642-2
RX3 (15) в TX модема
TX3 (14) в RX модема
Параметры
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
Time_wait - время ожидание ответа (в мс), в случаи его превышения Error_Code=2
Time_Net - Период опроса модуля на связь с сетью, мс 0-опрос отключен.
Входы
In_sms- отправляет СМС по переднему фронту, если блок не занят предыдущей операцией
Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх
text - данные которые будут отправлены в СМС
Reject_call - по переднему фронту сбрасывает входящий вызов (отбой)
Выходы
Net - регистрация :1 - модуль зарегистрирован в домашней сети, 0-нет
dBm - уровень сигнал (-120 уровень не известен)
Received_SMS - импульс в один программный цикл, при получении СМС
Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
Text_sms - Строка содержащая текст СМС
T_Nomer - Строка содержащая номер отправителя СМС (входящего вызова, при входящем вызове номер без +)
Call - пока идет входящий вызов 1 на выходе
Error_Code : Код ошибки, появляется только на 1 программный цикл
0- норма;
1 - Ошибка в ответ на команду
2 - Нет ответа от модуля при отправки команды
3 - недопустимый номер для отправки СМС
1245
69fc39f5-2c9b-4937-8e5b-fdf42810d8a1
20000
89378369-f9fc-4a14-816f-f17193042731
60000
delay(5000);//тест удалить
Received_SMS =0; //Сброс статутса СМС Принята
Sent_SMS =0; //Сброс статуса СМС Отправлена
Error_Code =0; //Сбром ошибки
reply=""; //Сброс содержимого прошлого ответа модуля
while(Serial3.available()) //Получаем данные с модема
{
ch = Serial3.read();
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(); line = ""; }
else line += ch;
}
if (Call&&(team_room!=1) )
{
team_room==1;
count_=0; wait=0; //Сброс состояний обработки других функций
Number_calls=0; //сброс числа гудков
}
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; //импульс на отправку смс
if (_trgrt1 ) s_sms=1;
if ( s_sms && (team_room==0) ) // начинать ли оптраву смс
{
s_sms=0;
if ( Phone.length() > 4) {team_room=2;} //проверка корректности номера
else Error_Code =3;
}
if ((Time_Net >0)&&(team_room==0)) //проверять ли статутс сети
{
if((millis()-time_n)> Time_Net){time_n=millis(); team_room=3;}
}
if ( Reject_call ) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; //импульс на сброс вызова
switch ( team_room ) {
case 1:
if(_trgrt2) Call_T=1;
if(Call_T&&AT_Command("ATH0",2)){Call_T=0; final =1; Call=0; }
break;
case 2:
if (sms_sent()){ final =1; } // отправка сообщения
break;
case 3:
if (net_status()){ final =1;}// проверка связи с сетью
break;
if (final)team_room=0; //должно быть последним
1482
delay(2000); //пауза на включение модуля
Serial3.begin( speed );
delay(50);
Serial3.println("AT+CMGF=1");
delay(50);
Serial3.println("AT+CSCS=\"GSM\"");
delay(50);
Serial3.println("AT+CNMI=2,2,0,0,0");
delay(50);
Serial3.println("AT+CLIP=1");
delay(50);
Serial3.println("ATE0");
delay(50);
290
isStringMessage
= false;
bool
final
=0;
bool
ожидание ответа от модуля
wait
=0;
bool
Ответ модема на команду 1-OK 2-ERROR
M_return
=0;
byte
Номер исполняемой команды
team_room
=0;
byte
line
;
String
Ответ модуля на команду
reply
;
String
ch
;
char
Время посылки команды
time1
=0;
unsigned long
Время последнего опроса связи с сетью.
time_n
=0;
unsigned long
Triger_
= 0;
bool
count_
=0;
int
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
_trgrt2
= 0;
bool
_trgrt2I
= 0;
bool
Call_T
=0;
bool
Net_T
=0;
bool
isRing
=0;
bool
s_sms
=0;
bool
идет запрос, запрет других операций.
busy
=0;
bool
Serial.println(line); //!!!!!!! Убрать
//Обработка СМС
if (isStringMessage)
{
Text_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
int t1=line.indexOf("\"+");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
isStringMessage = true;
}
//______
// Обработка входящих вызовов
if (line == F("RING")){ Call =1; Number_calls ++;}//Всходящий звонок
if (Call==1)
{
if (line.startsWith(F("+CLIP"))) //Определение номера звонящего
{
int t1=line.indexOf("\"7");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
}
if (line == F("NO CARRIER")) { Call=0;}
}
//____
reply=line;
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
1086
void
GotLineFromNeoway
bool st=0;
byte ret=0;
switch ( count_ ) {
case 0:
ret=AT_Command("AT+CMGF=1\r",1);
if(ret==1) count_++;
else if(ret==2) st=1;
break;
case 1:
ret=AT_Command("AT+CMGS=\""+ Phone +"\"\r" + text + (char)26, 2);
if(ret==1) {Sent_SMS =1; st=1;}
else if(ret==2) st=1;
break;
}
if (st){count_=0; }
return st;
317
// tip 1- без \r и \n
// tip 2- с \r и \n
byte ret=0;
if(wait)
{
if(reply == F("OK"))
{ ret=1; wait=0; }
else if(reply == F("ERROR"))
{ Error_Code =1; ret=2; wait=0; }
if(millis()>time1)
{Error_Code=2; ret=2; wait=0;}
}
else
{
time1 =millis() + Time_wait;
wait=1;
if(tip==1) Serial3.print(text_com);
else if(tip==2) Serial3.println(text_com);
}
return ret;
380
byte
AT_Command
String
text_com
byte
tip
bool st=0;
byte ret=0;
switch ( count_ ) {
case 0:
ret=AT_Command("AT+CREG?",2);
if(ret==1) count_++;
else if(ret==2) st=1;
else if(ret==3)
{
if (reply == F("+CREG: 0,1")) Net =1;
else Net =0;
reply=""; wait=0;
}
break;
case 1:
ret=AT_Command("AT+CSQ", 2);
if(ret==1) count_++;
else if(ret==2) st=1;
else if(ret==3)
{
if (reply.startsWith(F("+CSQ:")))
{
int t1=reply.indexOf(": ");
if(t1>-1) dBm =(( ( (reply.substring(t1+2,t1+4) ).toInt())*(2) )-(113));
if(dBm>0) dBm=-120; //нет сети
reply=""; wait=0;
}
}
break;
case 2:
st=1;
break;
}
if (st)count_=0;
return st;
642
// tip 1- без \r и \n
// tip 2- с \r и \n
byte ret=0;
if(wait)
{
if(reply.startsWith(response_com))
{ret=3;}
else if(reply == F("ERROR"))
{ Error_Code =1; ret=2; wait=0; }
else if(reply == F("OK"))
{ ret=1; wait=0; }
if(millis()>time1)
{Error_Code=2; ret=2; wait=0;}
}
else
{
time1 =millis() + Time_wait;
wait=1;
if(tip==1) Serial3.print(text_com);
else if(tip==2) Serial3.println(text_com);
}
return ret;
434
byte
AT_Command
String
text_com
byte
tip
String
response_com
Balance
0a59f7bd-e80f-4fab-863f-b25df021e23a
Баланс на Sim
bb2c1ffd-ef1d-4a59-90f6-ca709fa9e70a
f2a4bf19-ff62-4760-8e07-c9e05d8fc91c
инфо http://flprog.ru/forum/18-642-2
RX3 (15) в TX модема
TX3 (14) в RX модема
Параметры
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
Time_wait - время ожидание ответа (в мс), в случаи его превышения Error_Code=2
Time_Net - Период опроса модуля на связь с сетью, мс 0-опрос отключен.
Входы
In_sms- отправляет СМС по переднему фронту, если блок не занят предыдущей операцией
Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх
text - данные которые будут отправлены в СМС
Reject_call - по переднему фронту сбрасывает входящий вызов (отбой)
Get_Balance - по переднему фронту отправляется запрос на балланс
Выходы
Net - регистрация :1 - модуль зарегистрирован в домашней сети, 0-нет
dBm - уровень сигнал (-120 уровень не известен)
Received_SMS - импульс в один программный цикл, при получении СМС
Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
Text_sms - Строка содержащая текст СМС
T_Nomer - Строка содержащая номер отправителя СМС (входящего вызова, при входящем вызове номер без +)
Call - пока идет входящий вызов 1 на выходе
Balance - остаток средств м
Error_Code : Код ошибки, появляется только на 1 программный цикл
0- норма;
1 - Ошибка в ответ на команду
2 - Нет ответа от модуля при отправки команды
3 - Неверный ответ
10 - недопустимый номер для отправки СМС
1360
delay(500);//Тест удалить
Received_SMS =0; //Сброс статутса СМС Принята
Sent_SMS =0; //Сброс статуса СМС Отправлена
Error_Code =0; //Сбром ошибки
reply=""; //Сброс содержимого прошлого ответа модуля
while(Serial3.available()) //Получаем данные с модема
{
ch = Serial3.read();
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(); line = ""; }
else line += ch;
}
if (Call&&(team_room!=1) )
{
team_room=1;
count_=0; //Сброс состояний обработки других функций
Number_calls=0; //сброс числа гудков
}
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; //импульс на отправку смс
if (_trgrt1 ) s_sms=1;
if ( s_sms && (team_room==0) ) // начинать ли отправу смс
{
s_sms=0;
if ( Phone.length() > 4) {team_room=2;} //проверка корректности номера
else Error_Code =10;
}
if ((Time_Net >0)&&(team_room==0)) //проверять ли статутс сети
{
if((millis()-time_n)> Time_Net){time_n=millis(); team_room=3;}
}
if ( Reject_call ) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; //импульс на сброс вызова
//Запрос баланса
if ( Get_Balance ) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
if (_trgrt3 ) Bal_T=1;
if ( Bal_T && (team_room==0) ) // начинать запрос баланса
{Bal_T=0; team_room=4;}
switch ( team_room ) {
case 1:
if(_trgrt2) {Call_T=1; AT_Command("ATH0",2);}
if(Call_T&& (AT_Answer("")==1) ){Call=0; }
if (!Call) {Call_T=0; final =1;}
break;
case 2:
if (sms_sent()){ final =1; } // отправка сообщения
break;
case 3:
if (net_status()){ final =1;}// проверка связи с сетью
break;
case 4:
if ( balance_S() ){ final =1;}// запрос баланса
break;
}
if (final){team_room=0; final=0;} //должно быть последним
1837
Buffer
[5] ;
String
index_buffer
=0;
byte
isStringMessage
= false;
bool
final
=0;
bool
Номер исполняемой команды
team_room
=0;
byte
line
;
String
Ответ модуля на команду
reply
;
String
ch
;
char
Время посылки команды
time1
=0;
unsigned long
Время последнего опроса связи с сетью.
time_n
=0;
unsigned long
Triger_
= 0;
bool
count_
=0;
int
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
_trgrt2
= 0;
bool
_trgrt2I
= 0;
bool
_trgrt3
= 0;
bool
_trgrt3I
= 0;
bool
Call_T
=0;
bool
Net_T
=0;
bool
s_sms
=0;
bool
Bal_T
=0;
bool
bool isRing=0;
bool busy=0; //идет запрос, запрет других операций.
bool wait=0; //ожидание ответа от модуля
byte M_return=0; // Ответ модема на команду 1-OK 2-ERROR
if (line.length()>0)
{
Buffer[index_buffer]=line;
if(index_buffer<3) index_buffer++;
}
//Обработка входящих СМС
if (isStringMessage)
{
Text_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
int t1=line.indexOf("\"+");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
isStringMessage = true;
}
//______
// Обработка входящих вызовов
if (line == F("RING")){ Call =1; Number_calls ++;}//Всходящий звонок
if (Call==1)
{
if (line.startsWith(F("+CLIP"))) //Определение номера звонящего
{
int t1=line.indexOf("\"7");
int t2=line.indexOf("\"",(t1+1));
if((t1>0)&&(t2>0)) T_Nomer=line.substring(t1+1,t2);
else T_Nomer="";
}
if (line == F("NO CARRIER")) { Call=0; }
}
//____
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
1135
// tip 1- без \r и \n
// tip 2- с \r и \n
time1 =millis() + Time_wait;
if(tip==1) Serial3.print(text_com);
else if(tip==2) Serial3.println(text_com);
154
void
AT_Command
String
text_com
byte
tip
byte ret=0;
bool ok_=0;
bool ok_2=0;
if (index_buffer>0)
{
for (int i =(index_buffer-1); i >=0 ; i--)
{
if(Buffer[i] == F("ERROR")){ret=2; Error_Code =1; break;}
if(Buffer[i] == F("OK")){ ok_=1; continue; }
if (response_com.length()>0)
{ if(Buffer[i].startsWith(response_com)){ok_2=1; reply=Buffer[i];} }
}
}
if(ok_)ret=1;
if (response_com.length()>0 && !ok_2 ) {ret=2; Error_Code =3;}
if(millis()>time1)
{Error_Code=2; ret=2; }
return ret;
463
byte
AT_Answer
String
response_com
bool st=0;
byte ret=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CREG?",2);
count_++;
break;
case 1:
ret=AT_Answer("+CREG");
if(ret==1)
{
count_++;
if (reply == F("+CREG: 0,1"))Net =1;
else Net =0;
}
else if(ret==2) st=1;
break;
case 2:
AT_Command("AT+CSQ" ,2 ) ;
count_++;
break;
case 3:
ret=AT_Answer("+CSQ");
if(ret==1)
{
st=1;
int t1=reply.indexOf(": ");
if(t1>-1) dBm =(( ( (reply.substring(t1+2,t1+4) ).toInt())*(2) )-(113));
if( dBmt >0) dBm =-120; //нет сети
}
else if(ret==2) st=1;
break;
}
if (st)count_=0;
return st;
592
bool
net_status
bool st=0;
byte ret=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CMGF=1",2);
count_++;
break;
case 1:
ret=AT_Answer("");
if(ret==1) {count_++;}
else if(ret==2) st=1;
break;
case 2:
AT_Command("AT+CMGS=\""+ Phone +"\"\r",1 );
AT_Command( text+(char)26 ,2 );
count_++;
break;
case 3:
ret=AT_Answer("");
if(ret==1) {Sent_SMS =1; st=1;}
else if(ret==2) st=1;
break;
}
if (st){count_=0; }
return st;
424
bool
sms_sent
bool st=0;
byte ret=0;
switch ( count_ ) {
case 0:
AT_Command("ATD#100#",2 ) ;
count_++;
break;
case 1:
ret=AT_Answer("+CUSD");
if(ret==1)
{
st=1;
int t1=reply.indexOf(":",reply.indexOf("\""));
iif(t1>-1)nt t2=reply.indexOf(",",t1);
if(t1>-1&&t2>-1) Balance = (reply.substring(t2+1,t3+3)).toFloat();
}
else if(ret==2) st=1;
break;
}
if (st)count_=0;
return st;
400
bool
balance_S
160@180 corner: 180@200
18.0d
327.0d@110
347.0d@110
327.0d@100 corner: 347.0d@120
23.0d
327.0d@130
347.0d@130
327.0d@120 corner: 347.0d@140
En
490@250
510@250
780@250
800@250 corner: 840@310
780@250 corner: 860@310
808.5d@263.5d
490@140
510@140 corner: 590@200
490@140 corner: 610@200
515.0d@154.0d
46.0d
327.0d@190
347.0d@190
420@40
440@40 corner: 520@100
420@40 corner: 540@100
445.0d@54.0d
420@60 corner: 440@80
SubStr
stop1628
420@90
440@90
375.0d@94.5d
420@80 corner: 440@100
550@60
570@60 corner: 610@120
550@60 corner: 630@120
578.5d@73.5d
550@80 corner: 570@100
550@110
570@110
550@100 corner: 570@120
880@210
900@210 corner: 940@270
880@210 corner: 960@270
911.5d@223.5d
880@240
Q
9.0d
840@300
860@300
880@80
900@80 corner: 960@180
880@80 corner: 980@180
919.0d@93.5d
C
880@110
900@110
760@120
780@120 corner: 820@160
760@120 corner: 840@160
786.5d@134.5d
660@120
680@120 corner: 740@160
660@120 corner: 760@160
698.5d@133.5d
EN
660@150
680@150
640.0d@153.5d
660@140 corner: 680@160
740@140 corner: 760@160
760@150
10
Q
9.0d
740@150
760@150 corner: 760@150
I
760@150
780@150
840@150
9.0d
820@150
840@130 corner: 840@150
SP
880@130
900@130
750@180
770@180 corner: 830@220
750@180 corner: 850@220
773.5d@193.5d
850@210
asss
0
V
10.0d
830@210
850@150 corner: 850@210
P
880@150
900@150
880@170
990@160
1010@160 corner: 1035.0d@180
990@160 corner: 1055.0d@180
1014@173.5d
990@170
1035.0d@170
1055.0d@170
asd
9
17.0d
7.0d
1010@170
1040@120
1060@120 corner: 1140@160
1040@120 corner: 1160@160
1061.0d@134.5d
1040@150
1210@120
1230@120 corner: 1290@180
1210@120 corner: 1310@180
1233.5d@133.5d
1210@150
1150@160
1170@160 corner: 1195.0d@180
1150@160 corner: 1215.0d@180
1174@173.5d
1150@170
1215.0d@170
17.0d
7.0d
0.0d
1195.0d@170
1210@170 corner: 1210@170
V
1210@170
1230@170
EN
1230@150
1160@150 corner: 1160@150
Q
9.0d
1140@150
1160@150
Value
1060@150
980@150 corner: 980@170
V
10.0d
960@170
980@170
up
R
900@170
860@170 corner: 860@300
880@260
900@260
970@250
990@250 corner: 1029.0d@270
970@250 corner: 1049.0d@270
994@263.5d
970@260
1029.0d@260
1049.0d@260
31.0d
7.0d
990@260
960@260 corner: 960@260
Q
9.0d
940@260
960@260
900@240
630@110 corner: 630@240
9.0d
610@110
630@110
610@100 corner: 630@120
550@90
570@90
540@90 corner: 540@90
Contain
38.0d
520@90
540@90
520@80 corner: 540@100
420@70
startToEnd
Str
440@70
347.0d@70 corner: 347.0d@190
490@170
510@170
490@160 corner: 510@180
run1628
490@190
510@190
450.0d@193.5d
490@180 corner: 510@200
590@180 corner: 610@200
610@190
38.0d
590@190
610@190 corner: 610@280
780@280
800@280
780@300
800@300
357.0d@110 corner: 357.0d@300
74.0d
327.0d@150
347.0d@150
327.0d@140 corner: 347.0d@160
52.0d
327.0d@170
347.0d@170
327.0d@160 corner: 347.0d@180
327.0d@180 corner: 347.0d@200
327.0d@200 corner: 347.0d@220
54.0d
327.0d@230
347.0d@230
327.0d@220 corner: 347.0d@240
20.0d
327.0d@250
347.0d@250
327.0d@240 corner: 347.0d@260
66.0d
327.0d@270
347.0d@270
327.0d@260 corner: 347.0d@280
40.0d
327.0d@290
347.0d@290
327.0d@280 corner: 347.0d@300
347.0d@210
m590 UNO
326e78b4-53a1-4bce-8129-c975eb40688d
m590 UNO
инфо http://flprog.ru/forum/18-642-2
RX3 (15) в TX модема
TX3 (14) в RX модема
Параметры
speed- скорость порта 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 бит/сек
Time_wait - время ожидание ответа (в мс), в случаи его превышения Error_Code=2
Time_Net - Период опроса модуля на связь с сетью, мс 0-опрос отключен.
Входы
In_sms- отправляет СМС по переднему фронту, если блок не занят предыдущей операцией
Phone - номер телефона на который будет отправляется СМС в формате +7хххххххххх
text - данные которые будут отправлены в СМС
Reject_call - по переднему фронту сбрасывает входящий вызов (отбой)
Get_Balance - по переднему фронту отправляется запрос на балланс номера
Выходы
Net - регистрация :1 - модуль зарегистрирован в домашней сети, 0-нет
dBm - уровень сигнал (-120 уровень не известен)
Received_SMS - импульс в один программный цикл, при получении СМС
Sent_SMS - импульс в один программный цикл, при удачной оправки СМС
Text_sms - Строка содержащая текст СМС
T_Nomer - Строка содержащая номер отправителя СМС (входящего вызова, при входящем вызове номер без +)
Call - пока идет входящий вызов 1 на выходе
Number_calls - номер текущего гудка, сбрасывается поле заервшение текущего и постепления нового звонка.
Balance - остаток средств на номере
Error_Code : Код ошибки, появляется только на 1 программный цикл
0- норма;
1 - Ошибка в ответ на команду
2 - Нет ответа от модуля при отправки команды
3 - Неверный ответ
4 - модуль не готов
5 - нет регистрации в сети
10 - недопустимый номер для отправки СМС
1526
19200
RX
6e1ddb20-145c-4793-8f48-28dbe1d077f6
6
ec7273f1-2a4b-4077-92f4-8703a9ea89ad
TX
11
a3f1a990-dbdd-47e8-8a23-4d9ff3a9f444
7
fcb1a786-507a-4648-ba31-b4c8caddcc70
return_AT_2=0;
Received_SMS =0; //Сброс статутса СМС Принята
Sent_SMS =0; //Сброс статуса СМС Отправлена
Error_Code =0; //Сбром ошибки
reply=""; //Сброс содержимого прошлого ответа модуля
T_millis =millis();
if (Serial100.available()||wait_Serial){
if (!wait_Serial){wait_Serial=1; time_Serial=T_millis+150;}
if (T_millis >time_Serial)//ожидаем полного получения команды
{wait_Serial=0;
while(Serial100.available()) //Получаем данные с модема
{ch = Serial100.read();
if(ch == '\r') continue;
if(ch == '\n') { GotLineFromNeoway(); line = ""; }
else line += ch;}
}
}
if (wait)//ожиание ответа на команду
{
if(line.length()>0){if(line ==response_com) wait=0; response_com="";}
if(T_millis>time1) {Error_Code=2; err=1;}}
if(err){err=0; wait=0; count_=0; team_room=0; response_com="";}
if (Call&&(team_room!=1) )
{
team_room=1;
count_=0; //Сброс состояний обработки других функций
Number_calls=1; //сброс числа гудков
}
if ( In_sms ) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; //импульс на отправку смс
if (_trgrt1 ) s_sms=1;
if ( s_sms && (team_room==0) ) // начинать ли отправу смс
{
s_sms=0;
if ( Phone.length() > 4) {team_room=2;} //проверка корректности номера
else Error_Code =10;
}
if ((Time_Net >0)&&(team_room==0)) //проверять ли статутс сети
{
if((T_millis-time_n)> Time_Net){time_n=T_millis; team_room=3;}
}
if ( Reject_call ) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; //импульс на сброс вызова
//Запрос баланса
if ( Get_Balance ) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
if (_trgrt3 ) Bal_T=1;
if ( Bal_T && (team_room==0) ) // начинать запрос баланса
{Bal_T=0; team_room=4;}
switch ( team_room ) {
case 1:
if(_trgrt2) {Call_T=1; AT_Command("ATH0",2);}
if(Call_T&& return_AT_2 ){Call=0; count_=0; }
if (!Call) {Call_T=0; final =1; T_Nomer ="";}
break;
case 2:
if (!wait){ if (sms_sent()){ final =1; }} // отправка сообщения
break;
case 3:
if (!wait){if (net_status()){ final =1;}}// проверка связи с сетью
break;
case 4:
if (!wait){if ( balance_S() ){ final =1;}}// запрос баланса
break;
}
if (final){team_room=0; final=0;} //должно быть последним
2318
delay(2000); //пауза на включение модуля
Serial100.begin( speed );
delay(50);
Serial100.println("AT+CMGF=1");
delay(50);
Serial100.println("AT+CSCS=\"GSM\"");
delay(50);
Serial100.println("AT+CNMI=2,2,0,0,0");
delay(50);
Serial100.println("AT+CLIP=1");
delay(50);
Serial100.println("ATE0");
delay(50);
#include
<SoftwareSerial.h>
Serial100
( RX , TX );
SoftwareSerial
ttttt
=1;
bool
isStringMessage
= false;
bool
final
=0;
bool
wait
=0;
bool
err
=0;
bool
return_AT_2
=0;
bool
_trgrt1
= 0;
bool
_trgrt1I
= 0;
bool
_trgrt2
= 0;
bool
_trgrt2I
= 0;
bool
_trgrt3
= 0;
bool
_trgrt3I
= 0;
bool
Call_T
=0;
bool
Net_T
=0;
bool
s_sms
=0;
bool
Bal_T
=0;
bool
Triger_
= 0;
bool
wait_Serial
=0;
bool
ch
;
char
Номер исполняемой команды
team_room
=0;
byte
count_
=0;
int
Время посылки команды
time1
=0;
unsigned long
Время посылки команды
T_millis
=0;
unsigned long
Время ожидания приема команды
time_Serial
=0;
unsigned long
Время последнего опроса связи с сетью.
time_n
=0;
unsigned long
line
;
String
Ответ модуля на команду
reply
;
String
ожидаемый ответ
response_com
="";
String
if (line.length()>0)
{
if(line == F("ERROR")){ Error_Code =1; err=1; }
else if(line == F("OK")){ return_AT_2=1; wait=0; response_com=""; }
else if (response_com.length()>0){
if(line.startsWith(response_com)){reply=line;}
else {Error_Code =3; err=1;} }
//Обработка входящих СМС
if (isStringMessage)
{
Text_sms = line; //выводим текст сообщения
Received_SMS =true; // Импульс приход сообщения
isStringMessage = false;
}
if (line.startsWith(F("+CMT"))) // пришло СМС
{
//Получение номер телефона отправителя
T_Nomer = substring_commas(line) ;
isStringMessage = true;
}
//______
// Обработка входящих вызовов
if (Call)
{
if (line.startsWith(F("+CLIP"))) //Определение номера звонящего
{
T_Nomer = substring_commas(line) ;
}
if (line == F("NO CARRIER")) { Call=0; }
}
if (line == F("RING")){ Call=1; Number_calls ++; wait=0;}//Всходящий звонок
//____
}
// Получили строку ответа от Neoway. Любые ответы приходят в виде
// либо одной, либо нескольких строк, так что единица, которой мы должны
// оперировать - именно строка
// F("") -Хранить строку в Флеш памяти
1128
// tip 1- без \r и \n
// tip 2- с \r и \n
wait=1;
count_++;
time1 =T_millis + Time_wait;
if(tip==1) Serial100.print(text_com);
else if(tip==2){ Serial100.println(text_com); }
else if(tip==3){
Serial100.print(text_com);
Serial100.println((char)26);
}
260
bool st=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CREG?",2);
response_com=F("+CREG");
break;
case 1:
if(return_AT_2)
{if (reply == F("+CREG: 0,1"))Net =1;
else Net =0;
count_++;}
break;
case 2:
AT_Command("AT+CSQ" ,2 ) ;
response_com=F("+CSQ");
break;
case 3:
if(return_AT_2)
{
int t1=reply.indexOf(": ");
if(t1>-1) dBm =(( ( (reply.substring(t1+2,t1+4) ).toInt())*(2) )-(113));
if( dBm >0) dBm =-120; //нет сети
count_=0;
st=1;
}
break;
}
return st;
506
bool st=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CMGF=1",2);
break;
case 1:
AT_Command("AT+CMGS=\""+ Phone +"\"\r",1 );
response_com=F("> ");
break;
case 2:
AT_Command( text ,3 );
break;
case 3:
count_=0;
st=1;
Sent_SMS =1;
break;
}
return st;
268
bool st=0;
switch ( count_ ) {
case 0:
AT_Command("ATD#100#",2 ) ;
response_com=F("+CUSD");
break;
case 1:
if(return_AT_2)
{
Balance = substring_commas(reply) ;
count_=0;
st=1;
}
break;
}
return st;
String test_res;
int t1=text_analyze.indexOf("\"");
int t2=text_analyze.indexOf("\"",(t1+1));
if((t1>-1)&&(t2>-1)) test_res=text_analyze.substring(t1+1,t2);
else test_res="";
return test_res;
192
String
substring_commas
String
text_analyze
bool st=0;
switch ( count_ ) {
case 0:
AT_Command("AT+CPAS",2);
response_com=F("+CPAS");
break;
case 1:
if(return_AT_2)
{
if (reply == F("+CPAS: 0"))count_++;
else {Error_Code =4; count_=0; team_room=0;}
}
break;
case 2:
AT_Command("AT+CREG?",2);
response_com=F("+CREG");
break;
case 3:
if(return_AT_2)
{
if (reply == F("+CREG: 0,1")){Net =1; count_++;}
else {Error_Code =5; Net =0; count_=0; team_room=0;}
}
break;
case 4:
AT_Command("ATE0" ,2 ) ;
break;
case 5:
AT_Command("AT+CLIP=1" ,2 ) ;
break;
case 6:
AT_Command("AT+CMGF=1" ,2 ) ;
count_++;
break;
case 7:
AT_Command("AT+CSCS=\"GSM\"" ,2 ) ;
break;
case 8:
AT_Command("AT+CNMI=2,2,0,0,0" ,2 ) ;
count_++;
break;
case 9:
count_=0;
st=1;
break;
}
return st;
782
bool
setup_comand
147.0d
46.0d
327.0d@210
347.0d@210 corner: 347.0d@230
490@230
510@230
490@220 corner: 510@240
490@240 corner: 510@260
32.0d
9.0d
1060@180
1080@180 corner: 1140@240
1060@180 corner: 1160@240
1091.5d@194.0d
990@200
1010@200 corner: 1035.0d@220
990@200 corner: 1055.0d@220
1014@213.5d
990@210
1055.0d@210
17.0d
7.0d
0.0d
1035.0d@210
1055.0d@210 corner: 1055.0d@210
I1
1060@210
1080@210
I2
1060@230
1080@230
1052.0d@233.5d
1170@220
1190@220 corner: 1222.0d@240
1170@220 corner: 1242.0d@240
1194@233.5d
1170@230
rele1
24.0d
7.0d
1190@230
1160@230 corner: 1160@230
Q
9.0d
1140@230
1160@230
==
(0 to: 400)
2
3
3
4
4
rele2
999
stop
stop
run
5
run
998
11
111
8
eppreae
Arduino Nano(ATmega328)
12
13
14
15
16
17
18
19
20
21
Общие сведения
Платформа Nano, построенная на микроконтроллере ATmega328 (Arduino Nano 3.0) , имеет небольшие размеры и может использоваться в лабораторных работах. Она имеет схожую с Arduino Duemilanove функциональность, однако отличается сборкой. Отличие заключается в отсутствии силового разъема постоянного тока и работе через кабель Mini-B USB. Nano разработана и продается компанией Gravitech.
Краткие характеристики
Микроконтроллер Atmel
ATmega328
Рабочее напряжение (логическая уровень) 5 В
Входное напряжение (рекомендуемое) 7-12 В
Входное напряжение (предельное) 6-20 В
Цифровые Входы/Выходы 14 (6 из которых
могут
использоваться
как выходы
ШИМ)
Аналоговые входы 8
Постоянный ток через вход/выход 40 мА
Флеш-память 32 Кб
при этом 2 Кб
используются
для загрузчика
ОЗУ 2 Кб
EEPROM 1 Кб
Тактовая частота 16 МГц
Размеры 1.85 см x 4.2 см
Питание:
Arduino Nano может получать питание через подключение Mini-B USB, или от нерегулируемого 6-20 В (вывод 30), или регулируемого 5 В (вывод 27), внешнего источника питания. Автоматически выбирается источник с самым высоким напряжением.
Микросхема FTDI FT232RL получает питание, только если сама платформа запитана от USB. Таким образом при работе от внешнего источника (не USB), будет отсутствовать напряжение 3.3 В, генерируемое микросхемой FTDI, при этом светодиоды RX и TX мигаю только при наличие сигнала высокого уровня на выводах 0 и 1.
Память
Микроконтроллер имеет 32 кБ (при этом 2 кБ используется для хранения загрузчика). а ATmega328 имеет 2 кБ ОЗУ и 1 Кб EEPROM.
Входы и Выходы
Каждый из 14 цифровых выводов Nano, может настраиваться как вход или выход. Выводы работают при напряжении 5 В. Каждый вывод имеет нагрузочный резистор (стандартно отключен) 20-50 кОм и может пропускать до 40 мА.
Некоторые выводы имеют особые функции:
Последовательная шина: 0 (RX) и 1 (TX). Выводы используются для получения (RX) и передачи (TX) данных TTL. Данные выводы подключены к соответствующим выводам микросхемы последовательной шины FTDI USB-to-TTL.
Внешнее прерывание: 2 и 3. Данные выводы могут быть сконфигурированы на вызов прерывания либо на младшем значении, либо на переднем или заднем фронте, или при изменении значения.
ШИМ: 3, 5, 6, 9, 10, и 11. Любой из выводов обеспечивает ШИМ с разрешением 8 бит.
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Посредством данных выводов осуществляется связь SPI, которая, хотя и поддерживается аппаратной частью, не включена в язык Arduino.
LED: 13. Встроенный светодиод, подключенный к цифровому выводу 13. Если значение на выводе имеет высокий потенциал, то светодиод горит.
На платформе Nano установлены 8 аналоговых входов, каждый разрешением 10 бит (т.е. может принимать 1024 различных значения). Стандартно выводы имеют диапазон измерения до 5 В.
Некоторые выводы имеют дополнительные функции:
I2C: 4 (SDA) и 5 (SCL). Посредством выводов осуществляется связь I2C (TWI).
Дополнительная пара выводов платформы:
AREF. Опорное напряжение для аналоговых входов.
Reset. Низкий уровень сигнала на выводе перезагружает микроконтроллер. Обычно применяется для подключения кнопки перезагрузки на плате расширения, закрывающей доступ к кнопке на самой плате Arduino.
Связь
На платформе Arduino Nano установлено несколько устройств для осуществления связи с компьютером, другими устройствами Arduino или микроконтроллерами. Поддерживается последовательный интерфейс UART TTL (5 В), осуществляемый выводами 0 (RX) и 1 (TX). Установленная на плате микросхема FTDI FT232RL направляет данный интерфейс через USB, а драйверы FTDI (включены в программу Arduino) предоставляют виртуальный COM порт программе на компьютере. Мониторинг последовательной шины (Serial Monitor) программы Arduino позволяет посылать и получать текстовые данные при подключении к платформе. Светодиоды RX и TX на платформе будут мигать при передаче данных через микросхему FTDI или USB подключение (но не при использовании последовательной передачи через выводы 0 и 1).
Так же поддерживается интерфейсы I2C (TWI) и SPI.
Программирование
Микроконтроллер поставляется с записанным загрузчиком, облегчающим запись новых программ без использования внешних программаторов. Связь осуществляется оригинальным протоколом STK500.
Имеется возможность не использовать загрузчик и запрограммировать микроконтроллер через выводы блока ICSP (внутрисхемное программирование).
Nano разработана таким образом, чтобы перед записью нового кода перезагрузка осуществлялась самой программой, а не нажатием кнопки на платформе. Одна из линий FT232RL, управляющих потоком данных (DTR), подключена к выводу перезагрузки микроконтроллера через конденсатор 100 нФ. Активация данной линии, т.е. подача сигнала низкого уровня, перезагружает микроконтроллер. Программа Arduino, используя данную функцию, загружает код одним нажатием кнопки Upload в самой среде программирования. Подача сигнала низкого уровня по линии DTR скоординирована с началом записи кода, что сокращает таймаут загрузчика.
Функция имеет еще одно применение. Перезагрузка Nano происходит каждый раз при подключении к программе Arduino на компьютере с ОС Mac X или Linux (через USB). Следующие полсекунды после перезагрузки работает загрузчик. Во время программирования происходит задержка нескольких первых байтов кода во избежание получения платформой некорректных данных (всех, кроме кода новой программы). Если производится разовая отладка скетча, записанного в платформу, или ввод каких-либо других данных при первом запуске, необходимо убедиться, что программа на компьютере ожидает в течение секунды перед передачей данных.
5987
8ecf9a2f-f41c-4e81-835e-09a956e854c2.png
adbdc502-bec7-43da-9b6d-6738b31805f0.png
221e004a-f686-4bdd-b569-6a88c20c6917.png
bffd5b5c-69d2-48d6-aa71-d8a4e2821056.png
f3d4a9ae-169d-498f-a561-eb3283868a72.png
ba158aa0-6b15-414e-a928-8b20ff482b39.png
A
A
1024
uno
nano
atmega328
General information
The Nano platform, built on the microcontroller ATmega328 (Arduino Nano 3.0) , is small in size and can be used in laboratory works. It has similar functionality to the Arduino Duemilanove, but in a different package. The difference lies in the absence of a power connector and DC operation via cable Mini-B USB. Nano developed and sold by the company Gravitech.
A brief description
Microcontroller Atmel
ATmega328
Operating voltage (logic level) 5 V
Input voltage (recommended) 7-12 V
Input voltage (limits) 6-20 In
Digital Inputs/Outputs 14 (of which 6
can
be used
as outputs
PWM)
Analog inputs 8
DC current through input/output 40 mA
Flash memory 32 KB
in this case, 2 KB
used
for loader
RAM 2 KB
EEPROM 1 KB
Clock speed 16 MHz
Dimensions 1.85 cm x 4.2 cm
Food:
The Arduino Nano can be powered via connection Mini-B USB, or from an unregulated 6 to 20 In (pin 30), or the regulated 5 V (pin 27), an external power source. Automatically selects the source with the highest voltage.
The FTDI FT232RL chip receives power only if the platform itself is powered by USB. Thus, when working from an external source (not USB), there will be no voltage of 3.3 V generated by the FTDI chip, while the RX and TX LEDs blink only when the presence of a high signal on pins 0 and 1.
Memory
The microcontroller has 32 KB (2 KB used to store the boot loader). but the ATmega328 has 2 KB of SRAM and 1 KB EEPROM.
Inputs and Outputs
Each of the 14 digital pins Nano can be configured as input or output. Insights operate at a voltage of 5 V. Each output has a load resistor (default off) 20-50 ohms and can handle up to 40 mA.
Some pins have special functions:
Serial bus: 0 (RX) and 1 (TX). Pins are used to receive (RX) and transmit (TX) TTL serial data. These pins are connected to corresponding pins of the chip serial bus FTDI USB-to-TTL.
External interrupt: 2 and 3. These pins can be configured for call interruption or the lower value, either for front or rear front or when you change the value.
PWM: 3, 5, 6, 9, 10, and 11. Any insights provides PWM resolution of 8 bits.
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). These pins support SPI communication, which, although provided by the underlying hardware, is not included in the Arduino language.
LED: 13. Built-in led connected to digital pin 13. If the value on the output is held high, the led is illuminated.
Platform Nano has 8 analog inputs each with 10 bits of resolution (i.e. 1024 different values). Standard conclusions are the measurement range to 5 V.
Some pins have additional functions:
I2C: 4 (SDA) and 5 (SCL). By means of pins communicates I2C (TWI).
An additional pair of pins on the Board:
AREF. The reference voltage for the analog inputs.
Reset. The low level signal at pin resets the microcontroller. Typically used to connect the reset button on the expansion card, closing access to the button on the Arduino Board.
Link
The Arduino Nano has a number of facilities for communicating with a computer, another Arduino, or other microcontrollers. Supported serial interface UART TTL (5V) by the pins 0 (RX) and 1 (TX). Mounted on Board FTDI FT232RL directs the interface via USB and the FTDI drivers (included with the Arduino software) provide a virtual COM port to software on the computer. Monitoring Serial Monitor of the Arduino program allows you to send and receive text data when you connect to the platform. The RX and TX LEDs on the Board will flash when data transfer via the FTDI chip and USB connection (but not for serial communication via pins 0 and 1).
It also supports I2C (TWI) and SPI.
Programming
The microcontroller comes with a recorded loader, facilitating the entry of new programs without using an external hardware programmer. Communication takes the original STK500 Protocol.
You have the option not to use the bootloader and program the microcontroller via pins of the ICSP header (in-circuit programming).
Nano is designed in such a way that the new code before recording a restart is performed by the program, instead of pressing buttons on the platform. One of the lines of the FT232RL that control the data flow (DTR), connected to the output of the restart of the microcontroller via a 100 nF capacitor. Activation of this line, i.e. the signal of the low level, resets the microcontroller. The Arduino software uses this capability to upload code by simply pressing the Upload button in the Arduino environment. Supply low-level signal at the DTR coordinated with the beginning of writing code that reduces the loader timeout.
The function has another use. Reboot Nano happens every time you connect to the Arduino program on a computer with Mac OS X or Linux (via USB). Following half a second after the reboot bootloader works. During programming intercept the first few bytes of code to avoid incorrect data platform (all except the code of the new program). If you are debugging one-off sketch recorded in the platform or entering any other data when you first start, you must make sure that the computer waits for a second before transmitting the data.
9600
arduinoIDE
83
0@0
LibraryRoot
LibraryGroup-Базовые элементы
LibraryGroup-Триггеры
LibraryGroup-Таймеры
LibraryGroup-Счетчики
LibraryGroup-Дисплеи
LibraryGroup-Конвертация типов
0@0
472
0@0
188
262
0@0
root