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