OLa pessoal, estou fazendo um projeto ligando um leitor de código de barra via serial, mas quando leio o código de barra ele imprime valores diferentes no display, preciso de ajuda!!!

Exibições: 2108

Respostas a este tópico

Caro, 

aconselho a checar o BaudRate que inicializou a placa e o BaudRate do leitor. Normalmente você configura isso no leitor via leitura de um código de configuração conhecido.

Espero ter ajudado. Caso não, envie maiores detalhes para ajudá-lo.

Att,
Raul.

Ja verifiquei os dois estão com 9600, eu estou usando um leitor da simbol LS2208(motorola), com o cabo serial, eu preciso cadastrar um código de barra e quando ler esse código chama uma saida digital.

Mas estou tendo esse problema quando leio o cód ele imprime outro valor diferente,EX: o cód que criei é 11111 e apareco no display  ggggg.

 

Obrigado pela ajuda

Leandro ,

qual a marca e modelo do leitor ?

Vc configurou ele direitinho ?

Abraço

Enio

Simbol LS2208, sim o leitor esta configurado (baixei o manual e configurei) pq quando ligo num painel aq da empresa ele lê o código certo e seleciona o programa correto no PC tambem funciona normal.

Obrigado pela ajuda

Ja verifiquei os dois estão com 9600, eu estou usando um leitor da simbol LS2208(motorola), com o cabo serial, eu preciso cadastrar um código de barra e quando ler esse código chama uma saida digital.

Mas estou tendo esse problema quando leio o cód ele imprime outro valor diferente,EX: o cód que criei é11111 e apareco no display  ggggg.

Leandro, eu já fiz um leitor desses, mas tem que ser um leitor de código de barras PS2, aí dá certo. Segue o código que deu certo comigo:


int SCAN_ENTER = 0x5a; int SCAN_BREAK = 0xf0;
int breakActive = 0;
int clockPin = 2; // Clock is only output.
int dataPin = 3; // The data pin is bi-directional
                // But at the moment we are only interested in receiving   
int ledPin = 13;  // When a SCAN_ENTER scancode is received the LED blink
int clockValue = 0; byte dataValue;
byte scanCodes[10] = {0x45,0x16,0x1e,0x26,0x25,0x2e,0x36,0x3d,0x3e,0x46}; char characters[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
int quantityCodes = 10;
char buffer[64] = {};    // This saves the characters (for now only numbers)
int bufferPos = 0;
int bufferLength = 64;


void setup() {
    pinMode(dataPin, INPUT);                                               
    pinMode(clockPin, INPUT);                                              
    pinMode(ledPin, OUTPUT);                                               
    Serial.begin(9600);                                                    
}

void loop() {
    dataValue = dataRead();                                                
    // If there is a break code, skip the next byte                        
    if (dataValue == SCAN_BREAK) {                                         
        breakActive = 1;                                                     
    }                                                                      
    // Translate the scan codes to numbers                                 
    // If there is a match, store it to the buffer                         
    for (int i = 0; i < quantityCodes; i++) {                                 
        byte temp = scanCodes[i];                                            
        if(temp == dataValue){                                               
            if(!breakActive == 1){                                             
                buffer[bufferPos] = characters[i];                               
                bufferPos++;                                                     
            }                                                                  
        }                                                                    
    }                                                                      
    //Serial.print('*'); // Output an asterix for every byte               
    // Print the buffer if SCAN_ENTER is pressed.                          
    if(dataValue == SCAN_ENTER){                                           
        //Serial.print("\nbuffer: ");                                          
        // Read the buffer                                                   
        int i=0;                                                                                                 
        if (buffer[i] != 0) {                                                
            while(buffer[i] != 0) {                                            
                Serial.print( buffer[i] );                                       
                buffer[i] = 0;                                                   
                i++;                                                             
            }                                                                  
        }                                                                    
        //Serial.println(" [Enter]");                                          
        bufferPos = 0;                                                       
        // Blink the LED                                                       
        digitalWrite(ledPin, HIGH);                                          
        delay(300);                                                          
        digitalWrite(ledPin, LOW);                                           
    }                                                                      
    // Reset the SCAN_BREAK state if the byte was a normal one             
    if(dataValue != SCAN_BREAK){                                           
        breakActive = 0;                                                     
    }                                                                      
    dataValue = 0;                                                         
}

int dataRead() {
    byte val = 0;                                                          
    // Skip start state and start bit                                      
    while (digitalRead(clockPin));  // Wait for LOW.                       
    // clock is high when idle                                             
    while (!digitalRead(clockPin)); // Wait for HIGH.                      
    while (digitalRead(clockPin));  // Wait for LOW.                       
    for (int offset = 0; offset < 8; offset++) {                           
        while (digitalRead(clockPin));         // Wait for LOW               
        val |= digitalRead(dataPin) offset; // Add to byte                
        while (!digitalRead(clockPin));        // Wait for HIGH              
    }                                                                      
// Skipping parity and stop bits down here.                            
    while (digitalRead(clockPin));           // Wait for LOW.              
    while (!digitalRead(clockPin));          // Wait for HIGH.             
    while (digitalRead(clockPin));           // Wait for LOW.              
    while (!digitalRead(clockPin));          // Wait for HIGH.             
    return val;                                                            
}


abraços.


Marcelo Cuin  |  @marcelocuin  |  www.cuin.com.br

Ola pessoal consegui fazer o leitor comunicar com o leitor de código de barra, fiz uma placa com MAX232 que converte rs232 para ttl...

Obrigado pela ajuda

Pode postar o projeto?

olá amigo, boa tarde!!

pode me dizer como fez a ligação do leitor via rs232 e qual biblioteca utilizou?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço