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. 

Exibições: 204

Anexos

Responder esta

Respostas a este tópico

Boa tarde CHFS,

segue seu code corrigido.

RV

Anexos

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.

Anexos

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

Anexos

Simplificando o que eu preciso, preciso que o segundo ci receba o código inverso.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço