Skip to content

Instantly share code, notes, and snippets.

@rflpazini
Created January 24, 2019 17:14
Show Gist options
  • Save rflpazini/91e9c487984cda062e52e5cf0c97e14d to your computer and use it in GitHub Desktop.
Save rflpazini/91e9c487984cda062e52e5cf0c97e14d to your computer and use it in GitHub Desktop.
#include <Wire.h>
#include <Stepper.h> //biblioteca para controle de motor de passo
#include <LiquidCrystal.h>
LiquidCrystal disp(6, 7, 5, 4, 3, 2);
// VARIÁVEL PARA SELEÇÃO DO PINO DIGITAL ----------------------------------------------------------------------------------
const int setButton = 11; // SETA VALORES ESCOLHIDOS
const int returnButton = 8; // RETORNA MENU ANTERIOR
const int proceedButton = 13; // PROCEDE AO PRÓXIMO MENU
int incrementa = 10; // SOMA VALORES NAS VARIAVEIS DO MENU
int decrementa = 9; // SUBTRAI VALORES NAS VARIAVEIS DO MENU
int teste = 14;
int espteste = A0; // Entradas teste para girar o MENU
int profteste = A1;
// VARIÁVEIS GLOBAIS -----------------------------------------------------
char menu = 0x01; // variavel para selecionar o "menu"
boolean estadobotao1, estadobotao2, estadobotao3, estadobotao4, estadobotao5; //VARIÁVEIS PARA ARMAZENAR O ESTADO DOS BOTÕES
// MUDAS -----------------------------------------------------------------------------------------------------------------------------------
int Dmudas; // Quantidade de mudas por suporte (constante)
int addMudas; // Adiciona MUDAS COMEÇANDO EM 5 UNIDADES ( 5 em 5 )
int MudasMax = 400; // Quantidade máxima de Mudas a ser adicionadas
int y; // Quantidade de passadas
// ESPASSAMENTO ----------------------------------------------------------------------------------------------------------------------------
int addEsp; // Adiciona ESPAÇAMENTO DAS MUDAS COMEÇANDO EM 100 (milímetros)
int EspMax = 300; // Espassamento maximo que pode ser atingido (em milímetros)
double Z; // Variavel que armazena valor da equação "revoluções"
double G; // Variável que armazena valor da equação "Passos para espassamento"
// PROFUNDIDADE DE MUDAS -------------------------------------------------------------------------------------------------------------------
int addProfund; // Adiciona profundidade da muda começando em valor padrão de 40 mílímetros
int ProfundMax = 50; // Profundidade máxima de plantio em milímetros
double W; // Variavel que armazena valor da equação "revoluções"
double T; // Variável que armazena valor da equação "Passos para profundidade"
int inicio; // Variável de comparação com o "y"
// Constantes para Equações e Cálculos -------------------------------------------------------------------
float Cproda; // Perímetro do Diametro do Pneu escolhido para maquina (Pode haver alteração)
float Cprolarsup; // Perímetro da engrenagem dos suportes das mudas (definido)
float Cpabrirsup; // Perímetro de abertura dos suportes de mudas (definido)
float Cpabrirbicos; // Perímetro de abertuda dos bicos (pré definido)
// ========================================================================================================
// --- Mapeamento de Hardware ---
//Motor de tração 01---------------------------------------------------------
#define in1 22 //entrada 1 do ULN2003
#define in2 23 //entrada 2 do ULN2003
#define in3 24 //entrada 3 do ULN2003
#define in4 25 //entrada 4 do ULN2003
//Motor de abrir suportes 02-------------------------------------------------
#define an1 26 //entrada 1 do ULN2003
#define an2 27 //entrada 2 do ULN2003
#define an3 28 //entrada 3 do ULN2003
#define an4 29 //entrada 4 do ULN2003
const int stepsPerRevolution = 2050;
Stepper motorRoda(stepsPerRevolution, in1,in3,in2,in4); // --- Declaração de Objetos ---
Stepper motorDesce(stepsPerRevolution, an1,an3,an2,an4);
//------------------------------------------------------------------------------------------------------------------------------------------
void setup() {
motorRoda.setSpeed(60); //Velocidade do motor em 600 rpm
motorDesce.setSpeed(60);
disp.begin(16,2);
// ENTRADA PARA OS BOTÕES digitais de 8 a 13
pinMode(returnButton, INPUT_PULLUP);
pinMode(setButton, INPUT_PULLUP);
pinMode(proceedButton, INPUT_PULLUP);
pinMode(teste, OUTPUT);
pinMode(espteste, OUTPUT);
pinMode(profteste, OUTPUT);
estadobotao1 = 0x00; //Limpa flag do botao INCREMENTA
estadobotao2 = 0x00; //Limpa flag do botao DECREMENTA
estadobotao3 = 0x00; //Limpa flag do botao SETBUTTON
estadobotao4 = 0x00; //Limpa flag do botao RETURNBUTTON
estadobotao5 = 0x00; //Limpa flag do botao PROCEEDBUTTON
inicio = 0;
// VARIÁVEIS COM SEUS VALORES INICIAIS -------------------------------------
Cproda = 1130,9724; // Perímetro do Diametro do Pneu escolhido para maquina (Pode haver alteração)
Cprolarsup = 324,31; // Perímetro da engrenagem dos suportes das mudas (definido)
Cpabrirsup = 245,044; // Perímetro de abertura dos suportes de mudas (definido)
Cpabrirbicos = 69,115; // Perímetro de abertuda dos bicos (pré definido)
addMudas = 5; // Variável valor inicial
addEsp = 100;
addProfund = 40;
Dmudas = 5;
// Introdução
disp.begin(16,2);
disp.setCursor(0,0);
disp.print(" GRAMAQ ");
delay(1000);
disp.clear();
disp.setCursor(3,0);
disp.print("Bem Vindo");
delay(1000);
disp.clear();
disp.setCursor(0,0);
disp.print("TRANSPLANTADEIRA");
disp.setCursor(4,1);
disp.print("TR-400");
delay(1000);
disp.clear();
}
//FALTA DECLARAR AS EQUAÇÕES,MOTORES, POSSIVEIS SENSORES..................
void loop() {
changeMenu();
dispMenu();
if (buttonPressed(setButton)) {
executarcomandos();
}
}
int buttonPressed(int button) {
int buttonState = digitalRead(button);
if (buttonState == HIGH)) {
return false;
}
return true ;
}
void executarcomandos() {
y = addMudas/Dmudas;
Z = addEsp/Cproda;
G = Z*stepsPerRevolution;
// Valores incorretos, apenas para estudo do movimento --- -- ***********************
W = addProfund/Cprolarsup;
T = W*stepsPerRevolution;
for(inicio = 0; inicio <= y; inicio++) {
motorRoda.step(G);
delay(1000);
motorDesce.step(T);
delay(1000);
motorDesce.step(-T);
delay(1000);
}
}
//Desenvolvimento das Funções Auxiliares do MENU TR-400 ------------------------------------------------------------------
void changeMenu() { //modifica o MENU atual
if(!digitalRead(proceedButton)) estadobotao5 = 0x01; // Botão proceguir pressionado? Seta Flag
if(!digitalRead(returnButton)) estadobotao4 = 0x01; // Botão retornar pressionado? seta flag
if(digitalRead(proceedButton) && estadobotao5) // Botão incrementa solto e flag setada?
{ // Sim....
estadobotao5 = 0x00; // Limpa Flag
disp.clear(); // Limpa display
menu++; // Incrementa menu
if(menu > 0x04) menu = 0x01; // Se menu for maior que 4, volta a ser 1
}
//FIM DA DEFINIÇÃO DOS BOTOÕES -------------------------------------------------------------------------------
if(digitalRead(returnButton) && estadobotao4) // Botão retornar solto e flag setada?
{ // Sim.......
estadobotao4 = 0x00; // Limpa Flag
disp.clear(); // Limpa display
menu--; // Decrementa menu
if(menu < 0x01) menu = 0x04; // Se menu for menor que 1, volta a ser 4
}
}
// Mostrar menu atual
void dispMenu() {
switch(menu) // Controle da variável menu
{
case 0x01: // Caso 1
changeMudas(); // Chama função adc. mudas
break;
case 0x02: // Caso 2
changeEsp(); // Chama função espassamento
break;
case 0x03: // Caso 3
changeProf(); // Chama função profundidade de muda
break;
case 0x04: // Caso 4
changeReturn();
break; // Chama funão retornar ao ponto de partida
} //fim switch menu
} // fim dispMenu
void changeMudas() //Qnt de Mudas (menu1)
{
disp.setCursor(0,0); //Posiciona cursor na coluna 1, linha 1
disp.print("Mudas"); //Imprime mensagem
if(!digitalRead(incrementa)) estadobotao1 = 0x01;
if(!digitalRead(decrementa)) estadobotao2 = 0x01;
if(digitalRead(incrementa) && estadobotao1)
{
estadobotao1 = 0x00;
addMudas = addMudas + 5;
if(addMudas > MudasMax) {
addMudas = 5;
}
disp.clear();
digitalWrite(teste, addMudas);
}
if(digitalRead(decrementa) && estadobotao2)
{
estadobotao2 = 0x00;
addMudas = addMudas - 5;
if(addMudas < 5) {
addMudas = MudasMax;
}
disp.clear();
digitalWrite(teste, addMudas);
}
disp.setCursor(0,1); //Posiciona cursor na coluna 1, linha 2
disp.print(addMudas); //Mostrador (apenas ilustrativo......)
disp.print(" unidades");
} //end changeMudas
//Espassamento (menu2)
void changeEsp() {
disp.setCursor(0,0); //Posiciona cursor na coluna 1, linha 1
disp.print("Espassamento"); //Imprime mensagem
if(!digitalRead(incrementa)) estadobotao1 = 0x01;
if(!digitalRead(decrementa)) estadobotao2 = 0x01;
if(digitalRead(incrementa) && estadobotao1) {
estadobotao1 = 0x00;
addEsp = addEsp + 50;
if(addEsp > EspMax) {
addEsp = 100;
}
disp.clear();
digitalWrite(espteste, addEsp);
}
if(digitalRead(decrementa) && estadobotao2) {
estadobotao2 = 0x00;
addEsp = addEsp - 50;
if(addEsp < 100) {
addEsp = EspMax;
}
disp.clear();
digitalWrite(espteste, addEsp);
}
disp.setCursor(0,1); //Posiciona cursor na coluna 2, linha 2
disp.print(addEsp); //Mostrador (apenas ilustrativo......)
disp.print(" mm");
}
//Profundidade de plantio (menu3)
void changeProf() {
disp.setCursor(0,0); //Posiciona cursor na coluna 1, linha 1
disp.print("Profundidade"); //Imprime mensagem
if(!digitalRead(incrementa)) estadobotao1 = 0x01;
if(!digitalRead(decrementa)) estadobotao2 = 0x01;
if(digitalRead(incrementa) && estadobotao1) {
estadobotao1 = 0x00;
addProfund = addProfund + 2;
if(addProfund > ProfundMax) {
addProfund = 40;
}
disp.clear();
digitalWrite(profteste, addProfund);
}
if(digitalRead(decrementa) && estadobotao2) {
estadobotao2 = 0x00;
addProfund = addProfund - 2;
if(addProfund < 40){
addProfund = ProfundMax;
}
disp.clear();
digitalWrite(profteste, addProfund);
}
disp.setCursor(0,1); //Posiciona cursor na coluna 2, linha 2
disp.print(addProfund); //Mostrador (apenas ilustrativo......)
disp.print(" mm");
}
//Retornar ao ponto de partida (menu4)
void changeReturn() {
disp.setCursor(0,0); //Posiciona cursor na coluna 1, linha 1
disp.print("Retornar Inicio"); //Imprime mensagem
disp.setCursor(1,1); //Posiciona cursor na coluna 2, linha 2
disp.print(" sim nao "); //Mostrador (apenas ilustrativo......)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment