Está en la página 1de 3

#include <Keypad.

h>
#include "HX711.h"
#include "Wire.h"
#include <AccelStepper.h>

#define led 13

// Define los pines del módulo HX711.


#define DOUT 3
#define SCK 2

// Define los pines para el driver A4988


const int stepPin = 2;
const int dirPin = 3;
// Define la posición inicial del Motor
int initialPosition = 199;

// Crea una instancia de AccelStepper


AccelStepper stepper(1, stepPin, dirPin);

const byte rowsT = 4;


const byte colsT = 4;
char charactersT[rowsT][colsT] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};

byte rowPinsT[rowsT] = {11, 10, 9, 8};


byte columnsPinsT[colsT] = {7, 6, 5, 4};

boolean repriseT = true;


String storageStringT, readCharacterT, resultSerialT;
char keyT;
bool activo = true;
bool peso = false;
int gramos = 0;

Keypad keypadT = Keypad( makeKeymap(charactersT), rowPinsT, columnsPinsT, rowsT,


colsT);
HX711 scale;

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);

keypadT.addEventListener(keypadEventT);

pinMode(led, OUTPUT); // sets the digital pin 13 as output


Serial.print("Ingrese su peso : ");

// Inicializa el módulo HX711.


scale.begin(DOUT, SCK);
scale.set_scale(409.f); // Puedes calibrar la escala si es necesario.
scale.tare(); // Establece el valor actual como tara.

stepper.setMaxSpeed(1000); // Velocidad máxima en pasos por segundo


stepper.setAcceleration(500); // Aceleración en pasos por segundo al cuadrado
Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(led , !activo);
if (activo){
keyT = keypadT.getKey();
if (keyT) {
if (keyT == '*' || keyT == 'A') {
keyT = "";
} else {
Serial.print(keyT);
readCharacterT = keyT;
storageStringT += readCharacterT;
}
}
}
if (peso){
//stepper.moveTo(initialPosition); //Gira motor vuelta completa
// Lee el valor de la celda de carga.
//float weight = scale.get_units(5); // Lee 10 valores para promediar.
int weight = scale.get_units(1); // Lee 1 valores para promediar.
// Actualiza el LCD con el valor de la celda de carga.
Serial.print(" "); // Borra el valor anterior.
Serial.println(weight); // Muestra el peso con 2 decimales.
//Serial.println(weight, 2); // Muestra el peso con 2 decimales.
delay(500); // Espera 1 segundo antes de la próxima lectura.
//mapear peso para motor
//int targetPosition = map(weight, 0, storageStringT, initialPosition, 0);
// Mueve el motor a la posición deseada
//stepper.moveTo(targetPosition);
// Realiza el movimiento paso a paso
//stepper.run();
if (weight >= storageStringT.toInt()){
storageStringT = "";
Serial.println("");
Serial.println("Se ha llegado al peso");
Serial.println("");
Serial.print("Ingrese su peso : ");
activo = true;
peso = false;
}
}
}

void keypadEventT(KeypadEvent keyT) {


switch (keypadT.getState()) {
case PRESSED:
switch (keyT) {
case '*':
Serial.println("");
Serial.print("Su peso elegido es: ");
Serial.println(storageStringT);
//digitalWrite(led , HIGH);
activo = false;
peso = true;
break;
case 'A':
//keyT = "";
Serial.println("");
Serial.print("Ingrese su peso : ");
activo = false;
activo = true;
storageStringT = "";

break;
default:;
}
}
}

También podría gustarte