Então meu projeto seria que seu eu inserir um numero em um teclado matricial, vamos manter o 60 como exemplo, seria o numero de passos que eu quero, pois eu irei fazer a usinagem de engrenagem portanto cada passo desses 60 seria um dente, mas esse valor vai variar de acordo com minha necessidade, posso precisar fazer 6 passos (6 dentes) ou 100 passos(100 dentes).
Seria possível adaptar o código para realizar essa matemática em passos?
Eu pensei ate em fazer com contador como Switch case, mas acho que não iria funcionar, somente com um botão de pulso, onde em cada pulso teria uma matemática especifica de acordo com o numero setado nesse botão.
Creio que eu consigo adaptar os graus do motor a essa logica, mas ai é que tenho dificuldade entendeu, podes me ajudar?
abaixo a programacao que ja fiz:
#include <LiquidCrystal_I2C.h>//biblioteca lcd
#include <Stepper.h>//biblioteca motor
#include <Keypad.h>//biblioteca teclado
#include <Wire.h>//biblioteca interface lcd
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE); //endereço LCD
Stepper myStepper(200, 13, 12);//velocidade e pinos motor ao driver
const byte Coluna = 3;//teclado
const byte Linha = 4;//teclado
const int steeps = 200; //passos motor
int i = 0;
int incremento = 1;
int passo;
int buzzer = 12;//pino buzzer
int botaoliga = 3;//pino botao liga
char Teclas[Linha][Coluna] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}};
byte Pino_linha[Linha] = {4,5,6,7};//endereço teclas
byte Pino_coluna[Coluna] = {8,9,10};//endereço teclas
Keypad keypad = Keypad(makeKeymap(Teclas), Pino_linha, Pino_coluna, Linha, Coluna );//configuração teclado
void setup()
{
lcd.begin(16, 2);//configuração lcd
lcd.setCursor(0,0);//imprime lcd
lcd.print("RVE AUTOMACAO");//imprime lcd
delay(15000);//tempo
lcd.clear();//limpa lcd
lcd.print("SISTEMA PRONTO!");//imprime lcd
delay(5000);//tempo
lcd.clear();//limpa lcd
myStepper.setSpeed(60);
pinMode(botaoliga,INPUT);//botao liga
digitalWrite(botaoliga,HIGH);//estado no nivel do botao, aqui em nivel alto
}
void loop()
{
lcd.setCursor(0,0);// onde imprime no lcd
lcd.print("NUMERO DE DENTES:");//imprime lcd
int angulo = 0;//angulo do motor
int fator = 0;// Fator decimal pra casas da dezena/centena
i = 0;
passo=0;//passo motor
// Obs:Pra digitar 40, tem que digitar 0, 4, 0
while (i < 100)
{
char teclaPressionada = keypad.getKey();//tecla pressionada
if (teclaPressionada != NO_KEY)
{
lcd.setCursor(i, 1);//onde imprime lcd
lcd.print(teclaPressionada);//imprime a tecla pressionada
//a tecla é ASCII e tem que ser convertido pra inteiro
//passo = passo+teclaPressionada;
// | dezena/centena | + | unidade |
angulo = (int)(angulo * fator) + (int)(teclaPressionada - '0');//coversao da tecla pro angulo
fator = 10;// Incrementa fator para dezena/centena
i++;//entrada += 1;
if (i == 3) // (i == 3 && digitalRead(botaoliga) == LOW)
{
passo = (steeps * angulo) / 360;// Converte de angulo para passos
delay(500); //tempo
lcd.clear();//limpa lcd
//delay(500);//tempo
//lcd.println();
lcd.print("USINANDO");//imprime no lcd
lcd.setCursor(0,0);//onde imprime no lcd
delay(10000);
lcd.clear();
lcd.setCursor(0,0);//imprime lcd
lcd.print("RVE AUTOMACAO");//imprime lcd
//lcd.setCursor(0,0);//onde imprime no lcd
//lcd.print();
//lcd.print("NUMERO DE PASSOS:");//imprime no lcd
//lcd.print(passo);//imprime no lcd
}
}
delay(300); // debounce
}
lcd.print("USINANDO");//imprime no lcd
lcd.setCursor(0,0);//onde imprime no lcd
// Agora faz o motor girar
myStepper.step(passo);//controle do motor
delay(300); // Espera motor terminar de dar os passos
}