Arduino + i2c + arduino
- Войдите на сайт для отправки комментариев
Пт, 06/04/2012 - 15:31
Собственно вопрос. Как общать между собой 2 ардуины по i2c?
Только не просто общать а чтобы можно слать минимум 2 байта информации, а лучше целое предложение. Например: переменная-значение-действие над переменной.
КАК!!!!!
В интернете только про 1 байт написано.
http://rln.nnov.ru/index.php?ind=reviews&op=entry_view&iden=201
http://digitalcave.ca/resources/avr/arduino-i2c.jsp
Ссылка интересная. Но повторить не получилось((((
На данном этапе у меня получилось отправлять команду и 2-х байтный параметр.
А как отправлять запрос? Вернее как написать чтобы принимался запрос и отправлялся ответ?
у меня примеры тамашние работали......
заработало.)))) Спасибо!!! Чуть надо было переделать под свои нужды
вот и чудьненько.....
Вопрос есть такой, 2 -6 ардуино как слэйв к ардуино мастеру по I2C передать скаже цисла от 0 до 10000 с щагом 0.1
примеры каторые видел отсылают по 1 байту и получается х=0 и до 255 и опять 0
как решить вопрос
http://arduino.ru/forum/programmirovanie/zapis-v-eeprom
http://arduino.ru/forum/programmirovanie/kak-zapisat-peremennuyu-tipa-float-v-eeprom
ок разобрался как разложить переменную на 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];
Вопрос сформулируйте. В чем проблема то?
Вопрос втом что отсылается только 4 байт (94) а остальные 3 255
Последний бай идет первым
Вопрос как отослать 4 байта по аорядку
#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); }Круто но это часть Мастер а проблемма в том что Слэйв посылает
Слэйв посылает только последний байт
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); }Мужики, помогите!
Как мастеру передать float данные ?
Мужики, помогите!
Как мастеру передать float данные ?
Как четыре байта естественно, ну и плюс пятый с признаком, что это float.
PS: см. размерности типов.