Go Down

Topic: "execultando bloco de comando por quantidade de pulso (Read 6574 times) previous topic - next topic

Lago

Postei outro dia um curso online de C++. O arduino é bem parecido.

vagner

Ola amigos!! Estou de volta... Olha o ultimo code que o amigo LegendBR me passou fez a contagem perfeitamente mais como sou novato achei um pouco complicado pra mim, andei dando uma olhada e estudando um pouquinho e consegui montar este code;


  int contage = 0;
  boolean pulso=0;
  boolean pulsoI=0;
void setup()
{
  Serial.begin(9600);
  pulso=HIGH;
  pinMode(3,INPUT_PULLUP);
  pinMode(5,INPUT_PULLUP);
  pinMode(12,OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  Serial.println(contage);

  if(digitalRead(3)==HIGH){if(pulso==HIGH){contage = contage ++;}pulso=LOW;}
  else{pulso=HIGH;}
 
  if(digitalRead(5)==HIGH){if(pulsoI==HIGH){contage = contage - 1;}pulsoI=LOW;}
  else{pulsoI=HIGH;}
 
  if (contage == 1){digitalWrite(12, LOW);}   
  if (contage > 1){digitalWrite(12, HIGH);}
  if (contage > 51){(contage=1);}
  if (contage < 1){(contage=1);}
}

Este faz a contagem dos pulsos do noteiro e e quando pulso um chave esta faz um contagem regressiva, que dependendo acende e apaga um led. Mais o que eu queria mesmo era que fizesse um servo motor desses de parabólica rodar continuamente e que tambem para-se de rodar,pois ate consigo fazer ele começar a rodar quando a contagem fica >1 mais ai quando volto para 1 o que deveria fazer ele parar o servo motor, ele continua... ai e so resetando para ele parar. conto mais uma vez com a ajuda de vcs. Desde já muito obrigado!!!

samucao

Oi Vagner tudo bom.
Estou quebrando a cabeça tentando entender como funciona o bl700.
Gostaria se vc poder esplicar como vc fez para ligar a fiação dele, o esquema de cores.
Não estou conseguindo integra-lo com arduino de jeito nenhum..
Vlw..

vagner

Bem amigo Samucao!!! O esquema e o seguinte; Os fios amarelo e verde eu não costumo ligar pois ele são inibidores ( e melhor deixar desligado ), o fio vermelho é claro e o positivo 12V e o laranja vai no negativo, o azul e a saída de pulso... Agora o fio roxo e que e o determinante na saída de pulso, ou seja se vc liga-lo a uma fonte de 12V os pulsos na saída (fio azul) serão pulso de 12V, se ligar a uma fonte de 5V serão de 5V e por fim se ligar ao terra (GND) o pulso será compatível a qual fonte foi ligado o fio roxo. Espero ter ajudado amigo... Mais só por fins de curiosidade. Qual e o seu projeto?

bubulindo


Code: [Select]

  if(digitalRead(3)==HIGH){if(pulso==HIGH){contage = contage ++;}pulso=LOW;}
  else{pulso=HIGH;}


Dá-me um bom motivo para estruturares o teu código assim.

Esse código não tem nada para controlar um servo. Já pensaste que o servo pode apenas rodar num sentido e não no sentido da viagem menor?

Que vês no serial monitor? Os numeros parecem-te correctos? Ou é raro ficares com a contagem em 1?


Os fios amarelo e verde eu não costumo ligar pois ele são inibidores ( e melhor deixar desligado )

Errado. É melhor deixá-los ligados a um potencial que não os iniba. Deixá-los no ar pode provocar que o motor pare de vez em quando e não saibas porquê...
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).

samucao

Amigo Vagner,

Muito obrigado pela dica. Já estava a um bom tempo quebrando a cabeça.
Meu projeto é para maquina de musica.
Muito Obrigado!
Continuarei por aqui aproveitando as dicas e se possível ajudando..Abraço

vagner

Amigo Samucao que bom tem lhe ajudado!!! Também trabalho com maquina de musicas e estava querendo fazer do arduino uma interfase, simulando um teclado. Talvez possamos trabalhar junto para melhoramento das nossas maquinas. O que vc acha?

vagner

Amigo Bubulino realmente neste code ainda não havia feito nenhuma referencia ao servo motor o que foi revolvido substituindo por um analogWrite(6,0); e analogWrite(6,10); nas linhas ;
  if (contage == 1){digitalWrite(12, LOW);}   
  if (contage > 1){digitalWrite(12, HIGH);}
este programa esta me servindo muito bem. acho que semana que vem minha maquina de vending estará pronta e portarei fotos da maquina que tão generosamente vcs me ajudarão a fazer.
   Agora a respeito da dica que o amigo Samucao pediu erra a de um BL700 que e um aceitador de notas (dim dim) e não de um servo.
  Amigo Bubulino obrigado pelo interesse!! E peço poder contar sempre com sua ajuda pois sou novato em arduino. Fiquem com Deus!!!

samucao

Ola amigos,

Estou precisando de uma ajuda para programar um codigo, irei tentar explicar.
Quando passo uma nota de 2 reais é gerado dois pulsos de 55 ou 56 ms que é capturado pelo meu contador, nota de 5 é gerado cinco pulsos com os mesmos tempos 55 56, sei lá acho que pode variar um pouco. Então considerei para não ter falha que um pulso de 40 ms é um real e joguei para valor. O problema é como zerar o valor apenas ao finalizar a contagem? Pensei em iniciar uma contagem de tempo a partir do primeiro pulso, porque o intervalo entre eles são minimos acho que 2 segundos bastaria. Mas não sei como fazer, agradeço ajudas. Obrigado!!

Segue codigo:

#define CONTADOR_PIN 13
int contador;
int valor;
void setup()
{
  // Define pino do contador como input, e ativa do pull-up (deve funcionar dessa forma, mas nao tenho certeza)
  pinMode (CONTADOR_PIN, INPUT_PULLUP);
 
  // Inicia o Serial para debug
  Serial.begin(115200);
 
}

void loop()
{
  contador = 0;
  while (digitalRead(CONTADOR_PIN) == HIGH)
  {   
    contador ++;
    if (contador == 40){
      valor ++;
      Serial.print("Valor - ");
      Serial.println(valor);
      }
  }
 
 
}

bubulindo

Estás a assumir que
Code: [Select]

#define CONTADOR_PIN 13  //má ideia usar este pino...
unsigned char contador=0;
unsigned long tempo = 0;
unsigned char flag = 0;

void setup()
{
  // Define pino do contador como input, e ativa do pull-up (deve funcionar dessa forma, mas nao tenho certeza)
  pinMode (CONTADOR_PIN, INPUT_PULLUP);
 
  // Inicia o Serial para debug
  Serial.begin(115200);
 
}

void loop()
{
  contador = 0;

  if (digitalRead(CONTADOR_PIN) == LOW && flag == 0)  {   //tens o pull up activado, aqui tens de ver se foi para low...
    contador ++; //incrementa numero de pulsos.
    flag = 1; 
   }
  if (digitalRead(CONTADOR_PIN) == HIGH) { //acabou-se o pulso...
     tempo = millis(); //começa a contar no final do pulso...
     flag = 0;
  }

  if (millis() - tempo >= 100) { //aqui poderás ter de ajustar este valor... mas deve dar.
    //acabou a sequência...
    Serial.print("Valor = ");
    Serial.println(contador);  //vê se está correcto...
    contador = 0;   //pronto para outra.
  }
 
}


Não testei nem compilei, mas deve ser isto que pretendes... ou algo parecido.
Estou a assumir que o duty cycle dos pulsos é 50% (ou seja, está o mesmo tempo em cima como em baixo).

Se a largura dos pulsos não varia mas sim o número de pulsos é escusado temporizar se eles estão ou não dentro desse intervalo e apenas ver se passados 55 ou 56 ou lá o que é ms aparece outro pulso ou não. Se não aparecer, então é porque terminou a sequência e podes considerar o valor correcto.
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).

vagner

#40
Aug 23, 2013, 06:32 pm Last Edit: Aug 23, 2013, 06:37 pm by vagner Reason: 1
Amigo Samucao!!! ja deu uma olhada o ultimo code que postei? Ele não registra os pulsos do aceitador por tempo, mais sim como unidade. onde que cada pulso será somado. Si vc me disser para que fins vc quer esse code talvez possamos adapta-lo para o seu projeto. Vou explicar como esse code esta funcionando;
  o pino 3 faz um contagem progressiva e o pino 5 regressiva, o pino 12 e a minha saida de referencial onde eu ligo um circuito com um servo motor. toda vez que o contador sai do 1 o servo começa a trabalhar so parando quando volta ao 1. Diga o que pretende que talvez possamos lhe ajudar em seu projeto.
!!!Um abraço fique com Deus!!!
  Opá!! Já estava esquecendo... Dê um olhada nesse meu outro projeto. Estou meio perdido nele ...        http://forum.arduino.cc/index.php?topic=182259.0


Go Up