2016-09-09 3 views
0

У меня есть PIC16F628A и Arduino UNO ...PIC16F628A к Arduino РФ связи завершается (433MHz)

Я использую MikroC для ПОС ...

Я использую 433 МГц передатчик и приемник.

Моя цель - читать данные от Arduino UNO, которые я отправляю от PIC16F628A; но я не мог это успех ...

Схема PIC16F628A (передатчик): The circuit of Transmitter

Я подключил первый палец приемника к + 5В от Arduino;

второй штифт приемника к 12.pin из Arduino,

последняя штифт приемника GND штифт Arduino.

передатчик (PIC16F628A):

char pre[15]={'U','U','U','U','U',255,255,255,255,255,0,0,0,0,0}; //start bytes... 
char ileri[3]={'f','r','w'}; 
char geri[3]={'b','c','k'}; 
char dur[3]={'d', 'u', 'r'}; 
char i=0,j=0; 

void kurulum() 
{ 
CMCON= 7; 
TRISB= 2; 

UART1_Init(2400); 

delay_ms(100); 

} 

void main() 
{ 

kurulum(); 

while(1) 
     { 


      for(i=0;i<15;i++) 
          { 
          UART1_Write(pre[i]); 
          } 
      for(j=0;j<10;j++)     
      { 
          for(i=0;i<3;i++) 
          { 
          while(!UART1_Tx_Idle()); 
          UART1_Write(ileri[i]); 
          } 
      } 


      //************************************************************* 


      for(i=0;i<15;i++) 
          { 
          UART1_Write(pre[i]); 
          } 
      for(j=0;j<10;j++) 
      { 
         for(i=0;i<3;i++) 
         { 
          while(!UART1_Tx_Idle()); 
          UART1_Write(geri[i]); 
         } 
      } 

      for(i=0;i<15;i++) 
          { 
          UART1_Write(pre[i]); 
          } 
      for(j=0;j<10;j++) 
      { 
          for(i=0;i<3;i++) 
          { 
          while(!UART1_Tx_Idle()); 
          UART1_Write(dur[i]); 
          } 
      } 

     } 
} 

приемник (Arduino):

// receiver.pde 
// 
// Simple example of how to use VirtualWire to receive messages 
// Implements a simplex (one-way) receiver with an Rx-B1 module 
// 
// See VirtualWire.h for detailed API docs 
// Author: Mike McCauley ([email protected]) 
// Copyright (C) 2008 Mike McCauley 
// $Id: receiver.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $ 

#include <VirtualWire.h> 

const int led_pin = 13; 
const int receive_pin = 12; 

void setup() 
{ 
    delay(1000); 
    Serial.begin(9600); // Debugging only 
    Serial.println("setup"); 

    // Initialise the IO and ISR 
    vw_set_rx_pin(receive_pin); 
    //vw_set_ptt_inverted(true); // Required for DR3100 
    vw_setup(2400); // Bits per sec 

    vw_rx_start();  // Start the receiver PLL running 

    pinMode(led_pin, OUTPUT); 
} 

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(led_pin, HIGH); // 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++) 
    { 
     Serial.print(buf[i], HEX); 
     Serial.print(' '); 
    } 
    Serial.println(); 
     digitalWrite(led_pin, LOW); 
    } 
} 

Я попробовал этот код; но это не сработало ... Существует еще один код;

void setup() { 
    Serial.begin(2400); 


} 

void loop() { 
    if (Serial.available() > 0){ 
     Serial.println(Serial.read()); 
    } 

} 

Прежде чем пытаться это сделать; Я подключил булавку данных приемника RX штифтом Arduino ...

Я обычно получил '0' byte.i

Он не работает, как я желал ...

+0

Сначала проверьте обе стороны независимо от приемника или передатчика, который, как известно, работает правильно. Когда у вас обе стороны работают, попробуйте подключить их вместе, скорее всего, это не сработает, поэтому вам придется исследовать настройки соединения (бод, четность, сама проводка и т. Д.).) –

+0

Thanks; Я уже пробовал оба модуля с двумя фото раньше, и он работал ... Как я могу подключить их вместе? – PIC16F84A

+0

Убедитесь, что они используют ту же скорость передачи и все. Они работают на одинаковых уровнях напряжения? Соедините gnd вместе и линию tx от одной до rx линии другой –

ответ

1

решаемые

тесты, которые я сделал до сих пор уже принимают истинные ДАННЫЕ, но я смотрел на них как номера ...

Вот почему я не мог понять, что это работает Что ж.

Давайте посмотрим на коды;

Передатчик:

Так же, как код передатчика на вопрос сообщение

Ардуино (приемник):

char x, msg[6]; 
int i= 0; 

void setup() { 
    Serial.begin(2400); 


} 

void loop() { 
    if (Serial.available() > 0){ 
     msg[i] = Serial.read(); 
     if (msg[0]=='f' || msg[0] == 'b' || msg[0] == 'd'){ 
      i++; 
     } 
     if (i==3){ 
      Serial.println(msg); 
      i = 0; 
      msg[0]=0; 
     } 
    } 

} 



msg[0]=='f' || msg[0] == 'b' || msg[0] == 'd' 

Цель сравнения выше догоняет "FRW", " bck "или" dur ", которые я отправил ...

Штырь данных приемника должен быть подключен к выходу RX в Arduino ...

Смежные вопросы