Muy buenas
Llevo tiempo con un proyecto en la cabeza y ya he jugueteado prácticamente con todos los módulos, sensores o partes separadas de la idea.
Sé que me faltan cosas, tales como aprender a usar millis(), pero como no tengo claro dónde o cómo lo voy a necesitar, he decidido ir empezando a juntar las piezas del puzzle y abordar lo que vea que voy necesitando aprender o practicar.
El problema es que no tengo claro del todo cual sería la forma más correcta de ir construyendo el código valiéndome de esas partes.
Muy resumidamente:
Se trata de un display 5110 Nokia que va a mostrar información de varios sensores, en distintas pantallas, entre las que me muevo a través de un Joystick. Este es un ejemplo de esquema de navegación entre pantallas.
Mi duda es cómo estructurar el código.
El movimiento entre pantallas obviamente quiero que responda rápido, y no dependa de que se encuentre en mitad de un void haciendo otra cosa.
Se me ocurren varias opciones pero la que más me convence es la siguiente:
Había pensado asignarle un void a cada pantalla de información (void1, void2, void2A, void2B, void3, etc)
La idea que más me convence es al final de cada función que se ve en una pantalla (Tª, H%, etc que revise si se está moviendo el joystick y si no… que repita el bucle de esa pantalla para actualizar el valor del sensor. Si por el contrario se mueve el joystick, ir mostrando la información de uno u otro sensor, haciendo ejecutar los voids correspondientes dependiendo de hacia donde se mueva. ¿Lo veis correcto o debería abordarlo de otra forma?
Por último, tengo un problema con el que me he atascado y necesito vuestra ayuda. Quería crear las primeras dos pantallas, pero primero quería mostrar los parametros del DHT y del termistor en la misma pantalla, para asegurarme que todo funciona. Pero no lo consigo.
He juntado dos códigos que funcionaban por separado. Un código que hice en el que un 5110 mostraba la información de un DHT. Y un segundo código cuyas líneas he intercalado en el primero para que muestre la Temperatura a través de un termistor, pero no consigo compilarlo y es que no sé lo que hago mal. Adjunto el código a ver si me podeis decir dónde estoy cometiendo los errores porque me temo que deben ser varios y no sé cuales son.
Siempre me acaba dando error con
float Termistor(int RawADC) {
Muchas gracias
#include <math.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include "DHT.h"
// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
#define DHTPIN 2
#define DHTTYPE DHT22
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
display.begin();
display.setContrast(60);
dht.begin();
display.display(); // show splashscreen
delay(2000);
display.clearDisplay(); // clears the screen and buffer
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
delay(2500);
display.clearDisplay();
}
float Termistor(int RawADC) {
float Temp;
Temp = log(((1024*10000/RawADC) - 10000));
Temp = 1 / (0.001606355783 + (0.0002632458140 * Temp) + (-0.0000001658963196 * Temp * Temp * Temp));
Temp = Temp - 273.15; // Convert Kelvin to Celcius
return Temp;
float temp = Termistor(analogRead(0));
// text display tests
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,20);
display.print("Temp: ");
display.print(t);
display.println("C");
display.print("H%: ");
display.print(h);
display.println("%");
display.print("Motor: ");
display.print(Temp);
display.println("C");
display.display();
delay(2500);
void loop() {
for (int m=0;m<100;m++){
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
delay(4000);
display.clearDisplay();
// text display tests
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,20);
display.print("Temp: ");
display.print(t);
display.println("C");
display.print("H%: ");
display.print(h);
display.println("%");
display.setCursor(50,0);
display.print(m);
display.display();
delay(4000);
if (m==99)
{int m=0;
}
}
}