Pages: 1 2 [3]   Go Down
Author Topic: "execultando bloco de comando por quantidade de pulso  (Read 4937 times)
0 Members and 1 Guest are viewing this topic.
Brasília - DF - Brazil
Offline Offline
Sr. Member
****
Karma: 6
Posts: 258
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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

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

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

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

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

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

Code:
  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ê...
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: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

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

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

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

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

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);
      }
  }
 
 
}
Logged

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

Estás a assumir que
Code:
#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.
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: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

« Last Edit: August 23, 2013, 11:37:55 am by vagner » Logged

Pages: 1 2 [3]   Go Up
Jump to: