[ÇÖZÜLDÜ] PIC16F628A 'dan Arduino ya Veri Aktarımı

Başlatan PIC16F, 09 Eylül 2016, 13:49:19

PIC16F

Elimde pic16f628a ve arduino uno var...
433 mhz transmitter ve receiver kullanıyorum.
Amacım; PIC16F628A'dan gönderdiğim verileri Arduino'dan okumak fakat yapamadım...

PIC16F628A devresi:


Receiver'ın da en soldaki pinine Arduino'nun +5V 'unu; 2.pinine Arduino'nun 12.pinini ve en sağdaki pinine de Arduino'nun GND pinini bağladım.

Transmitter(PIC16F628A):
char pre[15]={'U','U','U','U','U',255,255,255,255,255,0,0,0,0,0};   // başlatma byte ları
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++)                   //garanti olması açısından 10 kez gönderiliyor veriler...
          {
                          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 (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 (mikem@airspayce.com)
// 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);
    }
}


Bu kodu denedim; olmadı...
Bir de şu var;
void setup() {
  Serial.begin(2400);
 

}

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

}

Bunu denediğimde receiver ın data pinini Arduino'nun RX pinine bağladım...
Genellikle '0' byte ını aldım.
İstediğim şekilde çalışmadı...

Çözüldü
Önceki denemelerimde zaten verileri alıyormuş fakat onları sayı şeklinde görüntülediğim için doğru çalıştığını anlamamışım...
Kodlara geçelim;
Verici:
Alıntı YapYukarıdaki verici koduyla aynı

Arduino (Alıcı):
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' bu karşılaştırmadaki amaç;
Vericide gönderdiğim "frw", "bck" ya da "dur" mesajlarını yakalamak...

Powered by EzPortal