Go Down

Topic: Noteiro BL700 , Arduino e Interface Teclado (Read 495 times) previous topic - next topic

evaniorodrigues

Pessoal sou novo por aqui e gostaria de pedir a ajuda de vocês, estou montando um sistema de cabine de fotos e para impressão de fotos, uma determinada tecla de atalho precisa ser pressionada, creio que minha ideia faz sentido, a ídeia é o seguinte: No noteiro, ao inserir 2 reais por exemplo ele gera dois pulsos pelo que entendi, assim eu conectaria o noteiro no arduino , após toda programação, ao inserir os 2 reais no noteiro enviaria os dois  pulsos para o arduino que comandaria uma outra saida ativando um relé que acionaria a interface do teclado assim ativando a tecla de atalho que eu desejaria, geralmente o pessoal faz isso direto, conectando o noteiro na interface. Mas por fim de pesquisa e aprendizagem e uma vasta gama de opções que o arduino pode me trazer, preferi tentar no arduino e estou com problemas na programação. Alguem poderia me ajudar com isso?

Jeff_85

Acho meio difícil encontrar uma ajuda apenas informando sua necessidade, mas sem dar detalhes técnicos desse tal "noteiro". E outra, aqui o pessoal pode te ajudar com o código que você está com dúvidas. Logo, poste os detalhes de como é a saída desse noteiro, como pretende pegar esses pulsos e o código que você já fez a respeito.

Jeff_85

#2
Nov 10, 2017, 04:34 am Last Edit: Nov 10, 2017, 04:53 am by Jeff_85
Em uma rápida busca com o modelo que forneceu, achei o seguinte: Noteiro BL 700

Não sei se é o mesmo que o seu, mas a ideia é a mesma. Neste do link que encontrei você configura quantos pulsos quer para quando uma nota é inserida. Uma coisa que precisa ver é qual a duração desses pulsos, por exemplo, um pulso a cada 0,5 segundo, um pulso a cada 100mS, eu não sei. Observe que o noteiro deve, penso eu, ser alimentado em 12V e a entrada do arduino opera em 5V, então precisa ter cuidado. Segundo o manual, a saída de pulsos é em 5V, mas verifique se a sua é. Faça um programa simples para ler uma determinada porta do arduino, que receberá os pulsos de seu noteiro. Averigue o tempo dos pulsos, pois com essa informação você pode avaliar os pulsos (para cada nota de R$ 2,00) e validar os pulsos num determinado intervalo de tempo. Este é o início do seu esquema!

evaniorodrigues

Olá Jeff_85 obrigado pelas informações, o pulso do noteiro está configurado para Lo= 50ms Hi= 100ms, ja montei o esquema , uso uma fonte de pc no 12v e uso o GND na fonte e no arduino,  consegui por pesquisa no forum um código o mesmo consegue ler os pulsos, por exemplo se eu insiro a nota 5 ele escreve na tela 5, porem se eu coloco outro 5 reais, ele vai pra 10 fazendo a soma, não queria isso, queria que se eu colocasse 5 ele ativaria uma saida e zerasse, mas não estou tendo resultados.

// Pino que será conectado o contador - supondo que é o 2
#define CONTADOR_PIN 2

// Tempo para contar os pulsos - 1 s = 1000 ms
#define TEMPO_CONTAGEM 1000

// Contador dos pulsos
int contador;

// Estado anterior da entrada
byte ultimoEstado;

// Tempo inicial da contagem dos pulsos
long tempoPrimeiroPulso;

// Variavel para iniciar a contar os pulsos
bool contarPulsos;

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);
 
 contador = 0;
 
 contarPulsos = false;
 
 ultimoEstado = HIGH;
 
 // Inicia o Serial para debug
 Serial.begin(115200);
 
}

void loop()
{
 
 // Ler estado da entrada
 byte estado = digitalRead(CONTADOR_PIN);
 
 // Verifica se foi mudado o estado da entrada e se ele é LOW
 if ((estado == LOW) && (estado != ultimoEstado))
 {
   // Verifica se a contagem ainda não foi iniciada
   if (contarPulsos == false)
   {
     tempoPrimeiroPulso = millis(); // Atualiza valor do tempo inicial
     contador = 1;                       // Inicia o contador
     contarPulsos = true;              // Inicia a contagem de pulsos
   }
   else // Se já iniciou a contagem...
   {
     contador++;                     // ... adiciona 1 ao contador
   }
 }
 
 // Atualiza ultimo estado
 ultimoEstado = estado;

 // Verifica se estava sendo feita a contagem e se o tempo já passou
 if ((contarPulsos == true) && (millis() >= (tempoPrimeiroPulso + TEMPO_CONTAGEM)))
 {
   // Para a contagem
   contarPulsos = false;
   
   // Realiza ação de acordo com a quantidade de pulsos. Por enquanto, só um print do valor para verificar o código
   Serial.println(contador);
   
 }
 
}



Jeff_85

#4
Nov 14, 2017, 12:40 am Last Edit: Nov 14, 2017, 12:52 am by Jeff_85
Para zerar o contador, basta fazer contador = 0;
Caso queira realizar o acionamento de saidas com base no número da grana que entrar, você pode usar um switch. Tipo assim:

Code: [Select]
// Para a contagem
   contarPulsos = false;   
   // Realiza ação de acordo com a quantidade de pulsos. Por enquanto, só um print do valor para verificar o código
   Serial.println(contador);

switch(contador){
case 2: digitalWrite(LED, HIGH); //caso 2 reais, pisca LED no pino 13 duas vezes
            delay(1000);
            digitalWrite(LED, LOW);
            delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
            contador = 0; //zera o contador
break;
case 5:
            //pisca o LED 5 vezes, basta repetir o caso 2 cinco vezes

            contador = 0; //zera o contador
break;
}


Dentro do seu SETUP inclua o seguinte:
Code: [Select]
pinMode(LED_BUILTIN, OUTPUT);




evaniorodrigues

Ah legal nao sabia que seria tranquilo assim, você me ajudou muito, no caso o noteiro trabalha com notas de 2,5, 10, 20, 50, teria que usar da seguinte forma?

case 2: digitalWrite(LED, HIGH); //caso 2 reais, pisca LED no pino 13 duas vezes
            delay(1000);
            digitalWrite(LED, LOW);
            delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
            contador = 0; //zera o contador
break;

case 5: digitalWrite(LED, HIGH); //caso 2 reais, pisca LED no pino 13 tres  vezes
            delay(1000);
            digitalWrite(LED, LOW);
            delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
            delay(1000)
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
            contador = 0; //zera o contador
break;

case 10: digitalWrite(LED, HIGH); //caso 2 reais, pisca LED no pino 13 quatro vezes
            delay(1000);
            digitalWrite(LED, LOW);
            delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW); delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW); delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
            contador = 0; //zera o contador
break;

case 20: digitalWrite(LED, HIGH); //caso 2 reais, pisca LED no pino 13 cinco vezes
            delay(1000);
            digitalWrite(LED, LOW);
            delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
           delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
          delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
          delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
            contador = 0; //zera o contador
break;

case 50: digitalWrite(LED, HIGH); //caso 50 reais, pisca LED no pino 13 seis vezes
            delay(1000);
            digitalWrite(LED, LOW);
            delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
 delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
            delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
          delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
          delay(1000);
            digitalWrite(LED, HIGH);
            delay(1000);
            digitalWrite(LED, LOW);
            contador = 0; //zera o contador
break;

Jeff_85

A ideia do switch é essa mesma. Claro que colocar vários "digitalWrite" dentro de cada "case" não é a forma mais interessante de piscar o led X vezes. Mas a forma de usar o switch para o caso de cada contagem é essa mesma. Claro, dentro de cada "case" você executa tudo o que precisa, até chegar no break. a última coisa que você faz é contador = 0;  . Isso "limpa" a variável contador e permite nova contagem.

Jeff_85

Apenas uma observação:

Quote
o pulso do noteiro está configurado para Lo= 50ms Hi= 100ms, ja montei o
O período é de 150mS (50ms+100ms). Isso quer dizer que para o tempo máximo de 1000mS, você só poderia contar até 6, pois 6*150 = 900mS. Se, por exemplo, botar uma nota de R$ 10,00 (10*150ms = 1500mS), o tempo dos pulso iria extrapolar o seu tempo máximo. Logo, é preciso ajustá-lo para permitir que suas contagem sejam permitidas. Isso, claro, se o noteiro for operar com notas maiore. Mas até R$ 5,00 está certo já!

evaniorodrigues

ótima observação, nao tenho nem como te agradecer, vou partir para testes amanha mesmo, pelo que vi já é expert em programação, aproveitando aqui , você teria algum material para me indicar para estudo ? Como estou começando tem muita coisa nova que não entendo. Acho que um material indicado por alguem que já entende me ajudaria muito; Mais uma vez meu muito obrigado. Logo mais posto os resultados.

Jeff_85

Nem de longe sou expert. A melhor forma de aprender arduino (programação e como ligar as coisas) é entender qual sua dúvida e tentar formular uma pergunta com base nela. Com isso, vários posts aqui já devem aparecer para você. O próprio site oficial, em REFERÊNCIAS, dispõe de grande conteúdo.
Por exemplo, se quiser aprender sobre FOR:
https://www.arduino.cc/en/Reference/For

Switch case: https://www.arduino.cc/en/Reference/SwitchCase

Achei esse livro que está disponível para visualizações:
Arduino Básico
Bom aprendizado e sucesso.

Go Up