Как правильно осуществить передачу данных по I2C
- Войдите на сайт для отправки комментариев
Вс, 31/05/2015 - 21:03
Доброе время суток!
Подскажите пожалусто как будет правельно передать данные по I2C. Есть две ардуинки одно ведущая другая ведомая. Есть три переменных a,b,c они имеют числовое значение.
Вопрос заключается в следущем как правельно передать и как ведомая должна понять какую переменную я ей передаю.
Составил небольшую программу, но думаю что мой код не верен так как скорее всего какая нибудь переменная может не прейти или потеряться, может есть способ проверки, что отправленная переменная пришла, может кто подскажет что да как?
Ведущая:
#include <Wire.h>
void setup()
{ Wire.begin(); }
byte a = 0;
byte b = 20;
byte c = 30;
void loop()
{
Wire.beginTransmission(4);
Wire.write("a");
Wire.write(a);
Wire.endTransmission();
a++;
delay(500);
Wire.beginTransmission(4);
Wire.write("b");
Wire.write(b);
Wire.endTransmission();
b++;
delay(500);
Wire.beginTransmission(4);
Wire.write("c");
Wire.write(c);
Wire.endTransmission();
c++;
delay(500);
}
Ведомая:
#include <Wire.h>
void setup()
{
Wire.begin(4);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
}
byte a,b,с = 0;
void loop()
{
delay(500);
Serial.print("a = ");
Serial.println(a);
Serial.print("b = ");
Serial.println(b);
Serial.print("с = ");
Serial.println(с);
}
void receiveEvent(int howMany)
{
while (Wire.available())
{
char f = Wire.read();
if (f == 97){
byte per = Wire.read();
a = red;
}
if (f == 98){
byte per = Wire.read();
b = red;
}
if (f == 99){
byte per = Wire.read();
c = red;
}
}
}
почитайте тута. И тута . При моих минимальных знаниях мне это очень помогло.
Спасибо!
Здравствуйте. Помогите разобраться с получением данных по i2c в Nodemcu с Arduino
Код ардуино:
Код Lua
Поворачивая ручку потенциометра получаю числа от 0 до 255
Как получить то, что отправляет ардуино? (0-1023)
У меня получилось принять данные, но...
Ардуино выступает в качестве slave
LUA Nodemcu master
В nodemcu получаю как и должно быть, helloяяяя (так как принимаю 9 байт, а не 5)
но если так:
то получаю:
Решил
Уважаемые форумчане, подскажите плз - Можно ли понизить (строго задать) скорость i2c, не меняя частоту камня? Пытаюсь соединить ардуину со старым устройством 80-х годов и по осциллу скорость i2c ардуины в разы выше чем у устройства. Ни оно ардуину не видит ни она его. Заранее Спасибо!
______________________________________________________________________________
Нашёл функцию Wire.setClock();, поставил Wire.setClock(1); - скорость понизилась, но этого недостаточно, хорошо бы ещё раза в 3 уменьшить.
liftoman, напиши свою I2c медленную
Нашёл функцию Wire.setClock();, поставил Wire.setClock(1); - скорость понизилась, но этого недостаточно, хорошо бы ещё раза в 3 уменьшить.
А не пробовали ставить 10000?
(hint: при числах менее 245 Вы получаете переполнение с потерей старших разрядов)