Ler dados seriais de pesagem de uma balança e exibir em um display 16x2

Pessoal, Bom dia a todos!

sou novo em arduino,porém tenho experiência em eletrônica.

Minha dificuldade è, extrair e apresentar em um display 16x2 apenas a informação de leitura de peso liquido que está neste protocolo serial RS232 descrito no manual da balança:

São transmitidos peso bruto, tara e líquido e indicativo de estabilidade de acordo com a tabela abaixo

 S , B B B . B B B , T T T . T T T , L L L . L L L CR LF

S: Flag de estabilidade e pode assumir os seguintes valores:

0: Peso estável;

1: Peso instável.

B: 7 bytes de peso bruto incluindo o ponto decimal e sinal de peso negativo;

T: 7 bytes de peso tara incluindo o ponto decimal e sinal de peso negativo;

L: 7 bytes de peso líquido incluindo o ponto decimal e sinal de peso negativo;

CR Carriage return (0X0D)

LF Line feed (0x0A)

       Total: 27 bytes

Exemplos de transmissão: Bruto=10,000kg, tara=0,200kg e líquido=9,800kg

                                  1 , 0 1 0 . 0 0 0 , 0 0 0 . 2 0 0 , 0 0 9 . 8 0 0 CR LF

## Meu Código está lendo a "frase" serial e extraindo a informação peso, porém o display só atualiza o valor da leitura do peso quando eu desconecto e reconecto o DB9 da porta da balança.

eu gostaria que o display atualizase em tempo real.

e depois gostaria que este valor se tronasse um numero real, pois pretendo fazer um comparador para realização de cortes para receitas. (estou apanhando do comando atoi para o tamanho do valor final.)

Estou utilizando o display keypad e um arduino uno.

 segue o código que estou batalhando. rsr:

Desde Já agradeço!!

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int led = 13;

int contacaractere = 0; //

long dadosint ;
long dadosintm ;
int qtdecarac = 28; //quantidade de caracteres
char matriz[28];//*******
String conteudo;
String conteudom;
long indicacao = 0;
String leitura;

void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
lcd.begin(16, 2);

lcd.print("Balanca serial");
lcd.setCursor(0, 1);
lcd.print("iniciando...");
}

/**
* Função que lê uma string da Serial
* e retorna-a
*/
String leStringSerial(){
conteudo = "";
char caractere;

while(Serial.available() > 0) {
// Lê byte da serial
caractere = Serial.read();

if (contacaractere <= qtdecarac){
if (caractere != '\n'){
// Ignora caractere de quebra de linha
contacaractere ++ ;

matriz[contacaractere]= caractere;

}}

delay(10);
}

Serial.print("Recebi: ");
Serial.print(conteudo);
Serial.print(" qtde carac. ");
Serial.print(contacaractere);
Serial.print(" matriz pos. ");

leitura = String(matriz[19]) + String(matriz[20]) + String(matriz[21]) + String(matriz[22]) + String(matriz[23]) + String(matriz[24]) + String(matriz[25]);
Serial.print(leitura);

contacaractere = 0;

return conteudo;
}

void loop() {

lcd.setCursor(9, 1);
lcd.print(leitura);
if(leitura != conteudom){
lcd.setCursor(0, 1);
lcd.print(" ");
conteudom = leitura;
}

if (Serial.available() > 0){
// Lê toda string recebida
String recebido = leStringSerial();




}

Exibições: 2264

Responder esta

Respostas a este tópico

Boa noite,

Segue endereço com o software.

https://github.com/mauortega/Leitura-Serial

https://youtu.be/za5H40G8obQ

Abs.

Mauricio Ortega

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço