//#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();
}