Простые вопросы.

Marolex
Offline
Зарегистрирован: 05.09.2016

Здравствуйте.

Ответе, пожалуйста, на несколько вопросов.

1)  Устройства I2C имеют адрес, этот адрес прописан в устройстве, или его назначает программа?

Поясню: LCD 1602 подключен по I2C с адресом 0х3F;  RTC DS1307, то же по I2C, но как мне узнать его адрес? Или он не нужен? Хотя два у-ва подкл. к одним и тем же портам ардуины....

2)  Для одного устройства, пусть LCD1602, есть несколько библиотек. Для каждой библиотеки свой набор команд? В каком файле найти описание команд этой библиотеки? Т.е. есть LiquidCrystal_I2C и есть, скажем, LiquidCrystal_I2C_fedor. В ардуино ИДЕ они выглядят одинаково, как #include <LiquidCrystal_I2C.h>, но команда, допустим, Serial.begin();в одной работает, а в другой нет.
 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

1. Запусти скетч i2cscaner он тебе выдаст адреса всех устройств на шине

kalapanga
Offline
Зарегистрирован: 23.10.2016

2. Читайте описание библиотек. У нормальных авторов обычно понятно - оригинальная ли это библиотека, если нет, то на основе чего сделана и что собственно добавлено/изменено. Если установлено две библиотеки с одинаковыми именами, то компилятор об этом предупредит и возьмёт ту, что ему больше понравится. Читайте сообщения компилятора.

Marolex
Offline
Зарегистрирован: 05.09.2016

Спасибо. Я примерно так и думал. Вот только не во всех библиотеках есть описание, особенно на русском, и поэтому каждое красное сообщение в IDE-это паника. Это все лирика....

   Да, я нашел скетч сканера. Также я пользуюсь программой FLProg.

Только столкнулся с проблемой: DS1307 не хочет определятся. Модуль такой (https://robotdyn.ru/catalog/development_boards/plata_rasshireniya_wifi_d...) куплен в Китае.

Подключен вроде верно, а именно: SCL--A5 ; SDA--A4 и VCC и GND. Может модуль дрянь, но DS1302, с этим вообще плохо, (http://overskill.alexshu.com/ds1302-real-time-clock-w-arduino/) то же не определяется. Вывод-мой косяк, понять бы где.....

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Marolex, т.е. Вы подключаете к Ардуино два модуля и сканер ни один из них не определяет?

kalapanga
Offline
Зарегистрирован: 23.10.2016

Наверное фотку надо собранной схемы, только чтобы всё четко видно было, что куда подключено. И что именно пишет i2cscanner. 

Marolex
Offline
Зарегистрирован: 05.09.2016

andriano  Да оба, только не сразу, по очереди. Не могу понять определяет или нет. Адрес модуля не пишет, а монитор выдает нули и год 2118, Время не идёт.

kalapanga  Я пока не умею сюда фото вставлять, пока сложно. По ссылке вроде большие картинки.

На модуле написано D1-SCL, D2-SDA. Так и подключаю к ардуино нано.

D1-SCLна модуле к A5 на ардуино ;D2-SDAна модуле к A4 на ардуино и VCC (+5В) и GND. Я пробовал 3.3В подкл.

 

 
 
 

 

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Ежели адрес не показывает, значит обмена с устройством нет. А время показывается дефолтовое для библиотеки.

Нуидела
Offline
Зарегистрирован: 31.01.2017

а адрес экрана сканер показывает?

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

Marolex пишет:
Я пока не умею сюда фото вставлять, пока сложно.

По этой ссылке инструкция. С 18-го сообщения.

 

Marolex
Offline
Зарегистрирован: 05.09.2016

Нуидела Да, показывает, уточню, адрес И2С модуля подкл. к дисплею, показывает.

 

Нуидела
Offline
Зарегистрирован: 31.01.2017

Так в скетче Вы указываете адрес дисплейного модуля, а для модуля часов адрес вроде не нужен.
​(хотя конечно сканер должен был его показать, при условии правильного подключения).
Можно пойти по простому пути добавлять модули в проект по очереди
(сначала добиться что-бы заработал модуль часиков, потом к ним добавить экран).

inspiritus
Offline
Зарегистрирован: 17.12.2012

Иногда люди забывают подтянуть и2с к плюсу.

Marolex
Offline
Зарегистрирован: 05.09.2016

У меня два вида DS1307 ПЕРВЫЙ ("старый образец") (https://www.tdegypt.com/product/real-time-clock-module-rtc-ds1307-withou...) работает, часы идут, адрес выдает.

ВТОРОЙ ("новый") от "Рободин" ссылка выше, не могу подключить. Часы не идут, адрес не появляется. Вот мне стало интересно, только у меня так, или я что делаю не так. Видимо такой модуль только у меня, ну или второе.

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

в любом случае, удасца/не удасца запустить, выкинь 1307, купи за 50 рублей DS3231.  Никогда не пожалеешь потом.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Marolex пишет:

 

ВТОРОЙ ("новый") от "Рободин" ссылка выше, не могу подключить. 

 

у меня двое таких - работают отлично

Marolex
Offline
Зарегистрирован: 05.09.2016

andycat Может расскажете как Вы его инициализировали? Какой скетч у Вас? Я понимаю, что проблема в моем не знании.

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Скетч стандартный, библиотека ds1307 master, скинуть только в пн смогу, проверьте полярность батареи вставленной в модуль, я сначала ошибся и долго не мог понять почему не работает.

Marolex
Offline
Зарегистрирован: 05.09.2016

И такая библиотека есть. А батарейка обязательна?! Он, что без батареи в принципе не работает??? Я пробовал и так и так, только другой модуль работает без батареи.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Смысл часов без батареи?

Marolex
Offline
Зарегистрирован: 05.09.2016

Я так понял, батарея в модуле часов нужна, что бы время не обнулялось (не сбивалось) при откл. ардуино от питания. Модуль должен инициализироваться и работать без батареи. Но я не об этом. Я не могу их заставить идти и сканер И2С показывает только подкл. дисплей 1602, а DS1307 не видит. Я и спрашиваю в чем кроется моя ошибка.

Ni1s0n
Offline
Зарегистрирован: 26.03.2018

Добрый всем день, кто мне подскажет что я делаю не так.

вот скетч

#include <RCSwitch.h>
#define REL 7
RCSwitch mySwitch = RCSwitch();

void setup() {
    Serial.begin(115200);
    pinMode(REL, OUTPUT);
    pinMode(14, OUTPUT);
    digitalWrite(REL, HIGH);
    mySwitch.enableReceive(0);
}

void loop() {
    if (mySwitch.getReceivedValue()) { 
    
        int value = mySwitch.getReceivedValue();

        if( value == 0 ) {
            Serial.print( "Unkown encoding" );
        }
        else { 
          Serial.print( "Recived" );
          Serial.print( mySwitch.getReceivedValue() );
          Serial.print( " / ");
          Serial.print( mySwitch.getReceivedBitlength() );
          Serial.print( "Bit, "); 
          Serial.println( "Protocol: " );
          Serial.print( mySwitch.getReceivedProtocol() );
         }
        if (mySwitch.getReceivedValue()== 6893657)
        {
          digitalWrite(REL, LOW);
        } 
   //    if(digitalRead(14)==HIGH)//если кнопка нажата ...
    //     {
    //      digitalWrite(REL, HIGH);
   //     }  
        mySwitch.resetAvailable(); 
      }
      
  }

 

 
не получается сбросить реле спомощью кнопки вручную.
и хочу чтобы на несколько адресов входящих реагировало.
trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Никто не ответит. Исправьте.
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...