2016-09-09 10 views
0

PIC16F628A과의 Arduino UNO가 ...PIC16F628A I는 433 MHz의 송신기 및 수신기를 사용하여 (433)는 I

I은 ​​PIC MikroC 위해 사용 ...

실패한다.

제 목적은 PIC16F628A에서 보내는 Arduino UNO의 데이터를 읽는 것입니다. 하지만

PIC16F628A (송신기)의 회로 ... 그것이 성공하지 수 : The circuit of Transmitter

I의 Arduino는 + 5V까지의 수신기의 제 1 핀에 연결; 아두 이노의 12.pin에 수신기

초 핀의 Arduino의 GND 핀 수신기

마지막 핀.

송신기 (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]); 
          } 
      } 

     } 
} 

수신기 (아두 이노)이 코드를 시도

// 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()); 
    } 

} 

시도하기 전에; 나는

나는 보통 ...

내가 원하는대로 작동하지 않았다 byte.i '0'을 가지고

+0

첫 번째 테스트 양측은 독립적으로 제대로 작동하는 것으로 알려진 수신기 또는 송신기를 사용합니다. 양측이 서로 연결을 시도 할 때 작동하지 않을 가능성이 있으므로 연결 설정 (보드, 패리티, 배선 자체 등)을 조사해야합니다.) –

+0

고마워요. 나는 이미 두 개의 사진이있는 모듈 두 가지를 모두 시험해 보았습니다 ... 어떻게 이들을 함께 연결할 수 있습니까? – PIC16F84A

+0

동일한 전송 속도와 모든 것을 사용하는지 확인하십시오. 동일한 전압 레벨에서 작동합니까? 함께 gnd를 연결하고 하나의 tx 라인은 다른 rx 라인에 –

답변

1

해결 ... 아두 이노의 RX 핀에 수신기의 데이터 핀에 연결 지금까지 이미 진정한 datas를 복용했다하지만 난 숫자로보기 한 짓을

테스트 ... 내가 뭔가 일하는 것을 이해 할 수없는 이유입니다

잘.

코드를 살펴 보겠습니다.

송신기

질문 메시지

의 Arduino (수신기)에 송신 코드와 동일한 :

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 "메시지를 보내십시오.

수신기의 데이터 핀은 Arduino의 RX 핀에 연결되어야합니다 ...