Ajuda com conexão serial Arduino X equipamento

Boa tarde, meu nome é Paulo, estou com uma certa urgência para fazer um equipamento funcionar queria saber se vcs podem me dizer se vai funcionar. Eu trabalho com automação e controle de acesso em condomínios, comprei um dispensador de cartão e ele funciona através da porta rs232 e um software no computador. eu precisava colocar um botão para que quando acionado ele dispensasse o cartão sem usar o software, queria saber se consigo programar ele com um modulo de rele e modulo rs232, para que sempre que eu acionar o relé ele execute o comando para ejetar o cartão no dispensador pelo modulo rs232. Se puderem me ajudar agradeço, de qualquer maneira obrigado.

Isso só vendo como é o hardware do seu dispensador . Veja com o fabricante e o manual se há como acionar sem ser por sw. E tambem qual e o comando e o protocolo usado para dispensar o cartão. Se souber isso deve ser facil um Arduino emular esse comando quando um botão for acionado

Ele me enviou esse manual, com o protocolo de comunicação.

MT166-Communication Protocol.pdf (1.55 MB)

Alguma ajuda?

Boas, Entao o datasheet que colocaste do dispositivo tem bem detalhado o protocolo de comunicação que é implementado.Basicamente terás de ligar esse botão a uma entrada digital do arduino e programares uma interrupção para quando este for pressionado enviar para o modulo via porta serie essa instrução para largar o cartão. No datasheet tens isto:

4.4Dispensingcardtotheoutsideofcarddispense Hostsend: 0x02 0x00 0x02 0x31 0x32 0x03

Reader return: 0x02 0x00 0x03 0x31 0x3 2O

Parece relativamente fácil. Tens o modulo dos cartões contigo?

Opa, Tenho sim estou com o dispensador e com o arduíno Uno. Vc poderia me ajudar com o código é que é a primeira vez que mexo com arduíno e estou apanhando um pouco pra fazer isso funcionar. Obrigado.

?

Já tens alguma coisa feita?Tenho andado sem tempo estes dias, mostra ai o que ja tens e assim que possa envio-te algo rápido para testares.

//0x02 0x00 0x02 0x31 0x32 0x03

void setup() {
  Serial.begin(9600);

    /*  4.4Dispensingcardtotheoutsideofcarddispense
    Hostsend:
    0x02 0x00 0x02 0x31 0x32 0x03
    */
  Serial.print(0x02,HEX); 
  Serial.print(0x00,HEX); 
  Serial.print(0x02,HEX); 
  Serial.print(0x31,HEX); 
  Serial.print(0x32,HEX); 
  Serial.print(0x33,HEX); 
}

void loop() {
  

  }

Tenta assim e ve se ele mexe ...

Boa Tarde eu tenho isso que vi em um video no youtube , só dei uma ajustada pra o que eu preciso e com o que vc me passou agora

void setup() {
  // put your setup code here, to run once:

  pinMode(8, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.available();
  Serial.write ("tudo OK");
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.available();
  while (digitalRead(8) == LOW) {
    Serial.print(0x02, HEX);
    Serial.print(0x00, HEX);
    Serial.print(0x02, HEX);
    Serial.print(0x31, HEX);
    Serial.print(0x32, HEX);
    Serial.print(0x33, HEX);
    break;
  }

}

Serial.write ("tudo OK");

Isto não está correcto, uma vez que irás enviar isto ao modulo também.Nota que a porta serie não pode ser partilhada.Não podes escrever dados para humanos e ao mesmo tempo estares a escrever para o módulo! Ele não vai saber o que é "tudo OK" ... Eventualmente usa um led para marcares algo ... O modulo usa TTL na porta serie ou é RS232?

Ao executar o meu código o que aconteceu?

quando enviei seu codigo pro arduino ele nao fez nada, e agora quando tento enviar outro codigo ele da erro no envio. Mas ja consegui resolver

quando enviei seu código pro arduino ele nao fez nada, e agora quando tento enviar outro codigo ele da erro no envio.

Não entendi bem agora, dá erro ao subir novo código para o arduino ou o modulo sinaliza erro?

ele dava erro ao subir um novo codigo

Nota que como te disse a porta serie nao pode ser partilhada.Se tens o modulo ligado na serie quando estas a enviar o codigo vai falhar! Tens de desligar do modulo, faz upload, desliga o arduino, faz as ligações, coloca energia primeiro no modulo para dar tempo para ele inicializar e so depois liga o arduino.

|281x500 |375x500

?

Deixa eu te explicar mas desde o começo pq oque eu achei que entendia de programação, vi que não entendo nada. :D

Eu tenho o expedidor, dele sai um cabo db9 ligado a um modulo db9 para arduino, no modulo esta ligado vcc no 5v do arduino, gnd no gnd do arduino, txd no borne 0 Rx do arduino, o rxd do modulo ligado no borne 1 TX do arduino. Na protoboard tem um botão ligado no gnd do arduino e no canal 8 do arduino. o que eu precise não o conseguindo de jeito nenhum fazer é que quando eu aperte esse botão ele envie o sinal pro modulo e do modulo para o expedidor para poder sair o cartão.

esse é um log do software que vem junto com o expedidor,

14:39:58 Prepare to open COM5... 14:39:58 ==========COM5 open successed========== 14:39:58 ----------> 02 00 02 32 30 03 01 14:39:58 <<<<<< 02 00 03 32 30 10 03 10 14:39:59 ----------> 02 00 02 31 31 03 03 (CÓDIGO DE QUANDO SAIU O CARTÃO) 14:40:00 <<<<<< 02 00 03 31 31 59 03 5B

Ok entao estas a dizer que se do pc enviares isso ele dá um cartao para fora? Se olhares para o meu codigo o comando enviado é defacto diferente.

02 00 02 32 30 03 01 ->indicado por ti
0x02 0x00 0x02 0x31 0x32 0x03 ->o que eu vi no datasheet

Se assim for bastara alterar o codigo que eu te enviei para:

void setup() {
  Serial.begin(9600);

    /*  4.4Dispensingcardtotheoutsideofcarddispense
    Hostsend:
    0x02 0x00 0x02 0x31 0x32 0x03
    */
  Serial.print(0x02,HEX);
  Serial.print(0x00,HEX);
  Serial.print(0x02,HEX);
  Serial.print(0x32,HEX);
  Serial.print(0x30,HEX);
  Serial.print(0x03,HEX);
  Serial.print(0x01,HEX);
}

void loop() {


  }