Как передать значение а не ''текст'' через 433Mhz модули для Ардуино

Suren
Offline
Зарегистрирован: 19.12.2017
Добрый день Всем.За ранее извиняюсь за мой русский
 
Я делал передачик текста через 433Mhz модули для Ардуино.Все отлично работает. Текст написанный в коде передачика успешно передается на приемник и его видно на Serial Monitor приемника.
 
Теперь хочу передать не текст а какое то значение.Скажем хочу передать цифру 50 не как текст а как значение.
Кто может помочь? 
b707
Offline
Зарегистрирован: 26.05.2017

Через радиоканал передается не текст или значения. а байты. И что там в байтах - передатчику пофиг.

Чтобы ответить конкретно на ваш вопрос - хотелось бы увидеть код, как вы передаете данные. Как работаете с передатчиком и приемником - через какую-то библиотеку или напрямую?

Suren
Offline
Зарегистрирован: 19.12.2017
Передачик
 
#include <VirtualWire.h>
 
void setup()
{
    Serial.begin(9600);   // Debugging only
    Serial.println("setup"); // Prints "Setup to the serial monitor"
 
   
    vw_set_tx_pin(12);          // Sets pin D12 as the TX pin
    vw_set_ptt_inverted(true);  // Required for DR3100
    vw_setup(4000);         // Bits per sec
}
 
void loop()
{
    const char *msg = "Hello";   // Message to be sent
    digitalWrite(13, true);      // Flash a light to show transmitting
    vw_send((uint8_t *)msg, strlen(msg)); //Sending the message
    vw_wait_tx(); // Wait until the whole message is gone
    Serial.println(*msg);
    digitalWrite(13, false);   // Turn the LED off.
    delay(500);                 // A short gap.
 
....................................................................................................................................
Приемник
 
#include <VirtualWire.h>
int count;
void setup()
{
    Serial.begin(9600); // Debugging only
    Serial.println("MSG"); //Prints "Setup" to the serial monitor
    vw_set_rx_pin(12);       //Sets pin D12 as the RX Pin
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(4000);      // Bits per sec
    vw_rx_start();       // Start the receiver PLL running
}
 
void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
int i;
        digitalWrite(13, true);  // Flash a light to show received good message
// Message with a good checksum received, dump it.
Serial.print("Got: ");
 
for (i = 0; i < buflen; i++)
{
            char c = (buf[i]);
            Serial.print(c);
    Serial.print(" ");
}
        count++;
       // Serial.print(count);
Serial.println("");
        digitalWrite(13, false);
    }
}

текст "Hello" четко передается получается.

b707
Offline
Зарегистрирован: 26.05.2017

Ну вот видите - вы передаете вовсе не текст, а массив байт. Массив байт необязательно содержит буквы, в нем может быть что угодно.

Вставьте код нормально, чтобы можно было обсуждать его с номерами строк - продолжим.

mixail844
Offline
Зарегистрирован: 30.04.2012

Теперь вместо const char *msg = "Hello"; 

char *msg = {50,'\0'};

'50' - переправиться корректно , на принимающей стороне,если терминал настроен на ascii ,то увидите цифру '2' так как она соответствует числу 50 в таблице ascii

b707
Offline
Зарегистрирован: 26.05.2017

mixail844 пишет:

Теперь вместо const char *msg = "Hello"; 

char *msg = {50,'\0'};

'50' - переправиться корректно , на принимающей стороне,если терминал настроен на ascii ,то увидите цифру '2' так как она соответствует числу 50 в таблице ascii

mixail844 - это тот случай, "когда лучше молчать". ТС как раз хочет разобраться, как передавать числа. а не символы - да еще так безумно криво, как в вашем примере.

Чтобы убедиться в том, что ваш код - бредовый, рассмотрите передачу числа 3333

Suren
Offline
Зарегистрирован: 19.12.2017

A как потом конвертировать '2' на 50?

b707
Offline
Зарегистрирован: 26.05.2017

Suren пишет:

A как потом конвертировать '2' на 50?

Сурен, не обращайте внимания, это подход в корне неверный. Возможно, mihail844 просто прикалывается. Выложите свой код, как я просил.

Suren
Offline
Зарегистрирован: 19.12.2017
Передачик
 
1. #include <VirtualWire.h>
2. void setup()
3. {
4.  Serial.begin(9600);   // Debugging only
5.  Serial.println("setup"); // Prints "Setup to the serial monitor"
 
   
6.  vw_set_tx_pin(12);          // Sets pin D12 as the TX pin
7.  vw_set_ptt_inverted(true);  // Required for DR3100
8.  vw_setup(4000);         // Bits per sec
9.  }
 
10.   void loop()
11.   {
12.   const char *msg = "Hello";   // Message to be sent
13.   digitalWrite(13, true);      // Flash a light to show transmitting
14.   vw_send((uint8_t *)msg, strlen(msg)); //Sending the message
15    vw_wait_tx(); // Wait until the whole message is gone
16    Serial.println(*msg);
17    digitalWrite(13, false);   // Turn the LED off.
18    delay(500);                 // A short gap.
19    } 
 
....................................................................................................................................
Приемник
 
20. #include <VirtualWire.h>
21. int count;
22. void setup()
23. {
24.    Serial.begin(9600); // Debugging only
25.    Serial.println("MSG"); //Prints "Setup" to the serial monitor
26.    vw_set_rx_pin(12);       //Sets pin D12 as the RX Pin
27.   vw_set_ptt_inverted(true); // Required for DR3100
28.   vw_setup(4000);      // Bits per sec
29.    vw_rx_start();       // Start the receiver PLL running
30.   }
 
31. void loop()
32.   {
33.   uint8_t buf[VW_MAX_MESSAGE_LEN];
34.    uint8_t buflen = VW_MAX_MESSAGE_LEN;
35.    if (vw_get_message(buf, &buflen)) // Non-blocking
36.    {
37.   int i;
38    digitalWrite(13, true);  // Flash a light to show received good message // Message with a good checksum received, dump it.
39.   Serial.print("Got: ");
 
40.  for (i = 0; i < buflen; i++)
41.  {
42.           char c = (buf[i]);
43.           Serial.print(c);
44.   Serial.print(" ");
45.   }
46.       count++;
47.       // Serial.print(count);
48.    Serial.println("");
49.       digitalWrite(13, false);
50.    }
51. }

 

b707
Offline
Зарегистрирован: 26.05.2017

Suren пишет:

Передачик
 
1. #include <VirtualWire.h>
2. void setup()

 

Вы издеваетесь? :)

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

Suren
Offline
Зарегистрирован: 19.12.2017

Простите,пожалуйста.я новичок.

Suren
Offline
Зарегистрирован: 19.12.2017
// Transmitter

#include <VirtualWire.h>

void setup()
{
    Serial.begin(9600);	  // Debugging only
    Serial.println("setup"); // Prints "Setup to the serial monitor"

   
    vw_set_tx_pin(12);          // Sets pin D12 as the TX pin
    vw_set_ptt_inverted(true);  // Required for DR3100
    vw_setup(4000);	        // Bits per sec
}

void loop()
{
    const char *msg = "Hello";   // Message to be sent
    digitalWrite(13, true);      // Flash a light to show transmitting
    vw_send((uint8_t *)msg, strlen(msg)); //Sending the message
    vw_wait_tx(); // Wait until the whole message is gone
    Serial.println(*msg);
    digitalWrite(13, false);   // Turn the LED off.
    delay(500);                 // A short gap.
} 

 

Suren
Offline
Зарегистрирован: 19.12.2017
// Receiver

#include <VirtualWire.h>
int count;
void setup()
{
    Serial.begin(9600);	// Debugging only
    Serial.println("MSG"); //Prints "Setup" to the serial monitor
    vw_set_rx_pin(12);       //Sets pin D12 as the RX Pin
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(4000);	     // Bits per sec
    vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
	int i;
        digitalWrite(13, true);  // Flash a light to show received good message
	// Message with a good checksum received, dump it.
	Serial.print("Got: ");
	
	for (i = 0; i < buflen; i++)
	{
            char c = (buf[i]);
            Serial.print(c);
	    Serial.print(" ");
	}
        count++;
       // Serial.print(count);
	Serial.println("");
        digitalWrite(13, false);
    }
}

 

Suren
Offline
Зарегистрирован: 19.12.2017

В общих чертах, моя задача заключается в том,что у меня будет цифровое значения температуры на одном ардуино,которое будет передоватся через 433Мгц на вторую и там будет отображатся на ЖК дисплей

b707
Offline
Зарегистрирован: 26.05.2017

Если коротко: (сорри, много работы)

передача значения int

int val =3333;
vw_send((uint8_t *) &val, sizeof(val));

прием

int val2;
uint8_t buflen = sizeof(val2);;
   if (vw_get_message((uint8_t *)&val2, &buflen))  {
......

Если будут вопросы - спрашивайте, отвечу вечером.

Suren
Offline
Зарегистрирован: 19.12.2017

Спасибо,получилась