Помогите с кодом

wifilan
Offline
Зарегистрирован: 01.12.2014

Всех Приветствую.

Прошу помощи в правке кода. пытаюсь реализовать (переносимый, мобильный) сканер I2C адресов устройств с выводом на дисплей nokia 5110 и применением mega328.

 

== на экран правда выводится пока что только (addr: 8) - дальше начал тупить.

 

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include "Wire.h"
extern "C" { 
#include "utility/twi.h"  // from Wire library, so we can do bus scanning
}
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);
// Scan the I2C bus between addresses from_addr and to_addr.
// On each address, call the callback function with the address and result.
// If result==0, address was found, otherwise, address wasn't found
// (can use result to potentially get other status on the I2C bus, see twi.c)
// Assumes Wire.begin() has already been called

void scanI2CBus(byte from_addr, byte to_addr, 
                void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0; // not used, just an address to feed to twi_writeTo()
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}

// Called when address is found in scanI2CBus()
// Feel free to change this as needed
// (like adding I2C comm code to figure out what kind of I2C device is there)
void scanFunc( byte addr, byte result ) {
  display.print("addr: ");
  display.print(addr,DEC);
  display.println( (result==0) ? " found!":"       ");
  display.println( (addr%4) ? "\t":"\n");
}


byte start_address = 8;       // lower addresses are reserved to prevent conflicts with other protocols
byte end_address = 119;       // higher addresses unlock other modes, like 10-bit addressing

// standard Arduino setup()
void setup()
{
    Wire.begin();
    display.begin();
    display.clearDisplay();   // clears the screen and buffer
    display.setContrast(50);
    display.setTextSize(1);

    Serial.begin(9600);                   // Changed from 19200 to 9600 which seems to be default for Arduino serial monitor
   // display.clearDisplay();   // clears the screen and buffer
   
    

    // start the scan, will call "scanFunc()" on result from each address
    scanI2CBus( start_address, end_address, scanFunc );

    display.println("\ndone");
    display.display();
    
    // Set pin mode so the loop code works ( Not required for the functionality)
    pinMode(13, OUTPUT);
}

// standard Arduino loop()
void loop() 
{
    // Nothing to do here, so we'll just blink the built-in LED
    digitalWrite(13,HIGH);
    delay(300);
    digitalWrite(13,LOW);
    delay(300);
}

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

ну так вы вывели 1 раз и дальше у вас пустой луп - просто мигание 13 пином (лед)

wifilan
Offline
Зарегистрирован: 01.12.2014

нет, я ще ни чего не подключал к интерфейсу I2C

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

И? Вопрос каков?

wifilan
Offline
Зарегистрирован: 01.12.2014

помогите с кодом, что делаю не так.

b707
Offline
Зарегистрирован: 26.05.2017

wifilan пишет:

помогите с кодом, что делаю не так.

на данный момент вы "делаете не так" вот что - неправильно задаете вопрос.

Попытайтесь четко сформулировать, какие именно проблемы у вас на данный момент с тем кодом, который вы привели.

wifilan
Offline
Зарегистрирован: 01.12.2014

на экран выводится (addr: 8)

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

должно отображать адрес подключаемого устройства по шине I2C

JasKo
Offline
Зарегистрирован: 21.11.2015

wifilan пишет:

на экран выводится (addr: 8)

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

должно отображать адрес подключаемого устройства по шине I2C

Ну так перемести 54  строку в 66 строку

wifilan
Offline
Зарегистрирован: 01.12.2014

JasKo пишет:

wifilan пишет:

на экран выводится (addr: 8)

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

должно отображать адрес подключаемого устройства по шине I2C

Ну так перемести 54  строку в 66 строку

теперь вообще пустой экран

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

https://playground.arduino.cc/Main/I2cScanner - взять скетч, дописать туда вывод на дисплей, и не лохматить бабушку.

wifilan
Offline
Зарегистрирован: 01.12.2014

DIYMan пишет:

https://playground.arduino.cc/Main/I2cScanner - взять скетч, дописать туда вывод на дисплей, и не лохматить бабушку.

да не вопрос. кто поможет.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

wifilan пишет:

DIYMan пишет:

https://playground.arduino.cc/Main/I2cScanner - взять скетч, дописать туда вывод на дисплей, и не лохматить бабушку.

да не вопрос. кто поможет.

За тебя туда ещё дисплей прикрутить твой? Делай.