Serial Отправка/чтение
- Войдите на сайт для отправки комментариев
Доброго времени! Чего я хочу добиться!
1) Отправить с Arduino в Serial #1P300 на устройство
2) Спросить у устройства выполнело ли оно команду? (Отправив в порт символ "Q"). Если команда выполнена устройство вернет символ "." Если нет "+". Если вернуло "+" продолжаю проверку до выполнения команды устройством (Посылаю в порт "Q") Как только устройство выполнело команду (вернуло ".") Перейти к выполнению следующей команды вида #1P2000
int val;
void setup()
{
Serial.begin(9600);
}
void veri()
{
Serial.println('Q');
delay(10);
if (Serial.available())
{
val = Serial.read();
}
while (val != '.')
{
Serial.println('Q');
delay(10);
}
}
void loop()
{
Serial.println("#1P300");
veri();
#1P2000
}
Спасибо!
Это вопрос, или просто написали, что добились?
Это вопрос, или просто написали, что добились?
Ну конечно вопрос! Задача думаю, простая. Но у меня третий день что-то ни как не получается.
добавьте в скетч строку Serial.println(val); чтобы увидеть что приходит от устройства.
скорее всего проблема в том, что у вас переменная типа int а вам нужен тип char.
а что за "команда вида #1P2000" ? компилятор это не поймет.
От устройства приходит символ точка в одну строку (точки следуют одна за другой).Смотрел терминалом с помощью usb-uart. В каком виде мне сравнивать этот символ в моем скетче? Я так понимаю, что ардуино и устройство не могут понять друг друга из за разных типов данных.
Какие нафиг типы? Для Serial кроме byte (char) ничего не существует.
Либо проходим мимо, либо впадаем в бесконечный цикл.
так у него val переменная типа int, и он сравнивает char с int. не помню точно при каких раскладах оно корректно сработает, при каких нет.
Да пофиг на типы, там в теле while переменная вообще никак не меняется.
Вот тут я код приводил: http://arduino.ru/forum/programmirovanie/neponyatnoe-povedenie-arduino#comment-88633
В нём если я шлю в ардуино #W то мне прилетают в ответ одни данные, если шлю #T то ардуино на этот запрос отправляет другие данные. Всё нужное для этого находится в куске:
082
//****************READ*COM*PORT*************************************
083
if
(
Serial
.available()>1)
084
{
085
uint8_t inByte =
Serial
.read();
086
if
(inByte==
'#'
)
087
{
088
inByte =
Serial
.read();
089
if
(inByte==
'W'
)
090
{
091
delay_ms(100);
092
Serial
.print(
"{\"sensor_data\":{"
);
//Открываем тег для API [мгновенные значения датчиков]
093
delay_ms(1);
094
//=====DTH=HOME=======
095
Serial
.print(
"\"th\":"
);
096
delay_ms(1);
097
Serial
.print(dthHome.temperature, 1);
098
Serial
.print(
","
);
099
delay_ms(1);
100
Serial
.print(
"\"hh\":"
);
101
delay_ms(1);
102
Serial
.print(dthHome.humidity, 1);
103
Serial
.print(
","
);
104
//=====DTH=STREET=====
105
delay_ms(1);
106
Serial
.print(
"\"ts\":"
);
107
delay_ms(1);
108
Serial
.print(dthStreet.temperature, 1);
109
Serial
.print(
","
);
110
delay_ms(1);
111
Serial
.print(
"\"hs\":"
);
112
delay_ms(1);
113
Serial
.print(dthStreet.humidity, 1);
114
Serial
.print(
","
);
115
//=====t window=====
116
delay_ms(1);
117
Serial
.print(
"\"tw\":"
);
118
Serial
.print(tw);
119
Serial
.print(
","
);
120
//=====t balcon=====
121
delay_ms(1);
122
Serial
.print(
"\"tb\":"
);
123
Serial
.print(tb);
124
Serial
.print(
"}}"
);
//Закрываем тег для API [мгновенные значения датчиков]
125
}
126
//========== Мгновенные значения ==========================
127
128
//========== Усреднённые значения для БД ==================
129
if
(inByte==
'T'
)
130
{
131
delay_ms(100);
132
Serial
.print(
"th_s: "
);
//
133
Serial
.print(th_s);
//ДОМ ТЕМПЕРАТУРА среднее
134
delay_ms(1);
135
Serial
.print(
" hh_s: "
);
//
136
Serial
.print(hh_s);
//ДОМ ВЛАЖНОСТЬ среднее
137
delay_ms(1);
138
Serial
.print(
" ts_s: "
);
//
139
Serial
.print(ts_s);
//УЛИЦА ТЕМПЕРАТУРА среднее
140
delay_ms(1);
141
Serial
.print(
" hs_s: "
);
//
142
Serial
.print(hs_s);
//УЛИЦА ВЛАЖНОСТЬ среднее
143
delay_ms(1);
144
Serial
.print(
" tw_s: "
);
//
145
Serial
.print(tw_s);
//Temperature window Температура трубы окна СРЕДНЕЕ
146
delay_ms(1);
147
Serial
.print(
" tb_s: "
);
//
148
Serial
.print(tb_s);
//Temperature balcony Температуры трубы балкона СРЕДНЕЕ
149
}
150
//========== Усреднённые значения для БД ==================
151
152
}
153
}
155
//****************READ*COM*PORT************************************
Возьмите его за основу, доработайте под свои нужды, заменив delay_ms(); на delay();
Народ! Всем по плюсу и СПАСИБО!
Но сегодня растормозился и все заработало. Сделал так:
char d=0;
Serial.println('Q');
delay(10);
while(d != '.')
{
if (Serial.available()>0) d=Serial.read();
}