Draai je Arduino in een magnetische kaartlezer! (4 / 9 stap)

Stap 4: Detecteren wanneer een kaart is gejat


1. detecteren wanneer een kaart heeft gejat is
Formeel, zou men het controleren van de pin van de /CARD_PRESENT om te zien als deze laag wordt neergezet. Gelukkig is dit niet echt nodig. We controleren voor geldige kaart later. Afwisselend, kon u het lezen van uw strobe pin om te zien wanneer flitsers hebben gebracht op de pin, echter dit zal je net veel klokt zero's. De lezer zal sturen over 60-70 voorloopnul is u te laten weten dat de gegevens is ongeveer te worden voorgelegd. Echter, we gonna de aard van de binaire gegevens gebruiken om te bepalen wanneer te beginnen met opnemen van bits. De start-sentinel (SS) voor track een is het percentage teken (%). Het is een binaire waarde is 0010 0101 wat betekent dat het zal worden opgeslagen (en lezen) als 1010 001 (is het 7-bits zodat de 8e bit is niet verzonden). Nu, de oplettende lezer zal merken dat hoewel de gegevens achterstevoren, het komt niet overeen met de binaire ASCII-waarde. Dat is omdat het 0x20 off van hex. Het symbool % is 0x25 en 0100 0101 is 0x05. Kaartgegevens heeft 0x20 afgetrokken van de waarde. Dat een opknoping daar in het hoge knabbelen is de oneven pariteitsbit. Het komt er dus dat er een oneven aantal "1" s in de waarde. Dus omdat we weten dat een geldige kaart begint altijd met deze start sentinel, en omdat het pariteitsbit is een 1, dan wanneer we de eerste hoge naar lage overgang op de data pin detecteren, dan we dat we net zijn begonnen de Schildwacht van de start van een kaart ontvangen weten. Nu dit niet altijd gaat om waar te zijn, en een waterdicht plan zou zijn om te controleren de /CARD_PRESENT kaart om te zien als het laag verder is gegaan. De eenvoudigste manier om het detecteren van het begin van de SS, is het creëren van een externe interrupt geactiveerd op de dalende rand van de /STROBE. De gegevens zijn geldig 1.0 ons vóór de vallende rand, dus wanneer u de dalende rand heb bemonsterd, dan weet je dat kunt u lezen de /DATA1 pin en krijgen een geldige waarde. Hier is de code voor het maken van uw externe interrupt geactiveerd op een dalende rand.

 voidInitInterrupt(void){ // Setup interrupt BSET(EIMSK,INT0); // external interrupt mask BSET(EICRA,ISC01); // falling edge BCLR(EICRA,ISC00); // falling edge BSET(SREG,7); // I-bit in SREG} 

In mijn common.h die ik in al mijn programma's omvatten, kunnen de definities van Ja en BCLR worden gevonden. Verwijzen naar dat bestand moet u vragen hebt over het instellen van de bits. Nu, wanneer de interrupt wordt geactiveerd, wij willen genieten van de /DATA1 (in mijn code gedefinieerd als CARD_DATA) en een beetje in een algemene doel IO register instellen. Als we op de 7e bit, sla uit het register als een teken in onze globale buffer. Ik gebruik een GPIOR0 register omdat het spiffy snelle toegang. De pseudocode is zoiets als dit:

 Stop 16-bit timer Clear timer If DATA is LOW Set BIT=1 in REGISTER Decrement BIT Set flag so we don't skip any more 0's else DATA is HIGH Set BIT=0 in REGISTER Decrement BIT If BIT is 0 Add byte to buffer Increment index Reset BIT 

Als u jezelf waarom vragen verlagen in plaats van increment, vergeet niet dat de gegevens in de achteruit, zodat in plaats van het opnemen van de bits zoals we ze van LSB aan MSB krijgen, wij redden hen van MSB aan LSB zodat we niet hoeven te draaien van de bits later wanneer verwerking van de gegevens. Als je echt wilde, kon u ook toevoegen 0x20 hex hier, maar aangezien het over 5us op deze flitsers, ik ben het bijhouden van de verwerking in deze interrupt service routine tot een minimum te beperken.

 ISR(INT0_vect){ StopTimer(); ClearTimer(); if ( !BCHK(PIND,CARD_DATA1) ) // inverse low = 1 { BSET(GPIOR0,bit); --bit; bDataPresent = 1; } else if (bDataPresent) { BCLR(GPIOR0,bit); --bit; } if (bit If you're wondering what the timing business is about, that's covered in the step in determining when the card has left the reader. 

Gerelateerde Artikelen

Hoe het bouwen van een magnetische Levitating Top

Hoe het bouwen van een magnetische Levitating Top

Nope, geen Photoshop en geen vislijn werden gebruikt voor het maken van deze foto, gewoon 100% puur fysica en wat geduld. Dit instructable wordt uitgelegd hoe u kunt bouwen uw eigen top zweven in de lucht als een UFO.Stap 1: Video-overzicht Aantal st
Maken van een draagbare barcodescanner met een arduino en een cuecat

Maken van een draagbare barcodescanner met een arduino en een cuecat

rond het begin van de eeuw, was er een bedrijf waarvan bedrijfsmodel opgenomen weggeven van gratis barcodescanners die wedijveren met toetsenborden.    Een relatief eenvoudig mod met deze scanners cuecat verwijderd van de codering en maakte hen gesch
Krachtige controle met Arduino: Interfacing een lineaire Actuator

Krachtige controle met Arduino: Interfacing een lineaire Actuator

In dit specifieke artikel zullen we bespreken hoe eenvoudig het is om controle van krachtige mechanische kracht met behulp van een microcontroller zoals de Arduino en een lineaire Actuator van DC lineaire actuatoren Inc.Stap 1: MicrocontrollersRaspbe
ARD-e: de robot met een Arduino als een brein

ARD-e: de robot met een Arduino als een brein

het maken van een opensource gecontroleerd Arduino robot voor onder $100.Hopelijk na het lezen van dit instructable u zal zitten kundig Neem uw eerste stap in de robotica. ARD-e kost ongeveer 90 dollar tot $130 afhankelijk van hoeveel vrije elektroni
Zelfgemaakte robotarm met behulp van standaard onderdelen met behulp van de Arduino en een Processing GUI

Zelfgemaakte robotarm met behulp van standaard onderdelen met behulp van de Arduino en een Processing GUI

Ik onlangs met pensioen en werd een van de dingen die ik mezelf beloofde dat als ik met pensioen I was going to voltooien van alle projecten had ik rondrennen in mijn hoofd sinds ik een tiener was. Dat is ongeveer 50 jaar of zo van projecten. In die
DIY levitatie van een magnetische top

DIY levitatie van een magnetische top

dit is mijn 1e poging tot een instructable, I 'm gonna u uitleggen hoe het bouwen van een systeem om te zweven van een magnetische top. Het lijkt er is een commerciële speelgoed dergelijks en wel u zal zitten kundig voor maakte het op uw eigen. Ik he
Hoe u een magnetische module toevoegt aan uw naai-project

Hoe u een magnetische module toevoegt aan uw naai-project

magnetische snaps zijn grote sluitingen voor portemonnees, tassen, zakken en nog veel meer. Hier is een snelle manier (één van de vele manieren) brengt een magnetisch uitlijnen op een naai-project.Stap 1: gereedschappen en benodigdheden Dit zijn de b
RECOMPILE (Rename) en Flash met de ISP om te zetten uw Arduino in een apparaat HID (usb-midi) HIDUINO

RECOMPILE (Rename) en Flash met de ISP om te zetten uw Arduino in een apparaat HID (usb-midi) HIDUINO

HIDUINO is een firmware (code) gemaakt om uit te voeren op de microcontrollers Atmega8u2 (Arduino UNO Rev 2- en vorige- of Mega2560) en Atmega16u2 (Arduino UNO Rev3).Dit zijn degenen die belast zijn met de computer en de planken om te praten met elka
Macht Arduino van een 9v batterij.

Macht Arduino van een 9v batterij.

Heb je ooit willen macht je Arduino met een 9v-slagman maar wist niet hoe?  Nou is hier een eenvoudige instructable hierover!Stap 1: materialen u nodig:1. Arduino (elke vorm die een power kabel aansluiting heeft)2. een power adapter met een 2.1 mm ja
Hoe maak je een flesopener met een magnetische Cap-Catcher

Hoe maak je een flesopener met een magnetische Cap-Catcher

In deze tutorial zal ik u tonen hoe te maken van de coolste flesopener ooit!Het kan niet lijken veel op het eerste gezicht, maar uw vrienden zullen versteld staan als je eenmaal begint popping die flessen. Niet alleen doet deze flesopener vasthouden
Hoe te programmeren een AVR (arduino) met een ander arduino

Hoe te programmeren een AVR (arduino) met een ander arduino

deze instructables is handig als:* je hebt je arduino met atmega168 en je kocht een atmega328 op je lokale elektronicawinkel. Het hoeft niet een arduino bootloader* u wilt maken van een project dat geen gebruik maakt van arduino - gewoon een regelmat
Controle van een LED licht-strip kleur via een Arduino en een iPhone over BLE

Controle van een LED licht-strip kleur via een Arduino en een iPhone over BLE

Dit leerprogramma zal u tonen hoe u kunt besturen van een analoge RGB LED light strip via een Arduino en een iOS-apparaat. Het zal gebruik maken van de lichtshow-app waarmee u één kleur instellen of het maken van een lichtshow met een reeks van kleur
Controle LED lichte kleur via een Arduino en een iPhone over BLE

Controle LED lichte kleur via een Arduino en een iPhone over BLE

Dit leerprogramma zal u tonen hoe u kunt besturen een RGB LED via een Arduino en een iOS-apparaat. Het zal gebruik maken van de lichtshow-app waarmee u één kleur instellen of het maken van een lichtshow met een reeks van kleuren.Als u bepalen van een
Eenvoudige handleiding voor het installeren van een magnetische loods/werkplaats gereedschapskist organisator

Eenvoudige handleiding voor het installeren van een magnetische loods/werkplaats gereedschapskist organisator

zeggen vaarwel aan uw onordelijk loods met dit makkelijk te volgen gids voor het installeren van een magnetische organiser gereedschapskist in uw schuur, garage of werkplaats is. Zet uw schuur of workshop nachtmerrie in de perfecte werkplek met de id