# [exemplo] I2C OLED

#### Objetivo:

Demonstrar o uso de ecrã OLED com placa Arduino compatível UNO para exibir texto.

#### Lista de material:

<table border="1" id="bkmrk-%28a%29-%28b%29-fig.1" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50.0494%;">[![board_overview.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-overview.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-overview.png)</td><td style="width: 50.0494%;">[![board_drawing.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/board-drawing.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/board-drawing.png)</td></tr><tr><td colspan="2" style="width: 100.099%;">Fig.1 - Placa Arduino compatível UNO.</td></tr></tbody></table>

<table border="1" id="bkmrk-%28a%29-%28b%29-fig2." style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50.0494%;">[![oled.jpg](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/oled.jpg)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/oled.jpg)</td><td style="width: 50.0494%;">[![olde_i2c.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/olde-i2c.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/olde-i2c.png)</td></tr><tr><td colspan="2" style="width: 100.099%;">Fig.2 - Ecrã OLED (organic light-emitting diode) SSD1306 de 0,96 polegadas com resolução de 128×64.</td></tr></tbody></table>

##### Set-up

<table border="1" id="bkmrk-placa-arduino-compat" style="border-collapse: collapse; width: 100%;"><tbody><tr><td colspan="3" style="width: 100.082%;">[![olde_i2c_ex.png](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/scaled-1680-/olde-i2c-ex.png)](https://kb.deec.uc.pt/uploads/images/gallery/2024-04/olde-i2c-ex.png)</td></tr><tr><td class="align-center" style="width: 33.3608%;">placa Arduino compatível UNO</td><td style="width: 33.3608%;">  
</td><td class="align-center" style="width: 33.3608%;">ecrã OLED</td></tr><tr><td class="align-right" style="width: 33.3608%;">3.3V</td><td class="align-center" style="width: 33.3608%;"><span style="color: #e03e2d;">----------------------</span></td><td style="width: 33.3608%;">VCC</td></tr><tr><td class="align-right" style="width: 33.3608%;">GND</td><td class="align-center" style="width: 33.3608%;">----------------------</td><td style="width: 33.3608%;">GND</td></tr><tr><td class="align-right" style="width: 33.3608%;">A4</td><td class="align-center" style="width: 33.3608%;"><span style="color: #2dc26b;">----------------------</span></td><td style="width: 33.3608%;">SCA</td></tr><tr><td class="align-right" style="width: 33.3608%;">A5</td><td class="align-center" style="width: 33.3608%;"><span style="color: #236fa1;">-----------------------</span></td><td style="width: 33.3608%;">SDL</td></tr><tr><td colspan="3" style="width: 100.082%;">Fig.3 - Montagem ilustrativa das ligações a estabelecer entre placa de desenvolvimento e o ecrã OLED.</td></tr></tbody></table>

##### Biblioteca 

<table border="1" id="bkmrk-%28a%29-%28b%29-%28c%29-%28d%29-fig." style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 50.0494%;">[![CZevjQJ.png](https://i.imgur.com/CZevjQJ.png)](https://i.imgur.com/CZevjQJ.png)</td><td style="width: 50.0494%;">[![lYBzNfV.png](https://i.imgur.com/lYBzNfV.png)](https://i.imgur.com/lYBzNfV.png)</td></tr><tr><td style="width: 50.0494%;">[![9cxx0A2.png](https://i.imgur.com/9cxx0A2.png)](https://i.imgur.com/9cxx0A2.png)</td><td style="width: 50.0494%;">[![MClmUQY.png](https://i.imgur.com/MClmUQY.png)](https://i.imgur.com/MClmUQY.png)</td></tr><tr><td colspan="2" style="width: 100.124%;">Fig.4 - Exemplo de utilização do gestor de bibliotecas do IDE Arduino para instalação da Biblioteca *Adafruit SSD1306*.</td></tr></tbody></table>

##### Programa

<table border="1" id="bkmrk-%23include-%3Cwire.h%3E-%23i" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 99.9177%;">```C
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// OLED display TWI address
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int dummyVal = 0;

void setup() {
  // inicializa ecrã
  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  display.clearDisplay();
  display.display();

  // imprime linha de texto
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(55, 30);
  display.print(F("..."));

  // actualiza ecrã
  display.display();
}

void loop() {
  display.clearDisplay();
  display.display();

  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.setCursor(60, 25);

  if (dummyVal == 0) {
    display.print(F("\\"));
  }
  else if (dummyVal == 1) {
    display.print(F("|"));
  }
  else if (dummyVal == 2) {
    display.print(F("/"));
  }
  else if (dummyVal == 3) {
    display.print(F("-"));
  }

  if (dummyVal >= 3) {
    dummyVal = 0;
  }
  else {
    dummyVal = dummyVal + 1;
  }

  display.display();
}
```

</td></tr><tr><td style="width: 99.9177%;">Código.1 - Programa exemplo de utilização de ecrã OLED com placa Arduino compatível UNO para exibir texto</td></tr></tbody></table>

##### \[exemplo\] I2C OLED

<table border="1" id="bkmrk-fig.5" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 24.9691%;">[![dElvfCc.png](https://i.imgur.com/dElvfCc.png)](https://i.imgur.com/dElvfCc.png)</td><td style="width: 24.9691%;">[![2oEmtMR.png](https://i.imgur.com/2oEmtMR.png)](https://i.imgur.com/2oEmtMR.png)</td><td style="width: 24.9691%;">[![Ui1VooD.png](https://i.imgur.com/Ui1VooD.png)](https://i.imgur.com/Ui1VooD.png)</td><td style="width: 24.9691%;">[![LDCkZXB.png](https://i.imgur.com/LDCkZXB.png)](https://i.imgur.com/LDCkZXB.png)</td></tr><tr><td colspan="4" style="width: 99.8764%;">Fig.5 - Ilustração da sequência de símbolos a surgir no ecrã.</td></tr></tbody></table>

#### Outros exemplos

<table border="1" id="bkmrk-%5Ba%5D-%5Bb%5D-%5Bc%5D" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 33.3051%;">*[![MMnvvKD.png](https://i.imgur.com/MMnvvKD.png)](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)*</td><td style="width: 33.3051%;">*[![w4QdtAr.png](https://i.imgur.com/w4QdtAr.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps)*</td><td style="width: 33.3051%;">*[![orKSYyb.png](https://i.imgur.com/orKSYyb.png)](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec)*</td></tr><tr><td class="align-center" style="width: 33.3051%;">[\[a\]](https://kb.deec.uc.pt/books/deec/page/instalacao-irK)</td><td class="align-center" style="width: 33.3051%;">[\[b\]](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps)</td><td class="align-center" style="width: 33.3077%;">[\[c\]](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec)</td></tr></tbody></table>

\[a\] DEEC - FCTUC. Kit Arduino Uno &gt; Instalação. url: [https://kb.deec.uc.pt/books/deec/page/instalacao-irK](https://kb.deec.uc.pt/books/deec/page/instalacao-irK) (acedido em 10/04/2024).

\[b\] DEEC - FCTUC. Kit Arduino Uno &gt; \[exemplo\] módulo GPS. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps](https://kb.deec.uc.pt/books/deec/page/exemplo-modulo-gps) (acedido em 10/04/2024).

\[c\] DEEC - FCTUC. Kit Arduino Uno &gt; \[exemplo\] rumo ao DEEC. url: [https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec](https://kb.deec.uc.pt/books/deec/page/exemplo-rumo-ao-deec) (acedido em 10/04/2024).