Created
January 24, 2019 17:14
-
-
Save rflpazini/91e9c487984cda062e52e5cf0c97e14d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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