Boa tarde pessoal, estou quebrando a cabeça já faz uma semana para fazer meu programa funcionar e nada.
Eu preciso receber um número através da porta serial do Arduíno, o Java vai enviar o número pela porta serial, então o Arduíno recebe esse valor e aplica em um shiftout para dar o comando para um 74595. Após alguns testes constatei que o que digito para enviar através da serial, a mesma envia em ASCII, pois bem, converti o valor recebido para decimal (subtrai do valor '48'), mas quando rodo o programa a variável que recebe o valor da "serial.read" recebe um digito de cada vez, por exemplo: digitei 48, no primeiro loop a variável vai receber o 4, no segundo loop esse valor vai ser substituído pelo 8, gostaria de saber como faço para a variável receber exatamente o valor que chegou pela porta serial.
Tags:
Boa tarde CHFS,
segue seu code corrigido.
RV
Eu desconhecia a função "Serial.parseInt", muito obrigado pela ajuda, estou fazendo um projeto da faculdade, curso engenharia, ele consiste em o Java gravar e ler um banco de dados MYSQL, de acordo com o que será lido no banco, ele vai enviar para o arduino através da porta serial determinados leds a se acender, estou usando dois 595 para poder controlar 16 leds, estava empacado pois o arduino estava recebendo em ASCII digito por digito, logo a lógica não estava funcionando, após a ajuda do "mineirin RV", consegui resolver meu problema.
O código anexo já está adaptado para controlar 2 cis, grato pela atenção.
Para você controlar um 595, você precisa mandar um número de 8 bytes, independente da base usada, para controlar dois, você mandar um número com 16 bytes, como cada ci só suporta 8 bytes, a partir do nono byte recebido pelo primeiro ci, ele vai enviar os bytes excedentes para o próximo, por exemplo: ele recebe 011111111, o primeiro byte recebido vai ser enviado para o segundo ci e na memória dele ficará o 01111111. Usei esse exemplo em binário para ilustrar melhor o funcionamento, eu fui fazer o teste com o programa que o MR sugeriu e consegui, mas o segundo ci e o primeiro recebem o mesmo valor, então os dois funcionam como se estivessem espelhados, gostaria de saber como faço para controlar eles individualmente, por exemplo: quero que o primeiro ci receba o valor 10 e o segundo 20.
CHFS, boa noite.
vocês esta confundindo determinados conceitos.
1. "você precisa mandar um número de 8 bytes" , o correto é 8 bits.
2. "controlar dois, você mandar um número com 16 bytes" , o correto é 16 bits.
3. O shiftOut() trabalha somente com um byte ( 8 bits);
Ao enviar um valor maior que 8 bits, ele despreza os restantes.
4. No seu sketch ao usar o shiftOut() duas vezes com a mesma variável, você simplesmente
deslocou os 8 primeiros bits para o primeiro CI, em seguida deslocou estes bits para o segundo CI,
deslocou os 8 primeiros bits para o primeiro CI. E assim eles ficam com o mesmo valor e igual aos
8 primeiros bits.
5. Para obter sucesso, faça assim:
em uma linha envie (shiftOut()) a variável dados (que é maior que 8 bits), em seguida pegue
esta variável e faça um shift com ela para a direita 8 bits, e ai então envie novamente (shiftOut()).
Assim deve dar certo.
RV
Simplificando o que eu preciso, preciso que o segundo ci receba o código inverso.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por