Go Down

Topic: ajuda urgente, como deixar as teclas A e B com ação repetida (Read 60 times) previous topic - next topic

juarez321

Boa noite a todos, eu fiz esse código para controlar um motor de passo, com o teclado matricial, aperto a tecla 'A" ele gira para esquerda, aperto a tecla 'B' ele gira para direita, porem, ta acontecendo o seguinte, quando aperto a tecla, ele dá apenas um pulso, mesmo que a tecla permaneça apertada, eu preciso que o motor permaneça girando até que a tecla seja liberada,
esse é o código.

#include <Keypad.h>
#include <LiquidCrystal_I2C.h>                             
#include <Stepper.h>

const byte ROWS = 4;            // Quatro linhas por...
const byte COLS = 4;            //  Quatro colunas.
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','.'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = { 2, 3, 4, 5 };
byte colPins[COLS] = { 6, 7, 8, 9 };
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
Stepper stepper(200, 12, 13);                               
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
char key = kpd.getKey();
int motor = 0;

void setup() {
 stepper.setSpeed(200);
 lcd.begin(20, 4); 
}

void loop() {
 
if (motor == 0){                                     
    lcd.clear();                                       
    lcd.setCursor(0, 0);                               
    lcd.print("Tecla A Motor gira");                     
    lcd.setCursor(0, 1);                               
    lcd.print("para esquerda");                 
    lcd.setCursor(0, 2);                               
    lcd.print("Tecla B Motor gira");                   
    lcd.setCursor(0, 3);                               
    lcd.print("Para direita");                       
    lcd.setCursor(0, 2);                               
    while (motor == 0) {                                 
    key=kpd.getKey(); 
       switch (key)                     
      {
        case 'A':                 // Motor gira para esquerda     
        stepper.step(200);                                                           
      break;           
        case 'B':                 // Motor gira para direita   
        stepper.step(-200);                                                       
      break;
      }     
    }
  }
}

Go Up