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?
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.
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!
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);
}
}
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:
// 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:
pinMode(LED_BUILTIN, OUTPUT);
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;
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.
Apenas uma observação:
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 6150 = 900mS. Se, por exemplo, botar uma nota de R$ 10,00 (10150ms = 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á!
ó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.
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.