Seguinte consegui fazer o programa com motores de passo para abrir e fechar uma gaveta, porem depois q clico no botão para abri-la, ela abre, mas se eu clicar para abrir de novo o motor fica patinando pq ela ja esta aberta, alguem teria alguma ideia de como impedir q ela receba essa ordem de abrir quando ja estiver aberta?
Vlw

Exibições: 680

Responder esta

Respostas a este tópico

voce tem um botao pra abrir e outro para fechar?

Tenho sim ele envia um caracter pela porta serial....

se for da forma que eu estou a pensar, acho que pode usar uma variavel para guardar o estado da gaveta 1 aberta 0 fechada.

do tipo assim por alto e de alguem que não percebe mt de programação

Se botao_abrir = Pressionado e  estado_gaveta = 0 então

abre gaveta;

estado_gaveta = 1;

}

Se botao_ fechar = Pressionado e estado_gaveta = 1 entao

fecha gaveta;

estado_gaveta = 0;

}

é assim uma ideia por alto, não custa tentar.

Pois eh num deu certo aki vai o codigo...

#include <Stepper.h>

#define STEPS 48
Stepper motor(STEPS, 3, 4, 5, 6);

void setup()

{
pinMode(3,OUTPUT);

pinMode(4,OUTPUT);

pinMode(5,OUTPUT);

pinMode(6,OUTPUT);


Serial.begin(9600);
}
void loop()

{

char c = Serial.read();


if(c == 'l')
motor.step(100);
motor.setSpeed(30);
delay(100);
digitalWrite(6,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(3,LOW);

if(c == 'r')
motor.step(-100);
motor.setSpeed(30);
delay(100);
digitalWrite(6,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(3,LOW);

}

veja se isso funciona:

#include <Stepper.h>
#define STEPS 48
Stepper motor(STEPS, 3, 4, 5, 6);
int lugar = 0;
void setup()
{
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);

Serial.begin(9600);
}
void loop()
{
char c = Serial.read();

if(c == 'l' && lugar == '0')
motor.step(100);
motor.setSpeed(30);
delay(100);
lugar = 1;
digitalWrite(6,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(3,LOW);

if(c == 'r' && lugar == '1')
motor.step(-100);
motor.setSpeed(30);
delay(100);
lugar = 0;
digitalWrite(6,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(3,LOW);
}

Ixi naum abre nem fecha agora =/

#include <Stepper.h>
#define STEPS 48
Stepper motor(STEPS, 3, 4, 5, 6);
int lugar = 0;
void setup()
{
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);

Serial.begin(9600);
}
void loop()
{
char c = Serial.read();

if (c == 'l') {

   if (lugar == '0') {


           motor.step(100);
           motor.setSpeed(30);
           delay(100);
           lugar = 1;
           digitalWrite(6,LOW);
           digitalWrite(4,LOW);
           digitalWrite(5,LOW);
           digitalWrite(3,LOW);

}

}

if (c == 'r') {

   if (lugar == '1') {


          motor.step(-100);
          motor.setSpeed(30);
          delay(100);
          lugar = 0;
          digitalWrite(6,LOW);
          digitalWrite(4,LOW);
          digitalWrite(5,LOW);
          digitalWrite(3,LOW);
}

}

é tbm naum rolou, acho q pelo codigo naum da pra fazer isso =/

você ao fazer,

digitalWrite(6,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(3,LOW);

não está a colocar as bobinas do motor em LOW?

elas para estarem ativas não deviam estar em HIGH?

Testei com high tbm nd =/

Tira esse codigo porque estás a usar a biblioteca stepper, não precisas de ativares as bobines individualmente, experimenta desta forma:

#include <Stepper.h>

const int stepsPerRevolution = 48;

Stepper myStepper(stepsPerRevolution, 3, 4, 5, 6);

int estado_gaveta= 0;

void setup() {

      Serial.begin(9600);

      myStepper.setSpeed(30);
}


void loop() {

char c = Serial.read();

if (c == 'l') {

   if (lugar == '0') {

           myStepper.step(100);          
           estado_gaveta = 1;
    }

}

delay(500);

if (c == 'r') {

   if (lugar == '1') {

         myStepper.step(100);
         estado_gaveta = 0;   
}

}

é mano acho a ideia é usar um sensor msm =/

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço