Проблема компиляции

Это выглядит вот так и отлично работает! :+1:

2 лайка

не удивительно, в тебя сам Садман41 поверил, а его чуйка редко подводит

Всем привет! :wave: Есть такой проект https://www.instructables.com/ARDUINO-FM-RADIO-WITH-CLOCK-AND-THERMOMETER/ . Повторил, все работает. Одна проблема- картинка не помещается в экран, хотя экран применен как у автора. Что нужно поправить чтобы картинка была по размеру экрана? Спасибо! :grinning:

Дак у автора и надо спрашивать

скорее всего, ты в define экрана оставил 128x32, а надо его закомментировать и раскомментировать 128x64 I2C. Если нет, то ХЗ, кода нет, гадать не буду.

Внимательно посмотрел на фото. Пошел в мастерскую и отклеил эту чОртову пленку с экранчика!!! Устыдился…

Вставить код форум не разрешает! Можно посмотреть по приведенной ссылке.

Я точно не буду ни по каким ссылкам ходить

вот попытаюсь!

#include "RTClib.h"
RTC_DS1307 rtc;
#include <OneWire.h> 
#include <DallasTemperature.h>
#include <EEPROM.h> // info -> http://tronixstuff.com/2011/03/16/tutorial-your-arduinos-inbuilt-eeprom/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
#define DEBUG 0
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

Adafruit_SSD1306 tft(OLED_RESET);
const int entrada = A0; 
int entradaV = 3; 

int menu;
#define MAXmenu  4 //MENIUL DE BAZA
int menux;
#define MAXmenux  3
static char* menuS[]= {"", "ACORD  MAN", "  VOLUM   ", "ACORD AUTO", " FIX CEAS "};


int volumen, volumenOld=7;
int frecuencia,frecuenciaOld;
int signal_level;
int ora;

unsigned int z,z1;
byte xfrecu,xfrecuOld;
unsigned int estado[6];

unsigned long time,time1,time2,time3;


char buffer[30];
unsigned int RDS[4];
char seg_RDS[8];
char seg_RDS1[64];
char indexRDS1;

char hora,minuto,grupo,versio;
unsigned long julian;

int mezcla;
///////////////////////////////////
//////////////S E T U P ///////////
///////////////////////////////////
void setup() 
{
  sensors.begin();
  rtc.begin();
  Wire.begin();   
  Serial.begin(9600); 
  tft.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  tft.display();
  delay(20);

  // Clear the buffer.
  tft.clearDisplay();

DateTime now = rtc.now();
// read value of last frequency
frecuencia = EEPROM.read(201);
   volumen = EEPROM.read(202);           
if (volumen < 0) volumen = 0;
if (volumen >15) volumen = 15;
if (frecuencia <0) frecuencia = 0;
if (frecuencia >210) frecuencia = 210;
  
  
 //  tft.fillScreen();

   WriteReg(0x02,0xC00d); // write 0xC00d into Reg.2 ( soft reset, enable,RDS, )
   WriteReg(0x05,0x84d8);  // write ,0x84d8 into Reg.3 
   
  time3=time2=time1=time = millis();
  menu=3;
  
  canal(frecuencia);
   //   draw an antenna
   //tft.drawLine(5, 25, 5, 25, WHITE);
   //tft.drawCircle(103,9,2,WHITE);
}
///////////////////////////////////
//////////////L O O P /////////////
///////////////////////////////////
void loop() 
{
  entradaV = analogRead(entrada);

//////////////////////////////////////////////////////////////////////   
// Buton meniu(mijloc)                                              //
//////////////////////////////////////////////////////////////////////   
 
 if(entradaV>500 && entradaV<524)
   {
    menu++;
    if(menu>MAXmenu)menu=1;
    Visualizar();   
    while(1020>analogRead(entrada))delay(5);
   }
///////////////////////////////////////////////////////////////////////////            
// Buton dreapta (+)              ///// ( - ) ///// MENIU ///// ( + ) /////
///////////////////////////////////////////////////////////////////////////
 DateTime now = rtc.now();
int anul;
int luna;
int ziua;
int ora;
int minutul;
int secunda;

    anul = now.year();
    luna = now.month();
    ziua = now.day();
    ora = now.hour();
    minutul = now.minute();
    secunda = now.second();
 
 if( entradaV<50)
   {
    menux++;
    if(menux>MAXmenux)menux=MAXmenux;
    switch(menu)
      {
        case 1:  //cautare pas cu pas in sus
          frecuencia++;
          if(frecuencia>210)frecuencia=210; // frecvenţa limită superioară
          delay(130);
        break;  
        case 2: //crestere volum
           volumen++;
           if(volumen>15)volumen=15;
           while(1020>analogRead(entrada))delay(5);
        break; 
        case 3: //cautare automata in sus
           busqueda(0); 
           while(1020>analogRead(entrada))delay(5);
        break;
        case 4: //crestere MINUTE
           secunda=0;
           minutul++;
           //if (minutul > 59) minutul = 0 & ora++;
           if (minutul > 59) minutul = 0;
           rtc.adjust(DateTime(anul,luna,ziua,ora,minutul,0));
           delay(200); 
        break;
        
      }              
   }
/////////////////////////////////////////////////////////////////////////   
// Buton stanga (-)                                                    //
/////////////////////////////////////////////////////////////////////////
 if( entradaV<700 && entradaV>660)
   {
    menux--;
    if(menux<1)menux=1; 
    #if DEBUG 
      Serial.print("menux = " );  Serial.println(menux);
    #endif   
    switch(menu)
      {
        case 1: // cautare pas cu pas in jos
            frecuencia--; 
            if(frecuencia<0)frecuencia=0;    
            delay(130);
        break;  
        case 2: // micsorare volum
            volumen--;
            if(volumen<0)volumen=0;
            while(1020>analogRead(entrada))delay(5);
        break; 
        case 3:
            busqueda(1);//cautare automata in jos
            while(1020>analogRead(entrada))delay(5);
        break; 
        case 4: //crestere ORA
            secunda=0;
           ora++;
           //if (minutul > 59) minutul = 0 & ora++;
           if (ora > 23) ora = 0;
           rtc.adjust(DateTime(anul,luna,ziua,ora,minutul,0));
           delay(200); 
        break;
      }
    
   }
      
      if( millis()-time2>50)
          {
            ReadEstado();
            time1 = millis(); 
          }
     if( millis()-time3>500)
          {
            time3 = millis();
            Visualizar(); 
          }

    if( frecuencia!=frecuenciaOld)
          {  
            frecuenciaOld=frecuencia;                        
            z=870+frecuencia;
            EEPROM.write(201,frecuencia);
         
            sprintf(buffer,"%04d ",z); //Afisare frecventa
            tft.setCursor(0,25); 
            tft.setTextSize(3);    
            tft.setTextColor(WHITE, BLACK);
          for(z=0;z<5;z++)
        {
          if (z==0) 
               {
               if (frecuencia < 130) tft.print(" ");
               else tft.print(buffer[0]);
               tft.setTextColor(WHITE, BLACK);
               }
                     
           if(z==3)  tft.print(".");
           tft.setTextColor(WHITE, BLACK); 
           if (z>0) tft.print(buffer[z]);
           tft.setTextColor(WHITE, BLACK);  
         }
               
          tft.setCursor(95,25);
          tft.setTextSize(2);
          tft.setTextColor(WHITE, BLACK);  
          tft.print("FM"); 
          tft.display();
          canal(frecuencia);
          //clearRDS();
       }     

    //Modifivare volum audio        
    if(volumen!=volumenOld)
        { 
          volumenOld=volumen;
          sprintf(buffer,"VOLUM:%02d",(volumen));
          tft.setCursor(0,15);
          tft.setTextSize(1);
          tft.setTextColor(WHITE, BLACK );
          tft.print(buffer);             
          WriteReg(5, 0x84D0 | volumen);
          EEPROM.write(202,volumen);
        }       
}




void busqueda(byte direc)
{
  byte i;
  if(!direc) WriteReg(0x02,0xC30d);
  else  WriteReg(0x02,0xC10d);
  
  for(i=0;i<10;i++)
    {
      delay(200);      
      ReadEstado();      
      if(estado[0]&0x4000)
        {
          frecuencia=estado[0] & 0x03ff;  
          break;
        }       
    }
}



void Visualizar(void)
{ 
   
    // tft.setCursor(3, 13); tft.setTextSize(2); tft.setTextColor(WHITE, BLACK); tft.print("FM"); 
    // tft.setCursor(27, 20); tft.setTextSize(1); tft.setTextColor(YELLOW, BLACK); tft.print("-Radio-"); 
      sprintf(buffer,"%s",menuS[menu]);
      
      tft.setCursor(0,50);
      tft.setTextSize(2);
      tft.setTextColor(BLACK, WHITE);
      tft.print(buffer);
       
       //Detectar se&#241;al stereo
       tft.setCursor(90,40);
       tft.setTextSize(1);
       tft.setTextColor(WHITE, BLACK);
       if((estado[0] & 0x0400)==0)  
       tft.print(" MONO ");
       else
       tft.print("STEREO");
       
       tft.setTextColor(WHITE, BLACK);       
       z=estado[1]>>10;
       sprintf(buffer,"SEMNAL:%02d" ,z);
       tft.setCursor(65,15);
       tft.setTextSize(1);
       tft.setTextColor(WHITE, BLACK);
       tft.print(buffer);
     
     
       DateTime now = rtc.now();  
       sensors.requestTemperatures();
       float temp = (sensors.getTempCByIndex(0));
  /*tft.setCursor(0,0);
  tft.setTextSize(1);
  tft.setTextColor(WHITE, BLACK );
  if (now.day() < 10) tft.print("0");
  tft.print(now.day(), DEC);
  tft.print('/');
  if (now.month() < 10) tft.print("0");
  tft.print(now.month(), DEC);
  tft.print('/');
  tft.print(now.year(), DEC);*/
  
  tft.setCursor(0,0);
  tft.setTextSize(1);
  tft.setTextColor(WHITE, BLACK );
  if (now.hour() < 10) tft.print("0");
  tft.print(now.hour(), DEC);
  tft.print(':');
  if (now.minute() < 10) tft.print("0");
  tft.print(now.minute(), DEC);
  tft.print(':');
  if (now.second() < 10) tft.print("0");
  tft.print(now.second(), DEC);

  tft.setCursor(90,0);
  tft.setTextSize(1);
  tft.setTextColor(WHITE, BLACK );
  if (temp < 10) tft.print(" ");
  tft.print(temp,1);
  tft.print((char)247);
  tft.print('C');
  
  tft.setCursor(0,7);
  tft.setTextSize(1);
  tft.setTextColor(WHITE, BLACK );
  tft.print("---------------------");
  
      tft.display();
       //tft.print("/15");
       //ver RADIO_TXT pozitia rds
       //tft.setCursor(20,47);
       //tft.setTextColor(WHITE, BLACK);
       z1=indexRDS1;
       for (z=0;z<12;z++)
       {           
         //tft.setTextColor(WHITE, BLACK);
         //tft.print(seg_RDS1[z1]);
         //tft.setTextColor(WHITE, BLACK);
         z1++;
         tft.setTextColor(WHITE, BLACK); 
         if(z1>35)z1=0;           
       }
       indexRDS1++; if(indexRDS1>35) indexRDS1=0;
       
      frecuencia=estado[0] & 0x03ff;  
    
  }

void canal( int canal)
     {
       byte numeroH,numeroL;
       
       numeroH=  canal>>2;
       numeroL = ((canal&3)<<6 | 0x10); 
       Wire.beginTransmission(0x11);
       Wire.write(0x03);
         Wire.write(numeroH); // write frequency into bits 15:6, set tune bit         
         Wire.write(numeroL);
         Wire.endTransmission();
       }
       
void WriteReg(byte reg,unsigned int valor)
{
  Wire.beginTransmission(0x11);
  Wire.write(reg); Wire.write(valor >> 8); Wire.write(valor & 0xFF);
  Wire.endTransmission();
  //delay(50);
}

//RDA5807_adrs=0x10;
// I2C-Address RDA Chip for sequential  Access
int ReadEstado()
{
 Wire.requestFrom(0x10, 12); 
 for (int i=0; i<6; i++) { estado[i] = 256*Wire.read ()+Wire.read(); }
 Wire.endTransmission();

}

//READ RDS  Direccion 0x11 for random access

Внутри этого файла нада матреть.

Вот он. И что здесь править, пожалуйста?
/*!

  • @file Adafruit_SSD1306.h
  • This is part of for Adafruit’s SSD1306 library for monochrome
  • OLED displays: LCDs & Displays, OLED Products Category on Adafruit Industries
  • These displays use I2C or SPI to communicate. I2C requires 2 pins
  • (SCL+SDA) and optionally a RESET pin. SPI requires 4 pins (MOSI, SCK,
  • select, data/command) and optionally a reset pin. Hardware SPI or
  • ‘bitbang’ software SPI are both supported.
  • Adafruit invests time and resources providing this open source code,
  • please support Adafruit and open-source hardware by purchasing
  • products from Adafruit!
  • Written by Limor Fried/Ladyada for Adafruit Industries, with
  • contributions from the open source community.
  • BSD license, all text above, and the splash screen header file,
  • must be included in any redistribution.

*/

#ifndef Adafruit_SSD1306_H
#define Adafruit_SSD1306_H

// ONE of the following three lines must be #defined:
//#define SSD1306_128_64 ///< DEPRECTAED: old way to specify 128x64 screen
#define SSD1306_128_32 ///< DEPRECATED: old way to specify 128x32 screen
//#define SSD1306_96_16 ///< DEPRECATED: old way to specify 96x16 screen
// This establishes the screen dimensions in old Adafruit_SSD1306 sketches
// (NEW CODE SHOULD IGNORE THIS, USE THE CONSTRUCTORS THAT ACCEPT WIDTH
// AND HEIGHT ARGUMENTS).

// Uncomment to disable Adafruit splash logo
//#define SSD1306_NO_SPLASH

#if defined(ARDUINO_STM32_FEATHER)
typedef class HardwareSPI SPIClass;
#endif

#include <Adafruit_GFX.h>
#include <SPI.h>
#include <Wire.h>

#if defined(AVR)
typedef volatile uint8_t PortReg;
typedef uint8_t PortMask;
#define HAVE_PORTREG
#elif defined(SAM3X8E)
typedef volatile RwReg PortReg;
typedef uint32_t PortMask;
#define HAVE_PORTREG
#elif (defined(arm) || defined(ARDUINO_FEATHER52)) &&
!defined(ARDUINO_ARCH_MBED) && !defined(ARDUINO_ARCH_RP2040)
typedef volatile uint32_t PortReg;
typedef uint32_t PortMask;
#define HAVE_PORTREG
#endif

/// The following “raw” color names are kept for backwards client compatability
/// They can be disabled by predefining this macro before including the Adafruit
/// header client code will then need to be modified to use the scoped enum
/// values directly
#ifndef NO_ADAFRUIT_SSD1306_COLOR_COMPATIBILITY
#define BLACK SSD1306_BLACK ///< Draw ‘off’ pixels
#define WHITE SSD1306_WHITE ///< Draw ‘on’ pixels
#define INVERSE SSD1306_INVERSE ///< Invert pixels
#endif
/// fit into the SSD1306_ naming scheme
#define SSD1306_BLACK 0 ///< Draw ‘off’ pixels
#define SSD1306_WHITE 1 ///< Draw ‘on’ pixels
#define SSD1306_INVERSE 2 ///< Invert pixels

#define SSD1306_MEMORYMODE 0x20 ///< See datasheet
#define SSD1306_COLUMNADDR 0x21 ///< See datasheet
#define SSD1306_PAGEADDR 0x22 ///< See datasheet
#define SSD1306_SETCONTRAST 0x81 ///< See datasheet
#define SSD1306_CHARGEPUMP 0x8D ///< See datasheet
#define SSD1306_SEGREMAP 0xA0 ///< See datasheet
#define SSD1306_DISPLAYALLON_RESUME 0xA4 ///< See datasheet
#define SSD1306_DISPLAYALLON 0xA5 ///< Not currently used
#define SSD1306_NORMALDISPLAY 0xA6 ///< See datasheet
#define SSD1306_INVERTDISPLAY 0xA7 ///< See datasheet
#define SSD1306_SETMULTIPLEX 0xA8 ///< See datasheet
#define SSD1306_DISPLAYOFF 0xAE ///< See datasheet
#define SSD1306_DISPLAYON 0xAF ///< See datasheet
#define SSD1306_COMSCANINC 0xC0 ///< Not currently used
#define SSD1306_COMSCANDEC 0xC8 ///< See datasheet
#define SSD1306_SETDISPLAYOFFSET 0xD3 ///< See datasheet
#define SSD1306_SETDISPLAYCLOCKDIV 0xD5 ///< See datasheet
#define SSD1306_SETPRECHARGE 0xD9 ///< See datasheet
#define SSD1306_SETCOMPINS 0xDA ///< See datasheet
#define SSD1306_SETVCOMDETECT 0xDB ///< See datasheet

#define SSD1306_SETLOWCOLUMN 0x00 ///< Not currently used
#define SSD1306_SETHIGHCOLUMN 0x10 ///< Not currently used
#define SSD1306_SETSTARTLINE 0x40 ///< See datasheet

#define SSD1306_EXTERNALVCC 0x01 ///< External display voltage source
#define SSD1306_SWITCHCAPVCC 0x02 ///< Gen. display voltage from 3.3V

#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26 ///< Init rt scroll
#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27 ///< Init left scroll
#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 ///< Init diag scroll
#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A ///< Init diag scroll
#define SSD1306_DEACTIVATE_SCROLL 0x2E ///< Stop scroll
#define SSD1306_ACTIVATE_SCROLL 0x2F ///< Start scroll
#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 ///< Set scroll range

// Deprecated size stuff for backwards compatibility with old sketches
#if defined SSD1306_128_64
#define SSD1306_LCDWIDTH 128 ///< DEPRECATED: width w/SSD1306_128_64 defined
#define SSD1306_LCDHEIGHT 64 ///< DEPRECATED: height w/SSD1306_128_64 defined
#endif
#if defined SSD1306_128_32
#define SSD1306_LCDWIDTH 128 ///< DEPRECATED: width w/SSD1306_128_32 defined
#define SSD1306_LCDHEIGHT 32 ///< DEPRECATED: height w/SSD1306_128_32 defined
#endif
#if defined SSD1306_96_16
#define SSD1306_LCDWIDTH 96 ///< DEPRECATED: width w/SSD1306_96_16 defined
#define SSD1306_LCDHEIGHT 16 ///< DEPRECATED: height w/SSD1306_96_16 defined
#endif

/*!
@brief Class that stores state and functions for interacting with
SSD1306 OLED displays.
*/
class Adafruit_SSD1306 : public Adafruit_GFX {
public:
// NEW CONSTRUCTORS – recommended for new projects
Adafruit_SSD1306(uint8_t w, uint8_t h, TwoWire *twi = &Wire,
int8_t rst_pin = -1, uint32_t clkDuring = 400000UL,
uint32_t clkAfter = 100000UL);
Adafruit_SSD1306(uint8_t w, uint8_t h, int8_t mosi_pin, int8_t sclk_pin,
int8_t dc_pin, int8_t rst_pin, int8_t cs_pin);
Adafruit_SSD1306(uint8_t w, uint8_t h, SPIClass *spi, int8_t dc_pin,
int8_t rst_pin, int8_t cs_pin, uint32_t bitrate = 8000000UL);

// DEPRECATED CONSTRUCTORS - for back compatibility, avoid in new projects
Adafruit_SSD1306(int8_t mosi_pin, int8_t sclk_pin, int8_t dc_pin,
int8_t rst_pin, int8_t cs_pin);
Adafruit_SSD1306(int8_t dc_pin, int8_t rst_pin, int8_t cs_pin);
Adafruit_SSD1306(int8_t rst_pin = -1);

~Adafruit_SSD1306(void);

bool begin(uint8_t switchvcc = SSD1306_SWITCHCAPVCC, uint8_t i2caddr = 0,
bool reset = true, bool periphBegin = true);
void display(void);
void clearDisplay(void);
void invertDisplay(bool i);
void dim(bool dim);
void drawPixel(int16_t x, int16_t y, uint16_t color);
virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
void startscrollright(uint8_t start, uint8_t stop);
void startscrollleft(uint8_t start, uint8_t stop);
void startscrolldiagright(uint8_t start, uint8_t stop);
void startscrolldiagleft(uint8_t start, uint8_t stop);
void stopscroll(void);
void ssd1306_command(uint8_t c);
bool getPixel(int16_t x, int16_t y);
uint8_t *getBuffer(void);

protected:
inline void SPIwrite(uint8_t d) attribute((always_inline));
void drawFastHLineInternal(int16_t x, int16_t y, int16_t w, uint16_t color);
void drawFastVLineInternal(int16_t x, int16_t y, int16_t h, uint16_t color);
void ssd1306_command1(uint8_t c);
void ssd1306_commandList(const uint8_t *c, uint8_t n);

SPIClass *spi; ///< Initialized during construction when using SPI. See
///< SPI.cpp, SPI.h
TwoWire *wire; ///< Initialized during construction when using I2C. See
///< Wire.cpp, Wire.h
uint8_t *buffer; ///< Buffer data used for display buffer. Allocated when
///< begin method is called.
int8_t i2caddr; ///< I2C address initialized when begin method is called.
int8_t vccstate; ///< VCC selection, set by begin method.
int8_t page_end; ///< not used
int8_t mosiPin; ///< (Master Out Slave In) set when using SPI set during
///< construction.
int8_t clkPin; ///< (Clock Pin) set when using SPI set during construction.
int8_t dcPin; ///< (Data Pin) set when using SPI set during construction.
int8_t
csPin; ///< (Chip Select Pin) set when using SPI set during construction.
int8_t rstPin; ///< Display reset pin assignment. Set during construction.

#ifdef HAVE_PORTREG
PortReg *mosiPort, *clkPort, *dcPort, *csPort;
PortMask mosiPinMask, clkPinMask, dcPinMask, csPinMask;
#endif
#if ARDUINO >= 157
uint32_t wireClk; ///< Wire speed for SSD1306 transfers
uint32_t restoreClk; ///< Wire speed following SSD1306 transfers
#endif
uint8_t contrast; ///< normal contrast setting for this device
#if defined(SPI_HAS_TRANSACTION)
protected:
// Allow sub-class to change
SPISettings spiSettings;
#endif
};

#endif // Adafruit_SSD1306_H

Хреново быть по пояс деревяным. Замени это

На это

// ONE of the following three lines must be #defined:
#define SSD1306_128_64 ///< DEPRECTAED: old way to specify 128x64 screen
//#define SSD1306_128_32 ///< DEPRECATED: old way to specify 128x32 screen
//#define SSD1306_96_16 ///< DEPRECATED: old way to specify 96x16 screen

2 лайка

Так как программу ты вставил БЕЗ номеров строк, ищи сам где это.

Дет! Ты зачем в эту клоунаду вмешиваешься? Это ж прикольно!

2ТС:

  1. в твоем коде олед ресет назначен на пин 4. На фото дисплей без ножки ресет.
  2. Для таких тупых как ты в ИДЕ есть примеры сразу в библиотеке адафрутовской. Пример называется ssd1306_128x64_i2c. и начинается с вот таких строк, убрав комменты:
include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library. 
// On an arduino UNO:       A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO:   2(SDA),  3(SCL), ...
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

для китайских дисплеев скорее всего и для 128х64 тоже адрес 0x3C. А ресет нужно в -1 поставить.
Что-то еще хочешь узнать? Закон Ньютона там, Ома, может Бойля-Мариотта?

Не льстите себе, судя по этому топику - не умеете.

Значит, не судьба! Ищите такой, который разрешит.

Все встало на свои места. Спасибо! :+1:

Нальёшь при случае.

4 лайка