Beispiel fuer das Auslesen von RFID Tags mittels RFID Reader

Dependencies:   MFRC522 mbed

ReaderTags
RFID ReaderRFID Tags

RFID (engl. radio-frequency identification - „Identifizierung mit Hilfe elektromagnetischer Wellen“) bezeichnet eine Technologie für Sender-Empfänger-Systeme zum automatischen und berührungslosen Identifizieren und Lokalisieren von Objekten (Produkte - Lebewesen) mit Radiowellen.

Ein RFID-System besteht aus einem Transponder (umgangssprachlich auch Funketikett genannt), der sich am oder im Gegenstand bzw. Lebewesen befindet und einen kennzeichnenden Code enthält, sowie einem Lesegerät zum Auslesen dieser Kennung.

RFID-Transponder können so klein wie ein Reiskorn sein und implantiert werden, etwa bei Menschen oder Haustieren.

Die Kopplung geschieht durch vom Lesegerät erzeugte magnetische Wechselfelder geringer Reichweite oder durch hochfrequente Radiowellen. Damit werden nicht nur Daten übertragen, sondern auch der Transponder mit Energie versorgt.

Der RFID Reader benötigt die MFRC522 Library. Der Reader wir via SPI angesprochen. Auf den Shields ist ein entsprechender Steckplatz vorgesehen.

Anwendungen

  • Fahrzeugidentifikation
  • Banknoten
  • Bezahlkarten
  • Identifizierung von Personen
  • Textilien und Bekleidung
  • Tieridentifikation
  • Waren- und Bestandsmanagement
  • Müllentsorgung
  • Zutrittskontrolle und Zeitkontrolle

Der RFID Reader hat einen eigenen Steckplatz oben auf dem Shield

Committer:
marcel1691
Date:
Fri Mar 25 17:07:01 2016 +0000
Revision:
4:00eaa9fcd3ef
Parent:
3:8725b25bcb6f
undo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcel1691 3:8725b25bcb6f 1 /*********************************************************************
marcel1691 3:8725b25bcb6f 2 This is a library for our Monochrome OLEDs based on SSD1306 drivers
marcel1691 3:8725b25bcb6f 3
marcel1691 3:8725b25bcb6f 4 Pick one up today in the adafruit shop!
marcel1691 3:8725b25bcb6f 5 ------> http://www.adafruit.com/category/63_98
marcel1691 3:8725b25bcb6f 6
marcel1691 3:8725b25bcb6f 7 These displays use SPI to communicate, 4 or 5 pins are required to
marcel1691 3:8725b25bcb6f 8 interface
marcel1691 3:8725b25bcb6f 9
marcel1691 3:8725b25bcb6f 10 Adafruit invests time and resources providing this open source code,
marcel1691 3:8725b25bcb6f 11 please support Adafruit and open-source hardware by purchasing
marcel1691 3:8725b25bcb6f 12 products from Adafruit!
marcel1691 3:8725b25bcb6f 13
marcel1691 3:8725b25bcb6f 14 Written by Limor Fried/Ladyada for Adafruit Industries.
marcel1691 3:8725b25bcb6f 15 BSD license, check license.txt for more information
marcel1691 3:8725b25bcb6f 16 All text above, and the splash screen must be included in any redistribution
marcel1691 3:8725b25bcb6f 17 *********************************************************************/
marcel1691 3:8725b25bcb6f 18
marcel1691 3:8725b25bcb6f 19 /*
marcel1691 3:8725b25bcb6f 20 * Modified by Neal Horman 7/14/2012 for use in mbed
marcel1691 3:8725b25bcb6f 21 */
marcel1691 3:8725b25bcb6f 22
marcel1691 3:8725b25bcb6f 23 #ifndef _ADAFRUIT_SSD1306_H_
marcel1691 3:8725b25bcb6f 24 #define _ADAFRUIT_SSD1306_H_
marcel1691 3:8725b25bcb6f 25
marcel1691 3:8725b25bcb6f 26 #include "mbed.h"
marcel1691 3:8725b25bcb6f 27 #include "Adafruit_GFX.h"
marcel1691 3:8725b25bcb6f 28
marcel1691 3:8725b25bcb6f 29 #include <vector>
marcel1691 3:8725b25bcb6f 30 #include <algorithm>
marcel1691 3:8725b25bcb6f 31
marcel1691 3:8725b25bcb6f 32 // A DigitalOut sub-class that provides a constructed default state
marcel1691 3:8725b25bcb6f 33 class DigitalOut2 : public DigitalOut
marcel1691 3:8725b25bcb6f 34 {
marcel1691 3:8725b25bcb6f 35 public:
marcel1691 3:8725b25bcb6f 36 DigitalOut2(PinName pin, bool active = false) : DigitalOut(pin) { write(active); };
marcel1691 3:8725b25bcb6f 37 DigitalOut2& operator= (int value) { write(value); return *this; };
marcel1691 3:8725b25bcb6f 38 DigitalOut2& operator= (DigitalOut2& rhs) { write(rhs.read()); return *this; };
marcel1691 3:8725b25bcb6f 39 operator int() { return read(); };
marcel1691 3:8725b25bcb6f 40 };
marcel1691 3:8725b25bcb6f 41
marcel1691 3:8725b25bcb6f 42 #define SSD1306_EXTERNALVCC 0x1
marcel1691 3:8725b25bcb6f 43 #define SSD1306_SWITCHCAPVCC 0x2
marcel1691 3:8725b25bcb6f 44
marcel1691 3:8725b25bcb6f 45 /** The pure base class for the SSD1306 display driver.
marcel1691 3:8725b25bcb6f 46 *
marcel1691 3:8725b25bcb6f 47 * You should derive from this for a new transport interface type,
marcel1691 3:8725b25bcb6f 48 * such as the SPI and I2C drivers.
marcel1691 3:8725b25bcb6f 49 */
marcel1691 3:8725b25bcb6f 50 class Adafruit_SSD1306 : public Adafruit_GFX
marcel1691 3:8725b25bcb6f 51 {
marcel1691 3:8725b25bcb6f 52 public:
marcel1691 3:8725b25bcb6f 53 Adafruit_SSD1306(PinName RST, uint8_t rawHeight = 32, uint8_t rawWidth = 128)
marcel1691 3:8725b25bcb6f 54 : Adafruit_GFX(rawWidth,rawHeight)
marcel1691 3:8725b25bcb6f 55 , rst(RST,false)
marcel1691 3:8725b25bcb6f 56 {
marcel1691 3:8725b25bcb6f 57 buffer.resize(rawHeight * rawWidth / 8);
marcel1691 3:8725b25bcb6f 58 };
marcel1691 3:8725b25bcb6f 59
marcel1691 3:8725b25bcb6f 60 void begin(uint8_t switchvcc = SSD1306_SWITCHCAPVCC);
marcel1691 3:8725b25bcb6f 61
marcel1691 3:8725b25bcb6f 62 // These must be implemented in the derived transport driver
marcel1691 3:8725b25bcb6f 63 virtual void command(uint8_t c) = 0;
marcel1691 3:8725b25bcb6f 64 virtual void data(uint8_t c) = 0;
marcel1691 3:8725b25bcb6f 65 virtual void drawPixel(int16_t x, int16_t y, uint16_t color);
marcel1691 3:8725b25bcb6f 66
marcel1691 3:8725b25bcb6f 67 /// Clear the display buffer
marcel1691 3:8725b25bcb6f 68 void clearDisplay(void);
marcel1691 3:8725b25bcb6f 69 virtual void invertDisplay(bool i);
marcel1691 3:8725b25bcb6f 70
marcel1691 3:8725b25bcb6f 71 /// Cause the display to be updated with the buffer content.
marcel1691 3:8725b25bcb6f 72 void display();
marcel1691 3:8725b25bcb6f 73 /// Fill the buffer with the AdaFruit splash screen.
marcel1691 3:8725b25bcb6f 74 virtual void splash();
marcel1691 3:8725b25bcb6f 75
marcel1691 3:8725b25bcb6f 76 protected:
marcel1691 3:8725b25bcb6f 77 virtual void sendDisplayBuffer() = 0;
marcel1691 3:8725b25bcb6f 78 DigitalOut2 rst;
marcel1691 3:8725b25bcb6f 79
marcel1691 3:8725b25bcb6f 80 // the memory buffer for the LCD
marcel1691 3:8725b25bcb6f 81 std::vector<uint8_t> buffer;
marcel1691 3:8725b25bcb6f 82 };
marcel1691 3:8725b25bcb6f 83
marcel1691 3:8725b25bcb6f 84
marcel1691 3:8725b25bcb6f 85 /** This is the SPI SSD1306 display driver transport class
marcel1691 3:8725b25bcb6f 86 *
marcel1691 3:8725b25bcb6f 87 */
marcel1691 3:8725b25bcb6f 88 class Adafruit_SSD1306_Spi : public Adafruit_SSD1306
marcel1691 3:8725b25bcb6f 89 {
marcel1691 3:8725b25bcb6f 90 public:
marcel1691 3:8725b25bcb6f 91 /** Create a SSD1306 SPI transport display driver instance with the specified DC, RST, and CS pins, as well as the display dimentions
marcel1691 3:8725b25bcb6f 92 *
marcel1691 3:8725b25bcb6f 93 * Required parameters
marcel1691 3:8725b25bcb6f 94 * @param spi - a reference to an initialized SPI object
marcel1691 3:8725b25bcb6f 95 * @param DC (Data/Command) pin name
marcel1691 3:8725b25bcb6f 96 * @param RST (Reset) pin name
marcel1691 3:8725b25bcb6f 97 * @param CS (Chip Select) pin name
marcel1691 3:8725b25bcb6f 98 *
marcel1691 3:8725b25bcb6f 99 * Optional parameters
marcel1691 3:8725b25bcb6f 100 * @param rawHeight - the vertical number of pixels for the display, defaults to 32
marcel1691 3:8725b25bcb6f 101 * @param rawWidth - the horizonal number of pixels for the display, defaults to 128
marcel1691 3:8725b25bcb6f 102 */
marcel1691 3:8725b25bcb6f 103 Adafruit_SSD1306_Spi(SPI &spi, PinName DC, PinName RST, PinName CS, uint8_t rawHieght = 32, uint8_t rawWidth = 128)
marcel1691 3:8725b25bcb6f 104 : Adafruit_SSD1306(RST, rawHieght, rawWidth)
marcel1691 3:8725b25bcb6f 105 , cs(CS,true)
marcel1691 3:8725b25bcb6f 106 , dc(DC,false)
marcel1691 3:8725b25bcb6f 107 , mspi(spi)
marcel1691 3:8725b25bcb6f 108 {
marcel1691 3:8725b25bcb6f 109 begin();
marcel1691 3:8725b25bcb6f 110 splash();
marcel1691 3:8725b25bcb6f 111 display();
marcel1691 3:8725b25bcb6f 112 };
marcel1691 3:8725b25bcb6f 113
marcel1691 3:8725b25bcb6f 114 virtual void command(uint8_t c)
marcel1691 3:8725b25bcb6f 115 {
marcel1691 3:8725b25bcb6f 116 cs = 1;
marcel1691 3:8725b25bcb6f 117 dc = 0;
marcel1691 3:8725b25bcb6f 118 cs = 0;
marcel1691 3:8725b25bcb6f 119 mspi.write(c);
marcel1691 3:8725b25bcb6f 120 cs = 1;
marcel1691 3:8725b25bcb6f 121 };
marcel1691 3:8725b25bcb6f 122
marcel1691 3:8725b25bcb6f 123 virtual void data(uint8_t c)
marcel1691 3:8725b25bcb6f 124 {
marcel1691 3:8725b25bcb6f 125 cs = 1;
marcel1691 3:8725b25bcb6f 126 dc = 1;
marcel1691 3:8725b25bcb6f 127 cs = 0;
marcel1691 3:8725b25bcb6f 128 mspi.write(c);
marcel1691 3:8725b25bcb6f 129 cs = 1;
marcel1691 3:8725b25bcb6f 130 };
marcel1691 3:8725b25bcb6f 131
marcel1691 3:8725b25bcb6f 132 protected:
marcel1691 3:8725b25bcb6f 133 virtual void sendDisplayBuffer()
marcel1691 3:8725b25bcb6f 134 {
marcel1691 3:8725b25bcb6f 135 cs = 1;
marcel1691 3:8725b25bcb6f 136 dc = 1;
marcel1691 3:8725b25bcb6f 137 cs = 0;
marcel1691 3:8725b25bcb6f 138
marcel1691 3:8725b25bcb6f 139 for(uint16_t i=0, q=buffer.size(); i<q; i++)
marcel1691 3:8725b25bcb6f 140 mspi.write(buffer[i]);
marcel1691 3:8725b25bcb6f 141
marcel1691 3:8725b25bcb6f 142 if(height() == 32)
marcel1691 3:8725b25bcb6f 143 {
marcel1691 3:8725b25bcb6f 144 for(uint16_t i=0, q=buffer.size(); i<q; i++)
marcel1691 3:8725b25bcb6f 145 mspi.write(0);
marcel1691 3:8725b25bcb6f 146 }
marcel1691 3:8725b25bcb6f 147
marcel1691 3:8725b25bcb6f 148 cs = 1;
marcel1691 3:8725b25bcb6f 149 };
marcel1691 3:8725b25bcb6f 150
marcel1691 3:8725b25bcb6f 151 DigitalOut2 cs, dc;
marcel1691 3:8725b25bcb6f 152 SPI &mspi;
marcel1691 3:8725b25bcb6f 153 };
marcel1691 3:8725b25bcb6f 154
marcel1691 3:8725b25bcb6f 155 /** This is the I2C SSD1306 display driver transport class
marcel1691 3:8725b25bcb6f 156 *
marcel1691 3:8725b25bcb6f 157 */
marcel1691 3:8725b25bcb6f 158 class Adafruit_SSD1306_I2c : public Adafruit_SSD1306
marcel1691 3:8725b25bcb6f 159 {
marcel1691 3:8725b25bcb6f 160 public:
marcel1691 3:8725b25bcb6f 161 #define SSD_I2C_ADDRESS 0x78
marcel1691 3:8725b25bcb6f 162 /** Create a SSD1306 I2C transport display driver instance with the specified RST pin name, the I2C address, as well as the display dimensions
marcel1691 3:8725b25bcb6f 163 *
marcel1691 3:8725b25bcb6f 164 * Required parameters
marcel1691 3:8725b25bcb6f 165 * @param i2c - A reference to an initialized I2C object
marcel1691 3:8725b25bcb6f 166 * @param RST - The Reset pin name
marcel1691 3:8725b25bcb6f 167 *
marcel1691 3:8725b25bcb6f 168 * Optional parameters
marcel1691 3:8725b25bcb6f 169 * @param i2cAddress - The i2c address of the display
marcel1691 3:8725b25bcb6f 170 * @param rawHeight - The vertical number of pixels for the display, defaults to 32
marcel1691 3:8725b25bcb6f 171 * @param rawWidth - The horizonal number of pixels for the display, defaults to 128
marcel1691 3:8725b25bcb6f 172 */
marcel1691 3:8725b25bcb6f 173 Adafruit_SSD1306_I2c(I2C &i2c, PinName RST, uint8_t i2cAddress = SSD_I2C_ADDRESS, uint8_t rawHeight = 32, uint8_t rawWidth = 128)
marcel1691 3:8725b25bcb6f 174 : Adafruit_SSD1306(RST, rawHeight, rawWidth)
marcel1691 3:8725b25bcb6f 175 , mi2c(i2c)
marcel1691 3:8725b25bcb6f 176 , mi2cAddress(i2cAddress)
marcel1691 3:8725b25bcb6f 177 {
marcel1691 3:8725b25bcb6f 178 begin();
marcel1691 3:8725b25bcb6f 179 splash();
marcel1691 3:8725b25bcb6f 180 display();
marcel1691 3:8725b25bcb6f 181 };
marcel1691 3:8725b25bcb6f 182
marcel1691 3:8725b25bcb6f 183 virtual void command(uint8_t c)
marcel1691 3:8725b25bcb6f 184 {
marcel1691 3:8725b25bcb6f 185 char buff[2];
marcel1691 3:8725b25bcb6f 186 buff[0] = 0; // Command Mode
marcel1691 3:8725b25bcb6f 187 buff[1] = c;
marcel1691 3:8725b25bcb6f 188 mi2c.write(mi2cAddress, buff, sizeof(buff));
marcel1691 3:8725b25bcb6f 189 }
marcel1691 3:8725b25bcb6f 190
marcel1691 3:8725b25bcb6f 191 virtual void data(uint8_t c)
marcel1691 3:8725b25bcb6f 192 {
marcel1691 3:8725b25bcb6f 193 char buff[2];
marcel1691 3:8725b25bcb6f 194 buff[0] = 0x40; // Data Mode
marcel1691 3:8725b25bcb6f 195 buff[1] = c;
marcel1691 3:8725b25bcb6f 196 mi2c.write(mi2cAddress, buff, sizeof(buff));
marcel1691 3:8725b25bcb6f 197 };
marcel1691 3:8725b25bcb6f 198
marcel1691 3:8725b25bcb6f 199 protected:
marcel1691 3:8725b25bcb6f 200 virtual void sendDisplayBuffer()
marcel1691 3:8725b25bcb6f 201 {
marcel1691 3:8725b25bcb6f 202 char buff[17];
marcel1691 3:8725b25bcb6f 203 buff[0] = 0x40; // Data Mode
marcel1691 3:8725b25bcb6f 204
marcel1691 3:8725b25bcb6f 205 // send display buffer in 16 byte chunks
marcel1691 3:8725b25bcb6f 206 for(uint16_t i=0, q=buffer.size(); i<q; i+=16 )
marcel1691 3:8725b25bcb6f 207 { uint8_t x ;
marcel1691 3:8725b25bcb6f 208
marcel1691 3:8725b25bcb6f 209 // TODO - this will segfault if buffer.size() % 16 != 0
marcel1691 3:8725b25bcb6f 210 for(x=1; x<sizeof(buff); x++)
marcel1691 3:8725b25bcb6f 211 buff[x] = buffer[i+x-1];
marcel1691 3:8725b25bcb6f 212 mi2c.write(mi2cAddress, buff, sizeof(buff));
marcel1691 3:8725b25bcb6f 213 }
marcel1691 3:8725b25bcb6f 214 };
marcel1691 3:8725b25bcb6f 215
marcel1691 3:8725b25bcb6f 216 I2C &mi2c;
marcel1691 3:8725b25bcb6f 217 uint8_t mi2cAddress;
marcel1691 3:8725b25bcb6f 218 };
marcel1691 3:8725b25bcb6f 219
marcel1691 3:8725b25bcb6f 220 #endif