1
resposta

Código

Tenho uma dúvida quanto ao código.. eu utilizei display similar, portanto tive que modificar algumas coisas, enfim, acabou dando certo.. porém na lógica que mostra as variáveis no display eu fiz diferente:

#include <DHT.h>
#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 SSD1306 display connected using software SPI (default case):
#define OLED_MOSI  D7
#define OLED_CLK   D5
#define OLED_DC    D2
#define OLED_CS    D8
#define OLED_RESET D1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
  OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);


#define DHTPIN D3
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
int umidade;
int temperatura;


void setup() {
  dht.begin();
  Serial.begin(9600);


  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
}

void loop() {
  medirTemperaturaUmidade();
  mostrarMensagemNoDisplay();
  //delay(2000);

}

void medirTemperaturaUmidade() {
  umidade = dht.readHumidity();
  temperatura = dht.readTemperature(false);
  delay(2000);
}


void mostrarMensagemNoDisplay() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.print("Temperatura");
  display.setTextSize(5);
  display.setCursor(20, 20);
  display.print(temperatura);
  display.setTextSize(2);
  display.print("C");
  display.display();
  delay(5000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.print("Umidade");
  display.setTextSize(5);
  display.setCursor(20, 20);
  display.print(umidade);
  display.setTextSize(2);
  display.print("%");
  display.display();
  delay(3000);
}

A minha dúvida é.. ok, o meu deu certo, minha lógica mostra certinho.. mas então por que foi usado da outra maneira, pois como estou iniciando os estudos achei a lógica meio complicada a princípio. Há com certeza algum motivo para o instrutor ter montado o código utilizando a outra lógica, qual seria?

Obrigado !

1 resposta

Boa tarde Eric, tudo certo?

Uma das belezas da programação é podermos obter o mesmo resultado de diversas formas diferentes. Eu vou tentar fundamentar as práticas do instrutor e falar um pouco sobre a utilização de funções e o conceito de modularização:

Apesar de parecer complicado à primeira vista, as funções são nossas amigas quando queremos reunir um conjunto de instruções com uma utilidade bem definida. Por exemplo: apenas ao ler o nome da função mostrarTemperaturaUmidade() já temos uma ideia de qual vai ser o efeito de chamar essa função. Nós, como humanos, já interpretamos esse nome e imaginamos qual vai ser o resultado disso. Isso se torna uma ferramenta muito poderosa, pois nos possibilita abstrair o código em si e apenas se concentrar no efeito que ele vai ter. Em resumo: quem faz a chamada de uma função não deve ter que conhecer todos detalhes de como aquilo foi feito, apenas precisa saber chamar.

Pode parecer esquisito apresentar esse conceito quando as linhas que vão ser chamadas estão logo ali e fomos nós mesmo que escrevemos, mas colocamos esse conceito em prática desde já pois em projetos maiores é muito comum ter funções dezenas de vezes mais complexas ou até funções que não podemos ver a implementação.

Outro ganho que temos ao utilizar funções é a modularização. Isso significa que podemos reutilizar partes do nosso código de forma muito simples: basta chamar uma função que já foi feita. Um exemplo é: imagine que ao invés dessa telinha e apenas das grandezas de temperatura e humidade tivéssemos que fazer uma estação metereológica completa - com pressão, temperatura, humidade, previsões, nível de chuva e etc. Neste segundo cenário seria mais interessante ter apenas uma função que mostra um item na tela e outras funções separadas que adquirem as informações dos sensores, não acha?

Sendo assim, é uma boa prática exercitar esses "músculos" e criar funções separadas que realizam, como o nome diz, apenas uma função específica. Mas não se sinta pressionado a sempre fazer isso, recomendo apenas pensar cenários no cotidiano onde esse conceito se aplica e tentar implementar caso você se sinta confortável.

Espero ter ajudado e bons estudos!

Caso este post tenha resolvido sua dúvida, por favor, marque o tópico como solucionado ✓.Bons Estudos!