int motor1 = 3; // motor do alimentador
int switchPin1 = 6; // switch input para parar motor do alimentador
int switchPin2 = 2; //switch input para parar motor do tubo
int motortubo = 5; //motor do tubo
void setup() {
pinMode(motor1, OUTPUT);
pinMode(switchPin1, INPUT);
pinMode(switchPin2, INPUT);
pinMode(motortubo, OUTPUT);
}
void loop(){
digitalWrite(motor1,HIGH);
delay(200);
if (digitalRead(switchPin1) == LOW)
{
digitalWrite(motor1, LOW); // desliga o motor do tubo
delay(6000);
}
if (digitalRead(switchPin4) == LOW)
{
digitalWrite(motortubo,HIGH);
delay(50);
digitalWrite(motortubo,LOW);
delay(6000);
}
Esse é o codigo utilizado?
Algumas considerações...
-No codigo, vocÊ não liga o pullup dos pinos de input, então você usa resistores por fora certo?
qual o valor do resistor? deve-se usar resistores de 1K ou menores, porque as entradas do arduino são muito sensiveis e motores DC com escovas geram muita interferência causando falsos acionamentos...
-Se o motortubo deve ser acionado somente apos o motor1 ele deve estar dentro do primeiro IF do switch1 e como disse o bubulino delays deixam o arduino inoperante, retire-os...
-o seu conjunto mecanico pode apresentar um comportamento elastico(na hora que chega no final de curso, bate e volta um pouquinho) desacionando o switch, por isso que as vezes o motortubo liga e outras não...
Veja se esse codigo te ajuda:
int motor1 = 3; // motor do alimentador
int switchPin1 = 6; // switch input para parar motor do alimentador
int switchPin2 = 2; //switch input para parar motor do tubo
int motortubo = 5; //motor do tubo
void setup() {
pinMode(motor1, OUTPUT);
digitalWrite(motor1, LOW);//apenas para garantir que o motor inicie desligado...
pinMode(switchPin1, INPUT);
digitalWrite(switchPin1,HIGH);//liga o pullup interno, mesmo assim coloque um resistor externo de 1k para vcc
pinMode(switchPin2, INPUT);
digitalWrite(SwitchPin2,HIGH);//liga o pullup interno, mesmo assim coloque um resistor externo de 1k para vcc
pinMode(motortubo, OUTPUT);
digitalWrite(motortubo, LOW);//apenas para garantir que o motor inicie desligado...
}
void loop(){
digitalWrite(motor1,HIGH);
//delay(200); //delay retirado
while(digitalRead(switchPin1)){} //enquanto estiver em HIGH (desacionado) ele fica verificando
//se descer aqui significa que o switch foi pressionado...
digitalWrite(motor1, LOW); // desliga o motor do tubo
delay(50);//da um tempo para o sistema mecanico estabilizar?ou o objeto/peça acionar o
switchPin2, talvez nem seja necessário...
while(digitalRead(switchPin2)){}//só sai daqui na hora que acionar o switch2
digitalWrite(motortubo,HIGH);
delay(50);
digitalWrite(motortubo,LOW);
//acabou o ciclo
//aqui teria que verificar se os switchs continuam pressionados para poder zerar o sistema mecanico
while(!digitalRead(switchPin2)){digitalWrite(motortubo,HIGH);}//liga o motor apenas para desacionar o switch2, nem entra aqui se o switch tiver desacionado...
digitalWrite(motortubo,LOW);
while(digitalRead(switchPin1)){digitalWrite(motor1, HIGH);}// o mesmo que o while anterior...
digitalWrite(motor1, LOW);
//mecanismo zerado... EDIT: talvez para um funcionamento correto o zeramento tambem deva ser feito no setup() para garantir o inicio correto do sistema
delay(6000);
}
Bom, lembrando que esse codigo pode causar danos no seu mecanismo por eu não ver o funcionamento real, use por sua conta e risco...
Dica: tente desenhar com fluxogramas/balõezinhos o funcionamento do sistema, isso ajuda demais na escrita do codigo.