Как сортировать данные
- Войдите на сайт для отправки комментариев
Втр, 12/02/2013 - 13:50
Есть скетч приема на модуле 433Mhz RF link
#include <VirtualWire.h>
int RF_RX_PIN = 9;
// int incomingByte = 0; // переменная для хранения полученного байта
void setup()
{
Serial.begin(9600);
//Serial.println("setup");
vw_set_rx_pin(RF_RX_PIN); // Setup receive pin.
vw_setup(200); // Transmission speed in bits per second.
vw_rx_start(); // Start the PLL receiver.
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if(vw_get_message(buf, &buflen)) // non-blocking I/O
{
int i;
digitalWrite(10, true); // Flash a light to show received good message
// Message with a good checksum received, dump HEX
Serial.print(" ");
for(i = 0; i < buflen; ++i)
{
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println("");
digitalWrite(10, false);
}
}
Модуль принимает данные: 4 числа "31","32","33","34"
Как их различить и зажечь светодиоды соответственно последней цифре?
Читал учебник, разные типы данных их преобразования.
Пробовал по разному, ничего не получается.
1. Почему и зачем соответственно последней цифре???
"31","32","33","34"2. Плохо читали или не тот учебник читали.
"31","32","33","34"вы выводите в 16-тиричном представлении, если эти числа представить в 10-тичном виде, то это числа 49, 50, 51, 52, что соответствует кодам ASCII символов 1, 2, 3 и 4 соответственно.а значит если вы хотите получить число, то нужно делать так
Serial.print(buf[i]-48, DEC); Serial.print(" ");если же хотите все так же символ, то так
Serial.print((char)buf[i]); Serial.print(" ");или так
char buf[VW_MAX_MESSAGE_LEN]; .... .... .... Serial.print(buf[i]); Serial.print(" ");Почему 31 и так далее. По задумке все равно, лишь бы различались состояния.Конечный итог: должен быть включен светодиод на каждом числе,то есть если 31 -один вывод,32 -другой и так далее.А какие там числа, не очень важно. Проще надо различить четыре состояния, Далее пойдут исполнительные штучки.Вот на этой сортировке я и сломался ,Как сунуть в код "if ........=31,то делать одно. если "if.....=32, то другое. Вот это "......." не понятно
Так в чем проблема? так и "всунуть":
#include <VirtualWire.h> int RF_RX_PIN = 9; // int incomingByte = 0; // переменная для хранения полученного байта void setup() { Serial.begin(9600); //Serial.println("setup"); vw_set_rx_pin(RF_RX_PIN); // Setup receive pin. vw_setup(200); // Transmission speed in bits per second. vw_rx_start(); // Start the PLL receiver. } void loop() { int8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; if(vw_get_message(buf, &buflen)) // non-blocking I/O { int i; digitalWrite(10, true); // Flash a light to show received good message // Message with a good checksum received, dump HEX Serial.print(" "); for(i = 0; i < buflen; ++i) { if(buf[i] == '1') { // делаем что-то } else if(buf[i] == '2') { // делаем что-то } else if(buf[i] == '3') { // делаем что-то } // и т.д. Serial.print(buf[i]); Serial.print(" "); } Serial.println(""); digitalWrite(10, false); } }но лучше воспользоваться оператором switch case
Сейчас скажу крамольную мысль.Теоритически знал, на практике пробовал, но нет знания , как-бы сказать. связывать в общую программу, так ничего и не получилось.Вот беру if , а дальше в скобках.и переменных запутался.В общем учиться надо.Хотя теперь с вашей помощью передам сигнал "Включить первую лампу" со звуковым ответом "Выполняю.Включаю первую позицию". Спасибо за помощь