Buen dia,
Espero realizar bien este post y espero me puedan ayudar, si tienen duda díganmelo y si algo se me paso escribir les pido una disculpa.
Estoy realizando un proyecto el cual consiste en el llenado de material de una tolva, controlo el volumen de llenado con un sensor HC- SR04 con el cual mido la distancia del fondo de la tolva hacia el sensor con un porcentaje de 0 a 100 % ademas controlo 2 bombas que me proporcionan el material hacia la tolva, una para material virgen y una para material reciclado, ademas 2 válvulas con solenoide para controlar el paso.
En mi programa lo que pretendo es controlar el llenado ya sea si quiero un 50% de volumen y así mismo poder cambiar ese valor a gusto propio, este porcentaje lo debe respetar usando las 2 bombas que me proporcionen material
por ejemplo, si la tolva tiene un 40% de volumen en tiempo real y mi porcentaje deseado es 50% me activa las 2 bombas por un tiempo de llenado lo suficiente para llegar al 50% de volumen o un poco mas y así se logra hacer una mezcla de material virgen y reciclado.
las 2 bombas a su misma vez quiero que tengan valores de llenado como la tolva
ejemplo, si la bomba 1 tiene 50% la bomba 2 debe tener también 50% para lograr una mezcla del 100%
estas trabajaran en tiempos iguales y si quiero que ahora sea 20% reciclado y 80% virgen me active la bomba 1 lógicamente por mas tiempo ya que yo le pido 80% y la otra son 20%.
para realizar esto hice un programa con un menú en arduino donde tengo 4 opciones a ingresar las cuales son:
( #1 para ver el porcentaje de la tolva en tiempo real )
Este si funciona.
( #2 porcentaje de llenado de la tolva y nuevo porcentaje de llenado)
Aqui necesito la ayuda.
(#3 porcentaje de llenado de la bomba 1 y nuevo porcentaje de llenado)
aun no lo termino.
(#4 porcentaje de llenado de la bomba 2 y nuevo porcentaje de llenado)
aun no lo termino.
mi problema es que cuando en el menú escojo la segunda opción para cambiar el valor deseado, no puedo lograr escribir un valor y por consecuencia no puedo guardarlo, ya intente muchas formas y he visto tutoriales, pero nada me ha funcionado, desconozco si sea posible esto que pretendo, pero cualquier ayuda es buena y generosa.
espero no confundirlos ya que si es un poco dificil de explicar, de antemano muchas gracias.
les dejo lo que llevo de código y si existe otra forma de llevarlo a cabo díganme, me considero novato en este mundo de la prgramacion. mil gracias
#include <Wire.h>
#include<Keypad.h>
#include<LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int trig = 2;
int eco = 3;
long tiempo;
float distancia;
int led = 13;
int conta;
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {4, 5, 6, 7};
byte colPins[COLS] = {8, 9, 10, 11};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void menu_pantalla1()
{
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BIENVENIDO");
lcd.setCursor(0, 1);
lcd.print("UNEZ");
delay(200);
lcd.display();
delay(200);
lcd.clear();
}
void menu_pantalla2()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1)% ACTUAL 3)B 1");
lcd.setCursor(0, 1);
lcd.print("2)% NUEVO 4)B 2");
delay(100);
}
void setup()
{
Serial.begin(9600);
pinMode (trig, OUTPUT);
pinMode (eco, INPUT);
digitalWrite(trig, LOW);
pinMode(led, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
conta = 0;
menu_pantalla1();
menu_pantalla2();
}
void loop() {
char key = customKeypad.getKey();
digitalWrite(trig, 0);
delayMicroseconds(5);
digitalWrite(trig, HIGH);
delayMicroseconds(5);
tiempo = pulseIn(eco, HIGH);
float distancia = float (0.0342 * (tiempo / 2));
float distrue = 35 - distancia;
float d = distrue * 100;
int f = d / 30;
if
(f < 0) {
f = 0;
}
if
(f > 100) {
f = 100;
}
Serial.println(f);
delay(100);
if (key == '1' && conta == 0)
{
conta = 2;
}
if ( conta == 2)
{
digitalWrite(led, HIGH);
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("DE SU CAPACIDAD");
lcd.setCursor(0, 0);
lcd.print("TOLVA AL = ");
lcd.print(f);
lcd.print("%");
delay(200);
}
if (key == '2' && conta == 0)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ACTUAL: ");
lcd.setCursor(0, 1);
lcd.print("NUEVO: ");
lcd.print(key);
conta = 1;
}
if (key == '3' && conta == 0)
{
// este seria para la bomba 1
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ACTUAL: ");
lcd.setCursor(0, 1);
lcd.print("NUEVO: ");
lcd.print(key);
conta = 1;
}
if (key == '4' && conta == 0)
{
// este seria para la bomba 2
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ACTUAL: ");
lcd.setCursor(0, 1);
lcd.print("NUEVO: ");
lcd.print(key);
conta = 1;
}
if ((key == '*') && (conta == 0 || conta == 1 || conta == 2))
{
menu_pantalla2();
conta = 0;
}
}
Materiales que utilizo:
Arduino uno
teclado matricial 4x4
pantalla LCD 16x2
sensor HC-SR04