Радио модуль выдаёт странное значение

rtmzeludkov@gma...
Offline
Зарегистрирован: 18.05.2019

Всем доброго времени суток!
Столкнулся с проблемой, что радиомодуль 443 мгц после нужного символа присылает странное нигде не прописанное число (25208).
Код отправки:

 

#include <VirtualWire2.h>
#include <VirtualWire2_Config.h>
/////////////////////////////METAL/////////////////////////////////////////////////////////////////////////////////////
#define sound 0              // 0 - в стиле счётчика гейгера, 1 - пищалка верещалка
#define default_mode 0       // если нет переключателя режимов, то по умолчанию стоит: 1 - статический, 0 - динамический
#define sens_change 0        // 0 - нет регулировки чувствительности, 1 - есть
float SENSITIVITY = 1000.0;  // ручная установка чувствительности
//------------НАСТРОЙКИ-------------

#define resetPinGND 12
#define resetPin 0   
#define SET(x,y) (x |=(1<<y))            //-Bit set/clear macros
#define CLR(x,y) (x &= (~(1<<y)))         // |
#define CHK(x,y) (x & (1<<y))             // |
#define TOG(x,y) (x^=(1<<y))              //-+


unsigned long t0 = 0;

int t = 0;
unsigned char tflag = 0;
float clf;
int v0 = 0;
float f = 0;
unsigned int FTW = 0;
unsigned int PCW = 0;
unsigned long timer = 0;

// Срабатываем каждые 1000 импульсов с генератора
SIGNAL(TIMER1_COMPA_vect)
{
  OCR1A += 1000;
  t = micros() - t0;
  t0 += t;
  tflag = 1;
}

/////////////////////////////MASHINA/////////////////////////////////////////////////////////////////////////////////////
#include <LiquidCrystal_I2C.h>   //including libraries of I2C-LCD1602 liquid crystal 
#include <Wire.h>      


#define Bluetooth_speed_up    -
#define Bluetooth_speed_down  +
#define IR_Bluetooth_Control  0x00ff38c7
unsigned char Bluetooth_val;       // ultrasonic module  TRIG to A1
LiquidCrystal_I2C lcd(0x27,16,2);   //defining liquid crystal



#define Lpwm_pin  11     //pin of controlling speed---- ENA of motor driver board
#define Rpwm_pin  3    //pin of controlling speed---- ENB of motor driver board
int pinLB=4; //2-4            //pin of controlling turning---- IN1 of motor driver board
int pinLF=2;      //4-2       //pin of controlling turning---- IN2 of motor driver board
int pinRB=7;            //pin of controlling turning---- IN3 of motor driver board
int pinRF=8;            //pin of controlling turning---- IN4 of motor driver board

unsigned char Lpwm_val = 150; //initialized left wheel speed at 250
unsigned char Rpwm_val = 150; //initialized right wheel speed at 250
int Car_state=0;             //the working state of car


void M_Control_IO_config(void)
{
  pinMode(pinLB,OUTPUT); // /pin 2
  pinMode(pinLF,OUTPUT); // pin 4
  pinMode(pinRB,OUTPUT); // pin 7
  pinMode(pinRF,OUTPUT);  // pin 8
  pinMode(Lpwm_pin,OUTPUT);  // pin 11 (PWM) 
  pinMode(Rpwm_pin,OUTPUT);  // pin10(PWM)   
}
void Set_Speed(unsigned char Left,unsigned char Right) //function of setting speed
{
  analogWrite(Lpwm_pin,Left);
  analogWrite(Rpwm_pin,Right);
}

void advance()    //  going forward
    {
     digitalWrite(pinRB,LOW);  // making motor move towards right rear
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,LOW);  // making motor move towards left rear
     digitalWrite(pinLF,HIGH); 
     Car_state = 1; 
     show_state();   
    }
void turnR()        //turning right(dual wheel)
    {
     digitalWrite(pinRB,LOW);  //making motor move towards right rear
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,LOW);  //making motor move towards left front
     Car_state = 4;
     show_state();
    }
void turnL()         //turning left(dual wheel)
    {
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,LOW );   //making motor move towards right front
     digitalWrite(pinLB,LOW);   //making motor move towards left rear
     digitalWrite(pinLF,HIGH);
     Car_state = 3;
     show_state();
    }    
void stopp()        //stop
    {
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,HIGH);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,HIGH);
     Car_state = 5;
     show_state();
    }
void back()         //back up
    {
     digitalWrite(pinRB,HIGH);  //making motor move towards right rear     
     digitalWrite(pinRF,LOW);
     digitalWrite(pinLB,HIGH);  //making motor move towards left rear
     digitalWrite(pinLF,LOW);
     Car_state = 2;
     show_state() ;    
    }



    void show_state(void)
{
  lcd.setCursor(0, 1);
   switch(Car_state)
   {
     case 1:lcd.print(" Go  ");
    // Serial.print(" \r\n GO");
     break;
     case 2:lcd.print("Back ");
    // Serial.print(" \r\n Back");
     break;
     case 3:lcd.print("Left ");
     //Serial.print(" \r\n Left");
     break;
     case 4:lcd.print("Right");
    // Serial.print(" \r\n Right");
     break;
     case 5:lcd.print("Stop ");
     //Serial.print(" \r\n Stop"); 
     break;
     default:
     break;

     
   }
}



   void LCD1602_init(void)            //including initialized function of liquid crystal
{
  lcd.init();  //invoking initialized function of LCD in LiquidCrystal_I2C.h  
  delay(10);  //delaying for 10 millisecond
  lcd.backlight(); //open backlight of LCD1602
  lcd.clear();    //clear screen
}  
void Show_V(unsigned char V)
{
     lcd.setCursor(11, 0);
     lcd.print("V=    ");
     lcd.setCursor(13, 0);
     lcd.print(V,DEC);
     Serial.print("\n Speed = ");
     Serial.print(V,DEC); 
}



void Bluetooth_Control() //Bluetooth remote control
{

   lcd.setCursor(0, 0);  //setting cursor in the first row and column
   lcd.print("Bluetooth         ");
 
   if(Serial.available()) //to judge whether serial port receive data
    {
     Bluetooth_val=Serial.read();  //reading value of Bluetooth serial port, giving the value to val
    switch(Bluetooth_val)
     {
       case 'U':advance(); //UP
       break;
       case 'D': back();   //back
       break;
       case 'L':turnL();   //Left
       break;
       case 'R':turnR();  //Right
       break;
       case 'S':stopp();    //stop
       break;   
       case '+': if( Rpwm_val+10<=250 && Rpwm_val+10<=250){  //increasing speed
   if( Rpwm_val+10<=250 && Lpwm_val+10<=250){  //increasing speed
                  Lpwm_val+=10; Rpwm_val+=10;
                  Set_Speed(Lpwm_val,Rpwm_val);
                  Show_V(Lpwm_val);
                  }
       break;
       case '-':if(Rpwm_val-10>=0&&Rpwm_val-10>=0){  //decreasing speed
                  Lpwm_val-=10; Rpwm_val-=10;
                  Set_Speed(Lpwm_val,Rpwm_val);
                  Show_V(Lpwm_val);
                  }
      break;
     }
    } 
}}


void setup() 
{ 
   LCD1602_init();            //initializing 1602
   M_Control_IO_config();     //motor controlling the initialization of IO
   Set_Speed(Lpwm_val,Rpwm_val);  //setting initialized speed
//   Sensor_IO_Config();            //initializing IO of line tracking module 

//   pinMode(inputPin, INPUT);      //starting receiving IR remote control signal
//   pinMode(outputPin, OUTPUT);    //IO of ultrasonic module
   Serial.begin(9600);            //initialized serial port , using Bluetooth as serial port, setting baud 
   lcd.setCursor(0, 0);           //setting cursor at 0.0
   

     pinMode(resetPin, INPUT_PULLUP);
  pinMode(resetPinGND, OUTPUT);
  digitalWrite(resetPinGND, 0);
  //-Set up counter1 to count at pin 5
  TCCR1A = 0;
  TCCR1B = 0x07;
  SET(TIMSK1, OCF1A);
  stopp(); 
  vw_set_ptt_inverted(true); // Необходимо для DR3100
  vw_setup(2000); // Устанавливаем скорость передачи (бит/с)
  }
  
  // функция модуля
  float absf(float f)
  {
    if (f < 0.0)
      return -f;
    else
      return f;
  }
   

void loop()
{

{
  char symbol = 'c';

  




 // Ждем пока передача будет окончена

  
  while(IR_Bluetooth_Control)
  {
   Bluetooth_Control();  //pressing “OK” on remote controller, and entering remote control mode
   if (tflag)  
   {
    Serial.print(f);
    lcd.setCursor(7, 1);
    lcd.print("f=           ");
    lcd.setCursor(9, 1);
    lcd.print(f);
    if  (f>10)
    {
      stopp();
      Serial.println("metall");
      String strMsg = "z ";
      strMsg += symbol;
      char msg[255];
      strMsg.toCharArray(msg, 255);
      Serial.println(msg);
      vw_send((uint8_t *)msg, strlen(msg));
      vw_wait_tx();
      
    
    }
      {   // если кнопка режимов не нажата
        if (!digitalRead(resetPin))                   // если нажата кнопка сброса частоты
        v0 = t;                                     // запомнить текущую частоту
      } 
      }
      f = f * 0.85 + absf(t - v0) * 0.15;             // фильтруем сигнал 
      tflag = 0;                //-Reset flag
    delay(50);
    }
}
}

Код приёма:

 

#include <VirtualWire.h>
 
void setup()
{
  Serial.begin(9600);
  vw_set_ptt_inverted(true); // Необходимо для DR3100
  vw_setup(2000); // Задаем скорость приема
  vw_rx_start(); // Начинаем мониторинг эфира
}
 
void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN]; // Буфер для сообщения
  uint8_t buflen = VW_MAX_MESSAGE_LEN; // Длина буфера
 
  if (vw_get_message(buf, &buflen)) // Если принято сообщение
  {
    // Начинаем разбор
    int i;
    // Если сообщение адресовано не нам, выходим
    if (buf[0] != 'z')
    {
      return; 
    }
    char command = buf[2]; // Команда находится на индексе 2
    // Числовой параметр начинается с индекса 4
    i = 4; 
    int number = 0;
    // Поскольку передача идет посимвольно, то нужно преобразовать набор символов в число
    while (buf[i] != ' ')
    {
      number *= 10;
      number += buf[i] - '0';
      i++;
    }
    Serial.print(command);
    Serial.print(" ");
    Serial.println(number);

Ссылка на VirtualWire2: http://out.arduino.ru/?redirect=https%3A%2F%2Fdrive.google.com%2Fopen%3Fid%3D1aXJ8lAX2hi9cjayEoVkqo-pSPYzLzLe1&baseU=http%3A%2F%2Farduino.ru%2Fforum%2Fprogrammirovanie%2Fperevod-virtualwire-na-vtoroi-taimer-v-unonanoetc

Ссылка на VirtualWire: https://voltiq.ru/arduino-libraries/VirtualWire.zip

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

CR LF?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Хвост кода пропал. Вставьте ещё раз, там интересно.