@gatul
¡¡¡Funciona!!!
Por fin.
He estado intentando mirar la función pero no lo encuentro en los archivos de Arduino IDE como es, pero aquí está el map.
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Quería saber sobre sus fórmulas como explicó arriba el compañero, lo que no entendía mucho.
Más que nada, quiero saber si puedo hacer una función en el cual me muestre decimales, que el map normal no lo hace.
Un ejemplo tonto, se puede crear un map2 por llamarlo de alguna manera que funcione con decimales con float, un ejemplo.
int valorPot3 = 723;
// Función map2 con decimales.
float map2(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
float velocidadMotor2 = map2(valorPot3, 0.0, 1023.0, 0.0, 100.0);
Dejo el ejemplo gracias a los dos por si alguien lo necesita.
// Include el código de la librería.
#include <LiquidCrystal.h>
// Inicializa la librería con sus pines indicados.
// RS, RW, Enable, D4, D5, D6, D7.
//LiquidCrystal lcd(8, NULL, 9, 4, 5, 6, 7);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// Pin 10 para saber que es luz de fondo.
// const byte LuzFondo = 10;
const byte pinA1 = A1;
const byte pinA2 = A2;
int valorPot1 = 0;
float velocidadMotor = 0;
int valorPot2 = 0;
float nivelAgua = 0;
void setup()
{
// Baudios.
Serial.begin(115200);
// La pantalla es de 16 caracteres y 2 filas.
lcd.begin(16, 2);
// Indicar luz de fondo como salida.
// pinMode(LuzFondo, OUTPUT);
// Configurar entradas analógicas.
pinMode(pinA1, INPUT);
pinMode(pinA2, INPUT);
}
void loop()
{
valorPot1 = analogRead(pinA1);
valorPot2 = analogRead(pinA2);
// Cálculo convencional.
velocidadMotor = valorPot1 * (100.0 / 1023.0);
nivelAgua = valorPot2 / 1023.0 * (-180) + 90;
// Cálculo con map.
//velocidadMotor = map(valorPot1, 0, 1023, 0, 100);
//nivelAgua = map(valorPot2, 0, 1023, 90, -90);
// Mostrar datos en el LCD.
// Línea 1 del LCD velocidad del motor a 0 a 100.
lcd.setCursor(0, 0);
lcd.print(F("Velocidad: "));
lcd.setCursor(11, 0);
lcd.print(F(" "));
lcd.setCursor(11, 0);
lcd.print(velocidadMotor);
// Línea 2 del LCD nivel del agua de 90 a -90.
lcd.setCursor(0, 1);
lcd.print(F("Nivel agua: "));
lcd.setCursor(11, 1);
lcd.print(F(" "));
lcd.setCursor(11, 1);
lcd.print(nivelAgua);
// Enviar datos al puerto serie.
Serial.print(velocidadMotor);
Serial.print(",");
Serial.println(nivelAgua);
delay(500); // 500 mili segundos o 0.5 segundos..
}
Saludos camaradas.