Pages: [1]   Go Down
Author Topic: como parar motor com micro switch  (Read 1070 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 41
Posts: 3110
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Usa as tags de código...

Code:
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:
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.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: