Dificuldade em programação em C

06/06/2016

0

Não estou conseguindo fazer um painel responder com os numeros que preciso, por exemplo eu tenho um teclado matricial e ao entrar nos motores das funções no primeiro no caso se eu clicar 1 deveria atribuir a variável am em +1 e se clicar 2 deveria subtrair a variavel am em -1 mas era para subtrair ou atrinuir a medida que eu vou clicando mas no caso ele vai direto soma sem parar e não sou muito experiente em programação.

Meu código:

#include <Servo.h>

#include <LiquidCrystal.h>
LiquidCrystal LCD(3,4,5,6,7,8);
int tecla=50;
int ang;
Servo serv1; // Motor 1
Servo serv2; // Motor 2
Servo serv3; // Motor 3

// --- Protótipo das Funções Auxiliares ---
void changeMenu(); //Função para modificar o menu atual
void dispMenu(); //Função para mostrar o menu atual
void data_hora(); //Função do menu1, data e hora
void temperatura(); //Função do menu2, temperatura
void lights(); //Função do menu3, acionamento de lampadas
void menu4(); //Função do menu4
void serv1_manual ();
// --- Variáveis Globais ---
char menu = 0x01; //Variável para selecionar o menu
char set1 = 0x00, set2 = 0x00; //Controle das lâmpadas
boolean tecla3, tecla6, tecla9, tecla0; //Flags para armazenar o estado dos botões
int am =0;
void setup ()
{
pinMode (21,OUTPUT);
pinMode (22,OUTPUT);
pinMode(9,OUTPUT);pinMode(10,OUTPUT);pinMode(11,OUTPUT);

pinMode(12,INPUT); digitalWrite(12,HIGH); //Habilita resistor de pullup
pinMode(13,INPUT); digitalWrite(13,HIGH);
pinMode(14,INPUT); digitalWrite(14,HIGH);
pinMode(15,INPUT); digitalWrite(15,HIGH);

// Configurando o LCD

LCD.begin(16,2); //LCD 16 colunas, e 2 linhas.


LCD.setCursor (0,0); LCD.print ("Faculdade ENIAC");
LCD.setCursor (0,1); LCD.print ("CONTROLE DE PROCESSOS");
delay(10);
LCD.clear();
LCD.setCursor (0,0); LCD.print ("Pj. Integrador");
LCD.setCursor (0,1); LCD.print ("Integrantes");
delay (10);
LCD.clear();
LCD.setCursor (0,0); LCD.print ("Leonardo C.Silva");
LCD.setCursor (0,1); LCD.print ("RA-248162014");
delay(10);
LCD.setCursor (0,0); LCD.print ("Jerson Joseph M.M");
LCD.setCursor (0,1); LCD.print ("RA-213162014");
delay (10);
LCD.clear();


serv1.attach(0); //Motor 1 no pino 0 do Arduino
serv2.attach(1); //Motor 2 no pino 1 do Arduino
serv3.attach(2); //Motor 3 no pino 3 do Arduino

tecla3 = 0x00;
tecla6 = 0x00;
tecla9 = 0x00;
tecla0 = 0x00;
serv1.write (90);
serv2.write (90);
serv3.write (90);
ang=90;
}

void loop()
{

changeMenu();
dispMenu();





}


//minhas funções
// --- Desenvolvimento das Funções Auxiliares ---

void changeMenu() //Modifica o menu atual
{
teclado();
if(tecla==3) tecla3 = 0x01 ; //Botão Up pressionado? Seta flag
if(tecla==6) tecla6 = 0x01 ; //Botão Down pressionado? Seta flag

if(tecla==('*') && tecla3) //Botão Up solto e flag setada?
{ //Sim...
tecla3 = 0x00; //Limpa flag

LCD.clear(); //Limpa display
menu++; //Incrementa menu

if(menu > 0x05) menu = 0x01; //Se menu maior que 4, volta a ser 1

} //end butUp

if(tecla==('*') && tecla6) //Botão Down solto e flag setada?
{ //Sim...
tecla6 = 0x00; //Limpa flag

LCD.clear(); //Limpa display
menu--; //Decrementa menu

if(menu < 0x01) menu = 0x05; //Se menu menor que 1, volta a ser 4

} //end butDown

} //end changeMenu

void dispMenu() //Mostra o menu atual
{
switch(menu) //Controle da variável menu
{
case 0x01: //Caso 1
PUNHO(); //Chama a função de relógio

break; //break
case 0x02: //Caso 2
OMBRO(); //Chama a função do termômetro

break;
case 0x03: //Caso 3
BASE(); //Chama função para acionamento de lâmpadas

break;
//break
//break

} //end switch menu

} //end dispMenu

void PUNHO() //Data e Hora (menu1)
{

LCD.setCursor(0,0);
LCD.print ("PUNHO");
delay (100);
LCD.clear();
serv1_manual( );







//Mostrador (apenas ilustrativo......)

} //end PUNHO

void BASE()
{
LCD.setCursor(0,0);
LCD.print ("BASE");
delay (100);
LCD.clear();
serv2_manual( );

} //end BASE()

void OMBRO() //Temperatura (menu2)
{
LCD.setCursor(0,0);
LCD.print ("OMBRO");
delay (100);
LCD.clear();

} //end OMBRO


void teclado()
{
// Programa primeira linha
digitalWrite(9,LOW); digitalWrite (10,HIGH);
digitalWrite (11,HIGH);

//Varredura da primeira linha
if (digitalRead (12)==0) {tecla=1;}//1
if (digitalRead (13)==0) {tecla=4;}//2
if (digitalRead (14)==0) {tecla=7;}//3
if (digitalRead (15)==0) {tecla='*';}//9


//Programa Segunda linha
digitalWrite(9,HIGH); digitalWrite (10,LOW);
digitalWrite (11,HIGH);

//Varredura da segunda linha
if (digitalRead (12)==0) {tecla=2;}//4
if (digitalRead (13)==0) {tecla=5;}//5
if (digitalRead (14)==0) {tecla=8;}//6
if (digitalRead (15)==0) {tecla=0;}//0


//Programa terceira linha
digitalWrite(9,HIGH); digitalWrite (10,HIGH);
digitalWrite (11,LOW);

//Varredura da terceira linha
if (digitalRead (12)==0) {tecla=3;}//3
if (digitalRead (13)==0) {tecla=6;}//6
if (digitalRead (14)==0) {tecla=9;}//9
if (digitalRead (15)==0) {tecla=9;}//#



digitalWrite (11,HIGH);

}

//*****************Função para o motor 1 *************************************
void servo_slow1(const int tempo, int inicio, int fim)

{
boolean option = 0;
if (fim > inicio) option = 0;

else option = 1;

if (!option)

{
for(int i=inicio;i<fim;i++)
{
serv1.write(i);
delay (tempo);
}

}
else
{
for(int j=inicio;j>fim;j--)
{
serv1.write(j);
delay (tempo);
}

}
}// end função slow1


//****************************************** função para o servo 2 ********************************************

void servo_slow2(const int tempo, int inicio, int fim)

{
bool option = 0;
if (fim > inicio) option = 0;

else option = 1;

if (!option)

{
for(int i=inicio;i<fim;i++)
{
serv2.write(i);
delay (tempo);
}

}
else
{
for(int j=inicio;j>fim;j--)
{
serv2.write(j);
delay (tempo);
}

}
}// end função slow2

//*********************************** Função para o servo 3 ************************************************************************

void servo_slow3(const int tempo, int inicio, int fim)

{
bool option = 0;
if (fim > inicio) option = 0;

else option = 1;

if (!option)

{
for(int i=inicio;i<fim;i++)
{
serv3.write(i);
delay (tempo);
}

}
else
{
for(int j=inicio;j>fim;j--)
{
serv3.write(j);
delay (tempo);
}

}
}// end função slow3

//**********************************************************************************************

// função motor manual (esse é um dos que preciso que funcione como expliquei)
void serv1_manual( )
{

if(tecla==1)

{am=am+0x01;}
if(tecla==2)

{am=am-0x01;};

if (am>10) am==0;

switch(am) //Controle do set2
{
case 0x01:
teclado() ;
changeMenu ();
LCD.clear();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(0); //Imprime mensagem
serv1.write (0);
if (tecla==4) am=1;
delay (500);

break; //Break
case 0x02:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(20); //Imprime mensagem
serv1.write (20);
if (tecla==4) am=2;
delay (500);

break;

case 0x03:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(40); //Imprime mensagem
serv1.write (40);
if (tecla==4) am=3;
delay (500);
break;
case 0x04:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(60);
delay (500);
serv1.write (60);
if (tecla==4) am=4;
delay(500);
break;

case 0x05:
teclado();
changeMenu ();
LCD.clear();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(80); //Imprime mensagem
serv1.write (80);
if (tecla==4) am=5;
delay (500);
break; //Break
case 0x06:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(90); //Imprime mensagem
serv1.write (100);
if (tecla==4) am=6;
delay (500);
break;

case 0x07:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(120); //Imprime mensagem
serv1.write (120);
if (tecla==4) am=7;
delay (500);
break;

case 0x08:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(140);
serv1.write (140);
if (tecla==4) am=8;
delay (500);
serv1.write (500);
delay (500); //Liga lâmpada 1
break;

case 0x09:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(160);
serv1.write (160);
if (tecla==4) am=9;
delay (500);
serv1.write (160);
delay (500); //Liga lâmpada 1
break;

case 0x10:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(180);
serv1.write (180);
if (tecla==4) am=10;
delay (500);
break;
}







}

void serv2_manual( )
{

if(tecla==4)

{am=am+0x01;}
if(tecla==5)

{am=am-0x01;};

if (am>10) am==0;

switch(am) //Controle do set2
{
case 0x01:
teclado() ;
changeMenu ();
LCD.clear();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(0); //Imprime mensagem
serv1.write (0);
if (tecla==6) am=1;
delay (500);

break; //Break
case 0x02:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(20); //Imprime mensagem
serv1.write (20);
if (tecla==6) am=2;
delay (500);

break;

case 0x03:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(40); //Imprime mensagem
serv1.write (40);
if (tecla==6) am=3;
delay (500);
break;
case 0x04:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(60);
delay (500);
serv1.write (60);
if (tecla==6) am=4;
delay(500);
break;

case 0x05:
teclado();
changeMenu ();
LCD.clear();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(80); //Imprime mensagem
serv1.write (80);
if (tecla==6) am=5;
delay (500);
break; //Break
case 0x06:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(90); //Imprime mensagem
serv1.write (100);
if (tecla==6) am=6;
delay (500);
break;

case 0x07:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(120); //Imprime mensagem
serv1.write (120);
if (tecla==6) am=7;
delay (500);
break;

case 0x08:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(140);
serv1.write (140);
if (tecla==6) am=8;
delay (500);
serv1.write (500);
delay (500); //Liga lâmpada 1
break;

case 0x09:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(160);
serv1.write (160);
if (tecla==6) am=9;
delay (500);
serv1.write (160);
delay (500); //Liga lâmpada 1
break;

case 0x10:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(180);
serv1.write (180);
if (tecla==6) am=10;
delay (500);
break;
}

void serv3_manual( );
{

if(tecla==7)

{am=am+0x01;}
if(tecla==8)

{am=am-0x01;};

if (am>10) am==0;

switch(am) //Controle do set2
{
case 0x01:
teclado() ;
changeMenu ();
LCD.clear();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(0); //Imprime mensagem
serv1.write (0);
if (tecla==9) am=1;
delay (500);

break; //Break
case 0x02:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(20); //Imprime mensagem
serv1.write (20);
if (tecla==9) am=2;
delay (500);

break;

case 0x03:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(40); //Imprime mensagem
serv1.write (40);
if (tecla==9) am=3;
delay (500);
break;
case 0x04:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(60);
delay (500);
serv1.write (60);
if (tecla==9) am=4;
delay(500);
break;

case 0x05:
teclado();
changeMenu ();
LCD.clear();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(80); //Imprime mensagem
serv1.write (80);
if (tecla==9) am=5;
delay (500);
break; //Break
case 0x06:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(90); //Imprime mensagem
serv1.write (100);
if (tecla==9) am=6;
delay (500);
break;

case 0x07:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(120); //Imprime mensagem
serv1.write (120);
if (tecla==9) am=7;
delay (500);
break;

case 0x08:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(140);
serv1.write (140);
if (tecla==9) am=8;
delay (500);
serv1.write (500);
delay (500); //Liga lâmpada 1
break;

case 0x09:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(160);
serv1.write (160);
if (tecla==9) am=9;
delay (500);
serv1.write (160);
delay (500); //Liga lâmpada 1
break;

case 0x10:
teclado();
changeMenu ();
LCD.clear ();
LCD.setCursor(0,0); //Posiciona cursor na coluna 8, linha 2
LCD.print(180);
serv1.write (180);
if (tecla==9) am=10;
delay (500);

break;
}
}
}
Marcus Alves

Marcus Alves

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar