roboforum.ru

Технический форум по робототехнике.


Вопрос мастерам

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Вопрос мастерам

Сообщение Rudolph Sikorskiy » 14 мар 2017, 16:56

Есть задача, опрашивать несколько ардуино по I2C с целью вывести полученное на дисплей.
Рабочий код прикладываю, подсоединял по мануалу пробовал подтягивать SCL и SDA резисторами на 1,5кОм.
Вопрос в следующем.
Почему то поле некоторого времени слейв перестает определятся.
Скан видит любую перефирию I2C кроме ардуинки

Код: Выделить всёРазвернуть
Код (C++):

Код мастера

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x26,16,2);
#include <Wire.h>
char co = 0 ;

void setup()
  {

  Wire.begin();        // join i2c bus (address optional for master)
  lcd.init();
  lcd.backlight();
  Serial.begin(9600); 
  }

void loop()
  {
     
     Wire.requestFrom(0x10, 4,true);
     lcd.setCursor(0,0);
     while (Wire.available())
        {
          co = Wire.read();
          Serial.print(co);         
          lcd.print(co);   
        }
        delay(200);
   
   
     Serial.print(" ");
     
     Wire.requestFrom(0x10, 7,true);    // request 6 bytes from slave device #8
     lcd.setCursor(4,0);
     while (Wire.available())
        {
          co = Wire.read();
          Serial.print(co);         
          lcd.print(co);   
        }
   
  Serial.print("\n");
  delay(200);
  lcd.clear();
}



Код (C++):

Код слейва


01 #include <Wire.h>
02
03 byte stat = true;
04
05 char c[4] = {'N','O',' ',' '};
06 float x = 322.345;
07 void setup() {
08  Wire.begin(0x10);
09  pinMode(13, OUTPUT);
10  Serial.begin(9600);
11  Wire.onRequest(requestEvent);
12 }
13
14 void loop() {
15  digitalWrite(13, LOW);
16  delay(100);
17
18 }
19
20 void requestEvent() {
21  if (stat == true)
22  {
23
24  Wire.write(c,sizeof c);
25  stat = false;
26  }else
27  {
28  char outstr[7];
29  dtostrf(x,7, 3, outstr);
30  Wire.write(outstr,sizeof outstr);
31  stat = true;
32  }
33  digitalWrite(13, HIGH);
34
35
36
37
38 }
Rudolph Sikorskiy
 
Сообщения: 1
Зарегистрирован: 14 мар 2017, 16:53

Re: Вопрос мастерам

Сообщение loox » 15 мар 2017, 17:52

Rudolph Sikorskiy
Конечно, разобраться в Вашем коде, трудновато
Внимательно прочитайте про I2C - это протокол передачи, в котором строго определен порядок приема/передачи между передатчиком и приемником.
Если у Вас нет четкого понимания протокола передачи - почему вы не используете по крайней мере примеры?
Стандартные библиотеки работают успешно, правда несколько упрощенно , но для Вашей задачи, судя по тексту программы , подойдут.
В случае продолжения неудач - сообщите я помогу, только точно опишите - что хотите.
Спасибо loox
PS
когда приводите текст программы , удалите не нужные переменные, иначе не понятно.
пишите пояснения - тут делаю то
разбираться в чужих текстах - занятие утомительное
loox
 
Сообщения: 326
Зарегистрирован: 26 мар 2008, 12:45


Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron