Помогите с кодом
- Войдите на сайт для отправки комментариев
Вс, 04/02/2018 - 22:14
Всех Приветствую.
Прошу помощи в правке кода. пытаюсь реализовать (переносимый, мобильный) сканер 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); }
ну так вы вывели 1 раз и дальше у вас пустой луп - просто мигание 13 пином (лед)
нет, я ще ни чего не подключал к интерфейсу I2C
И? Вопрос каков?
помогите с кодом, что делаю не так.
помогите с кодом, что делаю не так.
на данный момент вы "делаете не так" вот что - неправильно задаете вопрос.
Попытайтесь четко сформулировать, какие именно проблемы у вас на данный момент с тем кодом, который вы привели.
на экран выводится (addr: 8)
и больше ничего, не зависимо подключено или нет устройство с каким либо адресом.
должно отображать адрес подключаемого устройства по шине I2C
на экран выводится (addr: 8)
и больше ничего, не зависимо подключено или нет устройство с каким либо адресом.
должно отображать адрес подключаемого устройства по шине I2C
Ну так перемести 54 строку в 66 строку
на экран выводится (addr: 8)
и больше ничего, не зависимо подключено или нет устройство с каким либо адресом.
должно отображать адрес подключаемого устройства по шине I2C
Ну так перемести 54 строку в 66 строку
теперь вообще пустой экран
https://playground.arduino.cc/Main/I2cScanner - взять скетч, дописать туда вывод на дисплей, и не лохматить бабушку.
https://playground.arduino.cc/Main/I2cScanner - взять скетч, дописать туда вывод на дисплей, и не лохматить бабушку.
да не вопрос. кто поможет.
https://playground.arduino.cc/Main/I2cScanner - взять скетч, дописать туда вывод на дисплей, и не лохматить бабушку.
да не вопрос. кто поможет.
За тебя туда ещё дисплей прикрутить твой? Делай.