Arduino и модуль расширения I2C на PCA8574AD

Oiler
Offline
Зарегистрирован: 27.11.2016

Добрый день!

Пытаюсь встроить сей модуль в проект.

Взял пример отсюда, вроде работает, но полного понимания что здесь и зачем нет.

Вот код:

#include <Wire.h>
#define DEVICE_1 0x7C
#define DEVICE_2 0x38
void setup()
{
    Wire.begin();
    IOexpanderWrite(DEVICE_2, 0x0F);
}
void loop()
{
   byte k;
   for(byte i = 0; i<255; i++)
   {
      IOexpanderWrite(DEVICE_1, i);     
      delay(50); 
      k = IOexpanderRead(DEVICE_2);
      delay(50);       
      IOexpanderWrite(DEVICE_2, (k<<4)|0x0F);
      delay(200); 
   }
}
//Write a byte to the IO expander
void IOexpanderWrite(byte address, byte _data ) 
{
 Wire.beginTransmission(address);
 Wire.write(_data);
 Wire.endTransmission(); 
}
//Read a byte from the IO expander
byte IOexpanderRead(int address) 
{
 byte _data;
 Wire.requestFrom(address, 1);
 if(Wire.available()) {
   _data = Wire.read();
 }
 return _data;
}

Подскажите, плиз, для начала, зачем мы гоняем этот цикл:

for(byte i = 0; i<255; i++)

И зачем мы записываем все значения i:

IOexpanderWrite(DEVICE_1, i)

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Это текст по Вашей ссылке.

--------

The included Wire library allows to communicate to the I2C/TWI bus of Arduino.

The binary counter is incremented by every 300 mS and writes it to the Group 1 IO expander, where LEDs are connected and configured as digital output pins.

Lower nibble of Group 2 IO expander is read and displayed at upper nibble of the same IO expander.

Lower nibble is configured as inputs, and connected with 4 way dip switch.

Upper nibble is configured as output and connected with 4 LEDs.

---------

Вы читать не умеете? Верю, что умеете, тогда внятно скажите, что именно Вам непонятно? Потому, что ответы на Ваши вопросы из первого поста содержатся в описании кода.

Oiler
Offline
Зарегистрирован: 27.11.2016

Я собрал схему по варианту DIP+4LED.

Если в Loop оставить только

    byte k;    
    k = IOexpanderRead(DEVICE_2);
    Serial.println(k, BIN);
    delay(50);
    IOexpanderWrite(DEVICE_2, (k << 4) | 0x0F);
    delay(200);

То всё работает и так. Вот мне и непонятно, даже из описания, ну извините, зачем добавлен этот цикл.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

он касается первого регистра. Если Вы его не ставили, то он ни зачем не нужен. Это просто тест собранной схемы.

Вы точно можете читать написанное?

Я к тому, что незнание английского равно ПОЛНОЙ невозможности что-то делать в программировании и электронике.

Тут, да и на других форумах, много людей, которые не могут прочесть даташит, над ними даже смеются... жалеют и стесняются, как инвалида на паперти.