Boa tarde.
Gostaria de ajuda.
Estou com um motor de passo de DVD bipolar ligado em um L293D, consigo girar para um lado e para outro.
O problema esta quando tento faze-lo "andar" 1 passo para frente ou para trás, ou vários passo através de comando pelo Serial.read.
Gostaria de puder controlar passo a passo com um comando "s" (sobe) "d" (desce).
Por favor corrijam meu código.
Agradeço desde já.
Fernando
//
// Motor CD + L293d + serial
//
//
int IN1 = 10;
int IN2 = 11;
int IN3 = 12;
int IN4 = 13;
int x = 1;
int y = 1;
int tempo = 100;
void setup()
{
Serial.begin(9600); // Abre conexão serial e define a taxa de transmissão em 9.600kbps
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
}
void loop(){
if (Serial.available() > 0) { // verifica serial
char data = Serial.read(); // lê o byte na serial
if (data == 'd') {
Para_Frente();
if (x == 4) {
x = 1;
}
x++;
}
if (data == 'e') {
Para_Traz();
if (y == 4) {
y = 1;
}
y++;
}
data = ' ';
delay(100);
}
}
//
void Para_Frente() {
if (x == 1) {
// Passo 1
digitalWrite(IN1, 1);
digitalWrite(IN2, 0);
digitalWrite(IN3, 0);
digitalWrite(IN4, 1);
delay(tempo);
}
if (x == 2) {
// Passo 2
digitalWrite(IN1, 0); //0
digitalWrite(IN2, 1); //1
digitalWrite(IN3, 0); //0
digitalWrite(IN4, 1); //1
delay(tempo);
}
if (x == 3) {
// Passo 3
digitalWrite(IN1, 0);
digitalWrite(IN2, 1);
digitalWrite(IN3, 1);
digitalWrite(IN4, 0);
delay(tempo);
}
if (x == 4) {
// Passo 4
digitalWrite(IN1, 1); //1
digitalWrite(IN2, 0); //0
digitalWrite(IN3, 1); //1
digitalWrite(IN4, 0); //0
delay(tempo);
}
Serial.print(x);
}
//
void Para_Traz() {
// Passo 1
if (y == 1) {
digitalWrite(IN1, 1);
digitalWrite(IN2, 0);
digitalWrite(IN3, 1);
digitalWrite(IN4, 0);
delay(tempo);
}
// Passo 2
if (y == 2) {
digitalWrite(IN1, 0);
digitalWrite(IN2, 1);
digitalWrite(IN3, 1);
digitalWrite(IN4, 0);
delay(tempo);
}
if (y == 3) {
// Passo 3
digitalWrite(IN1, 0);
digitalWrite(IN2, 1);
digitalWrite(IN3, 0);
digitalWrite(IN4, 1);
delay(tempo);
}
if (y == 4) {
digitalWrite(IN1, 1);
digitalWrite(IN2, 0);
digitalWrite(IN3, 0);
digitalWrite(IN4, 1);
delay(tempo);
}
Serial.print(y);
}