Я хочу читать из Arduino, используя I2C, используя Raspberry Pi - PullRequest
0 голосов
/ 06 октября 2019

Я хочу читать из Arduino, используя код c ++ через Raspberry Pi. Тем не менее, я сталкиваюсь с некоторыми трудностями в поиске решения.

Есть ли какой-нибудь хороший источник информации, который я могу найти для этой проблемы?

До сих пор я смог написать до этого много,но я знаю, что это определенно не работает.

Многие источники в Интернете, кажется, фокусируются на питоне и отправляют данные в arduino, а не получают данные из arduino.

'' 'C ++

#include <iostream>
#include <stdio.h>
#include <string>
#include <sstream>
#include <linux/i2c-dev.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
#define MicroControlAdr 0x8;

static const char* devName="/dev/i2c-1";
using namespace std;

int main(int argc, char **argv)
{
    cout<<"Hello, World!\n";
    cout<<"I2C connection..."<<endl;
    int file;
    if ((file=open(devName, O_RDWR))<0)
    {
        cout<<"I2C: Failed to Access "<< devName<< endl;
        return -1;
    }
    ioctl (file, I2C_SLAVE, 0x8);


    float char_ar[16];
    read(file,char_ar,16);
    cout<<char_ar[16];

    return 0;
}

'' '

' '' Arduino

#include <Wire.h>

void setup()
{
  //Join Arduino I2C bus as slave with address 8
  Wire.begin(0x8);
  Wire.onRequest(requestEvent);
}

void loop()
{
  delay(100);
}
void requestEvent()
{
  unsigned char char_ar[16]="Hi Raspberry Pi";
  Wire.write(char_ar,16);
}

'' '

То, что я хочу, - это когда программа C ++ выполняется,Arduino отправит «Hi Raspberry Pi» на терминал, но мне выдаётся странный номер 4.2039e-45

1 Ответ

0 голосов
/ 06 октября 2019
float char_ar[16];
read(file,char_ar,16);
cout<<char_ar[16];

Это выглядит неправильно. Вы пытаетесь прочитать массив с плавающей точкой вместо символов, а затем печатаете элемент 16, который находится за концом массива, поскольку индексирование начинается с нуля.

Попробуйте это:

char char_ar[16];
read(file,char_ar,16);
cout << char_ar;
...