Модуль расширения i2c при запуске горят светодиоды

,

Здравствуйте.
Помогите разобраться с кодом:

#include <PCF8574.h>
PCF8574 pcf8574_1(0x27);            // Создаем объект и указываем адрес устройства 0x27
                                    //назначаем пины, которые будут отвечать за работу кнопки и светодиода


//задаем начальные значения для переменных
boolean buttonWasUp_1 = true; 
boolean buttonWasUp_2 = true;
boolean buttonWasUp_3 = true; 
boolean buttonWasUp_4 = true;
boolean ledEnabled_1 = false;
boolean ledEnabled_2 = false;
boolean ledEnabled_3 = false;
boolean ledEnabled_4 = false;

void setup()
{
  Serial.begin(9600);
  //конфигурируем пины, пин кнопки на вход(с него мы будем считывать данные)
 pcf8574_1.pinMode(P0, OUTPUT);
 pcf8574_1.pinMode(P1, OUTPUT);
 pcf8574_1.pinMode(P2, OUTPUT);
 pcf8574_1.pinMode(P3, OUTPUT);
 //пин светодиода на выход, на него мы будем подавать сигнал
 pcf8574_1.pinMode (P4, INPUT_PULLUP); 
 pcf8574_1.pinMode (P5, INPUT_PULLUP); 
 pcf8574_1.pinMode (P6, INPUT_PULLUP); 
 pcf8574_1.pinMode (P7, INPUT_PULLUP);
// Проверка инициализация библиотеки pcf8574
  Serial.print("Init pcf8574...");
  if (pcf8574_1.begin()){
    Serial.println("OK");}
  else{
    Serial.println("ERROR");}
  delay(50);                                        // Необходимо время для инициализации 
}


void loop()
{
//1
 boolean buttonIsUp_1 = pcf8574_1.digitalRead(P4);
 if (buttonWasUp_1 && !buttonIsUp_1) {
  delay(18);
 buttonIsUp_1 = pcf8574_1.digitalRead (P4);
 if (!buttonIsUp_1) {
 ledEnabled_1 = !ledEnabled_1;
 pcf8574_1.digitalWrite(P0, ledEnabled_1);
 }
 }
 buttonWasUp_1 = buttonIsUp_1;
//2
 boolean buttonIsUp_2 = pcf8574_1.digitalRead(P5);
 if (buttonWasUp_2 && !buttonIsUp_2) {
  delay(18);
 buttonIsUp_2 = pcf8574_1.digitalRead (P5);
 if (!buttonIsUp_2) {
 ledEnabled_2 = !ledEnabled_2;
 pcf8574_1.digitalWrite(P1, ledEnabled_2);
 }
 }
 buttonWasUp_2 = buttonIsUp_2;
 //3
 boolean buttonIsUp_3 = pcf8574_1.digitalRead(P6);
 if (buttonWasUp_3 && !buttonIsUp_3) {
  delay(18);
 buttonIsUp_3 = pcf8574_1.digitalRead (P6);
 if (!buttonIsUp_3) {
 ledEnabled_3 = !ledEnabled_3;
 pcf8574_1.digitalWrite(P2, ledEnabled_3);
 }
 }
 buttonWasUp_3 = buttonIsUp_3;
//4
 boolean buttonIsUp_4 = pcf8574_1.digitalRead(P7);
 if (buttonWasUp_4 && !buttonIsUp_4) {
 delay(18);
 buttonIsUp_4 = pcf8574_1.digitalRead (P7);
 if (!buttonIsUp_4) {
 ledEnabled_4 = !ledEnabled_4;
 pcf8574_1.digitalWrite(P3, ledEnabled_4);
 }
 }
 buttonWasUp_4 = buttonIsUp_4;
}
Отправлено 

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

Где схема?

Я так понимаю, это продолжение вчерашнего вопроса
Зачем тогда новая тема??

У меня готовый модуль PCF8574, не отдельная микросхема.

Так там тот вопрос бвл решён.

Это не мешает нарисовать схему.
Как подключены светодиоды - с общим анодом или общим катодом?

Загораются потому что общий анод, и управляются 0-м. По другому никак.

Общий катод.

Если переворачиваю на общий анод, то ни как не горят.

Тогда схему.
Не надо ничего переворачивать!

Да и третье сентября уж прошло…

1 лайк

Самого модуля в программе не было, использовал микросхему.

Неужели сфоткать экран и скинуть фотку на комп проще, чем сделать принтскрин с экрана?

@Icefighter
Что-то я не понял - у вас что, светодиоды и через 8574 и через кнопки подключены?

Нда, и где тут общий, хоть анод, хоть катод?
Где подтяжка I2C, где токоограничивающие резисторы, где выбор адреса PCF?

В этой схеме, это НЕВОЗМОЖНО!
Не заливайте!

Так вот же ж тебе @BOOM схему давал.


Светодиоды по другому к 8574 не подключить. Если только через одно место.
А значит включаться они будут низким уровнем!

1 лайк

У меня готовый модуль.


Прошлая схема, что я сделал не правильная. Спешил…

Я мог в предыдущем посте, более вульгарно выразится, но я не спешу))

1 лайк