Arduino + i2c + arduino

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Собственно вопрос. Как общать между собой 2 ардуины по i2c?
Только не просто общать а чтобы можно слать минимум 2 байта информации, а лучше целое предложение. Например: переменная-значение-действие над переменной.
КАК!!!!!
В интернете только про 1 байт написано.
http://rln.nnov.ru/index.php?ind=reviews&op=entry_view&iden=201
 

chaytan
Offline
Зарегистрирован: 02.02.2012
LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Ссылка интересная. Но повторить не получилось((((
На данном этапе у меня получилось отправлять команду и 2-х байтный параметр.
А как отправлять запрос? Вернее как написать чтобы принимался запрос и отправлялся ответ?
 

chaytan
Offline
Зарегистрирован: 02.02.2012

 у меня примеры тамашние работали......

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

 заработало.)))) Спасибо!!! Чуть надо было переделать под свои нужды

chaytan
Offline
Зарегистрирован: 02.02.2012

вот и чудьненько..... 

gidon
Offline
Зарегистрирован: 05.08.2013

Вопрос есть такой, 2 -6 ардуино как слэйв к ардуино мастеру по I2C передать скаже цисла от 0 до 10000 с щагом 0.1

примеры каторые видел отсылают по 1 байту и получается х=0 и до 255 и опять 0

как решить вопрос

maksim
Offline
Зарегистрирован: 12.02.2012
gidon
Offline
Зарегистрирован: 05.08.2013

ок разобрался как разложить переменную на 4 байта но как их переслать по порядку не знаю Вот мой код
 

// Master


#include <Wire.h>


void setup()
{
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
}

void loop()
{
  Wire.requestFrom(2, 4);    // request 6 bytes from slave device #2

  while(Wire.available())    // slave may send less than requested
  { 
    int c = Wire.read(); // receive a byte as int//character
    Serial.println(c);         // print the character
  }

  delay(500);
}

 

 

 

 

//Slave

unsigned long val = 1587632040;
#include <Wire.h>
void setup()
{
  Wire.begin(2);                // join i2c bus with address #2
  Wire.onRequest(requestEvent); // register event
}

void loop()
{
  delay(100);
}

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent()
{
  byte *x = (byte *)&val;
  for (int i=0; i<4; i++) {
  Wire.write(x[i]); // respond with message of 6 bytes
                       // as expected by master
  }                     
                       
}

на стороне мастера сложу так:
unsigned long value = ((unsigned long)x[3] << 24) +((unsigned long)x[2] << 16) +(x[1] << 8) +x[0];

 

maksim
Offline
Зарегистрирован: 12.02.2012

Вопрос сформулируйте. В чем проблема то?

gidon
Offline
Зарегистрирован: 05.08.2013

Вопрос втом что отсылается только 4 байт (94) а остальные 3 255
Последний бай идет первым

gidon
Offline
Зарегистрирован: 05.08.2013

Вопрос как отослать 4 байта по аорядку

maksim
Offline
Зарегистрирован: 12.02.2012
#include <Wire.h>

void setup()
{
  Wire.begin();        // join i2c bus (address optional for master)
  Serial.begin(9600);  // start serial for output
}

void loop()
{
  Wire.requestFrom(2, 4);    // request 6 bytes from slave device #2

  if(Wire.available())    // slave may send less than requested
  {
    delay(10);
    byte x[4];
    for(byte i = 0; i < 4; i++) x[i] = Wire.read();
    // for(char i = 0; i >= 0; i--) x[i] = Wire.read();
    float *y = (float *)&x;
    Serial.println(y[0]);         // print the character
  }

  delay(500);
}

 

gidon
Offline
Зарегистрирован: 05.08.2013

Круто но это часть Мастер а проблемма в том что Слэйв посылает

gidon
Offline
Зарегистрирован: 05.08.2013

Слэйв посылает только последний байт

maksim
Offline
Зарегистрирован: 12.02.2012
unsigned long val = 1587632040;
#include <Wire.h>
void setup()
{
  Wire.begin(2);                // join i2c bus with address #2
  Wire.onRequest(requestEvent); // register event
}

void loop()
{
  delay(100);
}

void requestEvent()
{
  byte *x = (byte *)&val;
  Wire.write(x, 4);
}

 

gurol
Offline
Зарегистрирован: 06.12.2016

Мужики, помогите!

Как мастеру передать float данные ?

JasKo
Offline
Зарегистрирован: 21.11.2015

gurol пишет:

Мужики, помогите!

Как мастеру передать float данные ?

Как четыре байта естественно, ну и плюс пятый с признаком, что это float.

PS: см. размерности типов.