Go Down

Topic: como parar motor com micro switch (Read 1 time) previous topic - next topic

xxscorpioxx

Olá, pretendo em certa parte do codigo por um motor a trabalhar e quando ele activar um microswitch parar, depois no loop continua o resto do código e quando chega normalmente ao motor ele tem que trabalhar ate atingir o micro switch novamente.

O que tento fazer é quando o micro switch esta em low pára o motor se calhar até é conveniente dar um atraso na paragem para deixar o motor novamente em HIGH.

int switchPin = 2;
int motor = 5;

void setup() {
pinMode(motor, OUTPUT);
pinMode(switchPin, INPUT);

digitalWrite(switchPin, HIGH);
}

void loop() {
digitalWrite(motor, HIGH); // Vai ligar o motor 
  if (digitalRead(switchPin) == LOW) {
    digitalWrite(motor, LOW);   // o motor para
     }

depois continua com o resto do codigo, sei que isto não esta bem

xxscorpioxx

então ninguem me consegue ajudar, parece simples para os entendidos, mara mim é um caso complicado, pretendo ter um motor a trabalhar que pare ao activar um microswitch, só que tem de ter um atrazo na paragem para sair do espaço onde activou o micro.

bubulindo

Usa as tags de código...

Code: [Select]

int switchPin = 2;
int motor = 5;
unsigned char switch_antes = 0;

void setup() {
pinMode(motor, OUTPUT);
pinMode(switchPin, INPUT);

digitalWrite(switchPin, HIGH);
}

void loop() {

if (ligar_o_motor == TRUE) {
digitalWrite(motor, HIGH); // Vai ligar o motor 
} //isto está aqui porque o código do Arduino vai correr imensas vezes até o motor parar. Logo precisas duma condição para o motor iniciar. Não faço ideia qual seja.

  if (digitalRead(switchPin) == LOW) {
     //switch detectado
     switch_antes = 1;
     }

if (digitalRead(switchPin) == HIGH && switch_antes == 1) { o motor já avançou o switch, pode parar.   
   digitalWrite(motor, LOW);   // o motor para
   switch_antes = 0; //pronto para outro ciclo.
   }
Assim garantes que o motor para após o switch e não precisas de temporização.

Se pretenderes uma temporização:

Code: [Select]
int switchPin = 2;
int motor = 5;
unsigned long tempo = 0;
unsigned char detecta = 0;

void setup() {
pinMode(motor, OUTPUT);
pinMode(switchPin, INPUT);

digitalWrite(switchPin, HIGH);
}

void loop() {

if (ligar_o_motor == TRUE) {
digitalWrite(motor, HIGH); // Vai ligar o motor 
} //isto está aqui porque o código do Arduino vai correr imensas vezes até o motor parar. Logo precisas duma condição para o motor iniciar. Não faço ideia qual seja.

  if (digitalRead(switchPin) == LOW) {
     //switch detectado
     tempo = millis();
     detecta = 1;
     }

if (millis() - tempo >= DELAY && detecta == 1) {
      digitalWrite(motor, LOW);   // o motor para
      tempo = 0;
      detecta = 0;
   }


Não testei nem compilei, mas a lógica deve estar correcta.
This... is a hobby.

xxscorpioxx

Ola Bubulindo, peço desculpa nao ter dito mais nada, nao tenho tido tempo e algum que ia tendo ia aplicando na parte mecanica do meu projeto e a confeçao da placa, esta parte está toda feita, agora falta a parte da programaçao, para mim muito mais dificil porque sou mesmo noob no assunto ebora toda a programaçao seja facil para quem perceba um pouco do assunto.

A primeira opçao que postas-te deverá ser a ideal mas fiquei todo baralhado da minha cabeça  :smiley-eek: pelo que tenho andado a tenter perceber vejo partes do codigo como "if (digitalRead(switchPin1) == HIGH" e tu espetas-me com "if (ligar_o_motor == TRUE)" será a mesma coisa? assim como isto "unsigned char switch_antes = 0;" está-me a fazer uma confusao danada heheh, podes substituir isso por algo real? é mais macil para eu perceber.

Basicamente o que eu preciso é que o motor trabalhe e pare numa certa posiçao para isso uso um microswitch, continua o resto do codigo e que basicamente sao outros motores que tem que parar tambem com outros microswitchs mas quando commeçar o loop novamente o primeiro motor tem que fazer o mesmo ou seja dar uma volta e parar.

desde ja obrigado pela ajuda

Go Up