esponjinha Posted February 28, 2012 Report Share Posted February 28, 2012 Boas estou a desenvolver um mecanismo de um portao com um motor dc e dois switchs. O objectivo e kuando sobe e toca no switch pára, e depois so pode descer para baixo. E o mesmo kuando desce toca no switch e pára. A gora o problema e o codigo eu fiz o codigo para o motor rodar a direita e esquerda e fiz um a parte para o switch acender e apagar um led .Agora o que eu quero fazer e um codigo para isto ja junto. Presizava da vossa ajuda para criar um programa para o motor e para o switch . Obrigado filipe Link to comment Share on other sites More sharing options...
bubulindo Posted February 29, 2012 Report Share Posted February 29, 2012 E colocares o código que fizeste aqui? Se não soubermos o que fizeste não podemos juntar os dois. include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
gadelhas Posted February 29, 2012 Report Share Posted February 29, 2012 Código? Esquema? Linguagem? Microcontrolador ou Autómato? Características do motor? etc etc? Abraço Gadelhas Link to comment Share on other sites More sharing options...
bubulindo Posted February 29, 2012 Report Share Posted February 29, 2012 acho que è um arduino... include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
esponjinha Posted February 29, 2012 Author Report Share Posted February 29, 2012 E um arduino O codigo esta aqui do motor: int motorPin1 = 11; int motorPin2 = 10; int entrada = 0; void setup() { Serial.begin(9600); pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); } void loop() { // testa se a porta serial está disponível if (Serial.available() > 0) { // le os dados da porta serial armazena na variavel 'entrada' entrada = Serial.read(); if (entrada == 'e'){ esquerda(); } else if (entrada == 'd'){ direita(); } else { parar() } } } void esquerda(){ digitalWrite(motorPin1, 1); // Motor para a esquerda digitalWrite(motorPin2, 0); // } void direita(){ digitalWrite(motorPin1, 0); // Motor para a esquerda digitalWrite(motorPin2, 1); // } void parar(){ digitalWrite(motorPin1, 0); // para o motor digitalWrite(motorPin2, 0); // } e do switch esta aqui: int switchPin = 2; int switchValue = 0; int ledPin = 13; int counter = 0; void setup() { pinMode(switchPin, INPUT); //set switch pin as INPUT pinMode(ledPin, OUTPUT); //set led pin as OUTPUT } void loop() { switchValue = digitalRead(switchPin); //get the switch's current value if (switchValue == HIGH) { digitalWrite(ledPin, HIGH); //turn LED on } else { digitalWrite(ledPin, LOW); // turn LED off } } Link to comment Share on other sites More sharing options...
bubulindo Posted March 1, 2012 Report Share Posted March 1, 2012 const int motorPin1 = 11;//o espaco de memória RAM do arduino é finito... const int motorPin2 = 10; const int FechadoPin = 2; const int AbertoPin = XXXXXXXX; //escolhe tu o pino const int switchValue = 0; char estado; char entrada = 0; //a Serial funciona em ASCII, com chars. guardar chars em int é no mínimo desperdício... //como isto é C++, não sabes exactamente se a variável entrada vai ter o valor 'e' com char é garantido. void setup() { Serial.begin(9600); pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); estado = 'p'; } void loop() { // testa se a porta serial está disponível if (Serial.available() > 0) { // le os dados da porta serial armazena na variavel 'entrada' entrada = Serial.read(); if (entrada == 'e'){ if (estado == 'd') { //inversões de sentido à bruta em motores não é saudável... parar(); estado = 'p'; } else { esquerda(); estado = 'e'; } } if (entrada == 'd'){ if (estado == 'e') { //inversões de sentido à bruta em motores não é saudável... parar(); estado = 'p'; } else { direita(); estado = 'd'; } } if ((digitalRead(FechadoPin) == HIGH) || (digitalRead(AbertoPin) == HIGH)) { //se chegaste ao fim de curso em qualquer um dos sentidos, parar(); //parar motor estado = 'p'; //actualizar estado. } } void esquerda(){ digitalWrite(motorPin1, 1); // Motor para a esquerda digitalWrite(motorPin2, 0); // } } void direita(){ digitalWrite(motorPin1, 0); // Motor para a esquerda digitalWrite(motorPin2, 1); // } void parar(){ digitalWrite(motorPin1, 0); // para o motor digitalWrite(motorPin2, 0); // } Talvez pudesse ser melhor... mas como está deve funcionar. À parte de algum erro que escapou. include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
esponjinha Posted March 1, 2012 Author Report Share Posted March 1, 2012 Obrigado pelo codigo e uma grande ajuda. Eu no switch so tenho dois cabo o da c que liga o 5v e tenho o NC que ligei o ao pin 2 para o No n meti cabo e presizo por? E que o meu objectivo e por um switch em cima e outro em baixo kunado o portao tocar no switch o portao pára. Link to comment Share on other sites More sharing options...
bubulindo Posted March 1, 2012 Report Share Posted March 1, 2012 NO quer dizer Normally Open. NC quer dizer Normally Closed. Normalmente usa-se lógica invertida para proteger contra a quebra de cabos. Logo, quando o portão tocar no switch, o sinal deve ir para zero. Talvez à sorte, ligaste isso correctamente. include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
esponjinha Posted March 1, 2012 Author Report Share Posted March 1, 2012 mas tu no codigo tenhs a variavel do Aberto pin esse e o que vai ligar onde ? Link to comment Share on other sites More sharing options...
bubulindo Posted March 1, 2012 Report Share Posted March 1, 2012 Diz-me tu... tu disseste que vais ter dois switches. um é no pino 2, o outro é onde decidires. Eu não sei que pinos tens livres. include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
esponjinha Posted March 1, 2012 Author Report Share Posted March 1, 2012 certo entao mas e como fasso para tesatr so com um switch? e k fiz mas nao deu Link to comment Share on other sites More sharing options...
bubulindo Posted March 2, 2012 Report Share Posted March 2, 2012 Não fazes... :S Se o programa está feito para testar com dois switches, precisas de dois switches para o testar. Se não tens switches, defines um pino que tenhas livre como entrada (para activar o pull up), e ligas um fio do GND a esse pino para simular um switch. include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
esponjinha Posted March 4, 2012 Author Report Share Posted March 4, 2012 Eu ja meti os dois switchs mas mesmo assim nao consigo por a trabalhar correctamente. 😄 Link to comment Share on other sites More sharing options...
bubulindo Posted March 4, 2012 Report Share Posted March 4, 2012 Coloca serial.write em vários pontos do programa para perceberes onde é que o programa está a parar... include <ai se te avio> Mãe () { } Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now