va_cristi Postat Ianuarie 24, 2023 Partajează Postat Ianuarie 24, 2023 Salutare! Am incercat sa incarc in EEPROM-ul extern, symbol.uri cu dimensiunea de 8x8pixeli sau 8x16pixeli si am reusit: #include <Wire.h> #include <EEPROM.h> #include <Adafruit_SSD1306.h> #define OLED_ADDR 0x3C #define EEPROM_ADDR 0x50 Adafruit_SSD1306 display(OLED_ADDR); // byte symbol[8] = {0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09}; byte symbol[16] = {0XFF,0X81,0XC5,0X6E,0X7E,0X3C,0XBC,0X98,0X18,0X24,0X24,0X42,0X52,0XB9,0XFD,0XFF}; void setup() { Wire.begin(); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); /* //write symbol to EEPROM for (int i = 0; i < 8; i++) { EEPROM.write(i, symbol[i]); } //read symbol from EEPROM for (int i = 0; i < 8; i++) { symbol[i] = EEPROM.read(i); } //display symbol for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { if (symbol[i] & (0x01 << j)) { display.drawPixel(i, j, WHITE); } } } */ //write symbol to EEPROM for (int i = 0; i < 16; i++) { EEPROM.write(i, symbol[i]); } delay(2000); //read symbol from EEPROM for (int i = 0; i < 16; i++) { symbol[i] = EEPROM.read(i); } //display symbol for (int i = 0; i < 8; i++) { for (int j = 0; j < 16; j++) { if (symbol[j] & (0x01 << i)) { display.drawPixel(i, j, WHITE); } } } display.display(); } void loop() { //nothing to do here } Dar cand am vrut sa adaug un symbol de 32x32pixeli, nu prea merge imi afiseaza cu totul altceva: pe orizontala 32pixeli, pe verticala doar 16pixeli. #include <Wire.h> #include <EEPROM.h> #include <Adafruit_SSD1306.h> #define OLED_ADDR 0x3C #define EEPROM_ADDR 0x50 // eeprom chip 24LC256 Adafruit_SSD1306 display(OLED_ADDR); // byte symbol[8] = {0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09}; byte symbol[32][4] = { // 32x32pixeli 0X00, 0X0F, 0XF0, 0X00, 0X00, 0X70, 0X0E, 0X00, 0X01, 0X80, 0X03, 0X80, 0X03, 0X07, 0XF8, 0XC0, 0X04, 0X06, 0X0E, 0X20, 0X08, 0X01, 0X81, 0X10, 0X10, 0X07, 0X81, 0X88, 0X30, 0X08, 0X00, 0X8C, 0X24, 0X18, 0X00, 0X44, 0X4C, 0XF0, 0X00, 0X46, 0X54, 0XC0, 0X00, 0X42, 0X54, 0X20, 0X00, 0X42, 0X93, 0X10, 0X00, 0X41, 0X91, 0X98, 0X00, 0X41, 0X90, 0X8F, 0X00, 0X21, 0X90, 0X60, 0X80, 0X19, 0X80, 0X20, 0X60, 0X01, 0X80, 0X20, 0X38, 0X01, 0X80, 0X40, 0X0E, 0X01, 0X80, 0X20, 0X02, 0X03, 0X40, 0X20, 0X04, 0X02, 0X40, 0X18, 0X04, 0X02, 0X60, 0X08, 0X08, 0X06, 0X20, 0X04, 0X18, 0X04, 0X30, 0X04, 0X60, 0X08, 0X10, 0X0D, 0X80, 0X18, 0X08, 0X09, 0X00, 0X10, 0X04, 0X06, 0X00, 0X60, 0X03, 0X06, 0X00, 0XC0, 0X01, 0XC0, 0X03, 0X00, 0X00, 0X78, 0X1E, 0X00, 0X00, 0X0F, 0XF0, 0X00, }; void setup() { Wire.begin(); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); delay(3000); for (int i = 0; i < 32; i++) { // [32] reprezintă numărul de linii (pixeli pe orizontală) for (int j = 0; j < 4; j++) { // [4] reprezinta numarul de octeti necesari pentru a salva valoarea fiecarui pixel // 32 pixeli necesita 32/8 = 4 octeti EEPROM.write(i * 4 + j, symbol[i][j]); } } for (int i = 0; i < 32; i++) { for (int j = 0; j < 4; j++) { symbol[i][j] = EEPROM.read(i * 4 + j); } } for (int i = 0; i < 32; i++) { for (int j = 0; j < 32; j++) { if (symbol[i / 8][i % 8] & (0x01 << j)) { display.drawPixel(i, j, WHITE); } } } display.display(); } void loop() { //nothing to do here } Stie cineva unde am gresit? Link spre comentariu
va_cristi Postat Ianuarie 27, 2023 Autor Partajează Postat Ianuarie 27, 2023 Am incercat ambele variante si tot nu functioneaza corespunzator. Link spre comentariu
va_cristi Postat Ianuarie 27, 2023 Autor Partajează Postat Ianuarie 27, 2023 A mers dle. Multumesc frumos! Acuma mai este o problema. Nu incarca in EERPOM-ul extern. O sa incerc cu o librarie dedicata pt EEPROM-urile externe. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum