Urządzenia peryferyjne lab4, Studia, PWR, 5 semestr, Urządzenia peryferyjne, laboratorium


Urządzenia peryferyjne

Laboratorium nr 4

Temat: Obsługa czytnika kart magnetycznych.

Prowadzący: dr inż. Tomasz Walkowiak

Elżbieta Tchorowska, 171067

Konrad Kukulski, 163930

Cele ćwiczenia:

Należało wykonać program, który miał za zadanie za pomocą czytnika kart magnetycznych, wypisać na ekran informacje zawarte na karcie lub wypisać wprowadzony na czytniku kod PIN.

Wybranym językiem programowania było C++ , środowisko VisualStudio2008.

Wykonanie:

Pierwszym etapem programu było umożliwienie połączenia się z portem COM1, na którym znajdował się czytnik.

0x08 graphic

Następnym krokiem było stworzenie interfejsu do obsługi. Znalazły się tam dwa przyciski „Karta” i „Klawiatura”, których zadaniem było przełączanie odczytu między kartą a klawiaturą. Stworzono okienko, w którym miał pokazywać się wynik odczytu oraz przyciski „Odczytaj”, których naciśnięcie oznaczało chęć wyprowadzenia danych na ekran. No i jeszcze okienko na wprowadzanie kodów sterujących.

Kody sterujące były wysyłane do czytnika mniej więcej w sposób :

0x08 graphic

I tak po wpisaniu kodu „164” gdzieś zaświeciła się zielona diodka, a my do przycisków „Karta” i „Klawiatura” wklepaliśmy wysyłanie kodów wyboru modułu. Po wykonaniu, gdy naciskaliśmy na zmianę te przyciski świecąca diodka zaczęła przeskakiwać z miejsca koło czytnika karty do czytnika PINu i z powrotem.

Następnie należało wykonać wyprowadzanie danych na ekran. Kod był prawie identyczny z tym na górze, z tą różnicą, że zamiast Write było Read, tablica byte była n-elementowa i na końcu kopiowaliśmy do Stringa z wywaleniem go na ekran.

I tu pojawiły się schody. Za pierwszym odczytem nawet działało, za drugim wypisywało bzdury. Prawdopodobnie z powodu nieczyszczenia buforów, których nie zdążyliśmy zrobić.

port = new SerialPort();

timer = new Timer();

port.PortName = "COM1";

port.BaudRate = 2400;

port.Parity = Parity.Odd;

port.StopBits = StopBits.One;

port.DataBits = 8;

port.Handshake = Handshake.None;

port.WriteTimeout = 1000;

port.ReadTimeout = 10000;

port.Encoding = Encoding.UTF8;

timer.Tick += new EventHandler(port_DataReceived);

timer.Interval = 500;

timer.Start();

WriteCmd((byte)170);

WriteCmd((byte)164);

byte[] buf = new byte[2];

buf[0] = (byte)161;

buf[1] = (byte)255;

try

{

if (!port.IsOpen)

port.Open();

port.Write(buf, 0, 2);

port.Close();



Wyszukiwarka