ramen79 Ответов: 1

Малина к arduino не получает правильное значение через i2c


Я пытаюсь отправить массив значений 250,5000,400,1,430 из raspberry python, но arduino получает

43
0
0
0
0

Кто-нибудь, помогите.

мой код ниже

Что я уже пробовал:

////Rpi code/////

import smbus
import time

bus = smbus.SMBus(1)
address = 0x20

def writeNumber(a,b,c,d,e):
bus.write_i2c_block_data(address, a, [b, c, d, e])
return -1


while True:
    try:   
        writeNumber(250,5000,400,1,430)
        time.sleep(1)   



////Arduino Code////                 
   

#include <Wire.h>

int data[5];
int x =0;


void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Wire.begin(0x20);
Wire.onReceive(receiveData);
}

void loop() {
  // put your main code here, to run repeatedly:
delay(10);
}

void receiveData(){

  while(Wire.available()){
    data[x]=Wire.read();
  }

  Serial.println("Stand-1");
  Serial.println(data[0]);
  Serial.println(data[1]);
  Serial.println(data[2]);
  Serial.println(data[3]);
  Serial.println(data[4]);
}

Gerry Schmitz

Написание и чтение одного числа (5 раз), как правило, проще, чтобы начать с.

1 Ответов

Рейтинг:
2

Gerry Schmitz

while(Wire.available()){
    data[x]=Wire.read();
  }


Вам нужно увеличить x (или что-то в этом роде). Все набивается в первый элемент, а остальные по умолчанию принимают значение int 0.

Если 43 должен быть 430, то там, возможно, тоже есть проблема "размера" (байт).


ramen79

Привет!
спасибо.
тем временем я сделал это с помощью разделенной строки",".

любить:
byteData = ConvertStringToBytes("250,5000,400,1,430")
bus.write_i2c_block_data(byteDate)

спасибо

ramen79

правильно-это>>

bus.write_i2c_block_data(i2c_address, i2c_cmd,byteDate)