//#include <Adafruit_I2CDevice.h> // recurso necessário para leitura correta do bluetooth vindo de outra biblioteca instalada no programa geral do Arduino Adrafuit_Buslo master
#include <Wire.h> // biblioteca para conexão do programa com a placa Arduino
#include <Adafruit_GFX.h> // biblioteca para leitura da placa bluetooth
#include <Adafruit_SSD1306.h> // biblioteca para leitura da tela OLED
//#include <Adafruit_Sensor.h>
//#include <DHT.h>

#define SCREEN_WIDTH 128 // definição de largura da tela 
#define SCREEN_HEIGHT 64 // definição de comprimento da tela 

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // definição feita entre o tamanho da tela de oled e sua interpretação com a biblioteca utilizada

#include <SoftwareSerial.h> //inclui toda a biblioteca do serial bluetooth

// na linha abaixo define que os pontos rx , tx da placa de Arduino para que não entrasse em conflito com as conexões entre bluetooth e tela oled, fossem alterados para as portas, A3 e A4 
SoftwareSerial mySerial(3, 4); // RX, TX 

const int ledPin = 13;
String comando; // variável comando tipo string para diversas configurações
char caractere; // variável caractere do tipo char, que só inclui caracteres do teclado 
String Nome; // variável nome definida como string para melhor leitura do serial bluetooth
String Nomeantigo; // variável criada para substituir a variável principal em caso de troca 
String leito; // variável leito definida como string para melhor leitura do serial bluetooth
String leitoantigo; // variável criada para substituir a variável principal em caso de troca 
String RH; // variável RH definida como string para melhor leitura do serial bluetooth
String RHantigo; // variável criada para substituir a variável principal em caso de troca 

///////////////////////////////////////////////////////////////////// início do Programa 

void setup() { // função que executa o Arduino no seu código fonte
  Serial.begin(9600); // definição da frequência padrão utilizada pelo serial bluetooth 

  mySerial.begin(9600); // nome definido para o serial bluetooth 
  pinMode(13,OUTPUT); // graça de led criada pelo jonh 
  //mySerial.println("Hello, world?");
  //dht.begin();
  
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // iniciação do display oled para leitura de informações 
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }

  display.clearDisplay(); // função limpa display para ser executada no código fonte 
}
 /////////////////////////////////////////////////////////////////  atualizacao do diplay, para efetuar troca de dados 
void atualizadisplay(){  // função display aberta pelo void

  display.clearDisplay(); // comando para limpar o display
  display.setTextSize(1);  // tamanho do texto no0 display

  if (Nome != Nomeantigo) {  // quando o nome for diferente do nome antigo, faça .....
    display.setTextColor(BLACK); // escreve o nome anterior de preto 
    display.setCursor(5, 2);  // na posição que encontra o nome 
    display.print("Paciente:"); // printa no display o campo paciente 
    display.println(Nomeantigo); // guardo o nome antigo já escrito 
    display.display();   // comando para limpar o display 
    display.setTextColor(WHITE); // escreve o novo nome de branco 
    display.setCursor(5, 2); // na posição correta do nome 
    display.print("Paciente:"); // reescreve o campo paciente 
    display.println(Nome);  // agora com o novo nome enviado
    Nomeantigo=Nome; // o nome antigo recebe o novo nome 
  } 
  display.setTextColor(WHITE); // display fica branco novamente para que apareça os caracteres 
  display.setTextSize(1); // tamanho do texto fixado 
                               
  if(leito != leitoantigo) {         // o mesmo processo se repete para todos os campos de dados via bluetooth
    display.setTextColor(BLACK);
    display.setCursor(0, 30);
    display.print("leito:");
    display.println(leitoantigo);
    display.display();   
    display.setTextColor(WHITE);
    display.setCursor(0, 30);
    display.print("leito:");
    display.println(leito);  
    leitoantigo=leito;
  }

  if(RH != RHantigo) {
    display.setTextColor(BLACK);
    display.setCursor(70, 30);
    display.print("FRH:");
    display.println(RHantigo);
    display.display();   
    display.setTextColor(WHITE);
    display.setCursor(70, 30);
    display.print("FRH:");
    display.println(RH);  
    RHantigo=RH;
  }

  display.setTextColor(BLACK);
  display.setTextColor(WHITE);

 /////////////////////////////////////////////////// informações fixas no display 
  display.setCursor(5, 2); // posição 
  display.print("Paciente: Caio "); // campo 
  display.print(Nome); // comando que chama o dado inserido
  display.setCursor(0, 30);
  display.print("leito: 23");
  display.print(leito);
  display.setCursor(70, 30);
  display.print("FRH: 0+");
  display.print(RH);

  display.display();  // comando para atualizar o display no fim do loop quando essa função for solicitada   
}
//////////////////////////////////////////////////////////////////// bluetooth
void leserial (){ // função para mandar os dados bluetooth

  if (mySerial.available()) { // função para ativar o comando my serial do bluetooth
    caractere = mySerial.read(); // caractere vai receber o comando my serial para entender que as informações devem ser mandadas por bluetooth

    if(caractere=='*'){ // o * define ate onde a operação deve interpretar a informação mandada 
      if (comando=="L1on") {
        digitalWrite(ledPin, HIGH);
      }
      if (comando=="L1off"){
        digitalWrite(ledPin,LOW);
      }
      if (comando.charAt(0)=='N'){ // o N define op início da operação toda para o comando nome, e para cada operação foi definida uma letra de início de identificação 
        Nome=comando.substring(1); // quando o comando string identifica que há uma informação ele a guarda na caixinha nome
        Serial.print("Nome recebido: "); // no serial monitor, define uma identificacao de dado 
        Serial.println(Nome);        // aqui ele printa a informação guardada na caixinha nome 
      }      

      if (comando.charAt(0)=='L'){   // as mesmas funções se repetem para os demais informações enviadas via bluetooth 
        leito=comando.substring(1);
        Serial.print("leito recebido: ");
        Serial.println(leito);        
      }      
    
      if (comando.charAt(0)=='R'){
        RH=comando.substring(1);
        Serial.print("RH recebido: ");
        Serial.println(RH);        
      }
      
      Serial.print("recebi: "); // essa parte fora do loop define que o serial monitor recebeu a informação e enviou a mesma para o display
      Serial.println(comando); // printa o comando enviado na linha de baixo 
      comando=""; // define como o comando deve ser mostrado 
    }
    else {
     comando.concat(caractere); // termina a função 
    }
  }   
}
////////////////////////////////////////////////////////////////// parte do sensor que não existe mais

void loop() { // função loop que chama as demais funções para executar no arduino 
  leserial();
  atualizadisplay();
  display.display();
 }
Loading
ssd1306