<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.extremist.software/index.php?action=history&amp;feed=atom&amp;title=Chuck</id>
	<title>Chuck - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.extremist.software/index.php?action=history&amp;feed=atom&amp;title=Chuck"/>
	<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=Chuck&amp;action=history"/>
	<updated>2026-04-08T07:26:24Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.13</generator>
	<entry>
		<id>https://wiki.extremist.software/index.php?title=Chuck&amp;diff=55685&amp;oldid=prev</id>
		<title>★: adding basic led strip trigger from motion ★ ☉ #940</title>
		<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=Chuck&amp;diff=55685&amp;oldid=prev"/>
		<updated>2016-12-14T02:11:06Z</updated>

		<summary type="html">&lt;p&gt;adding basic led strip trigger from motion ★ ☉ #940&lt;/p&gt;
&lt;a href=&quot;https://wiki.extremist.software/index.php?title=Chuck&amp;amp;diff=55685&amp;amp;oldid=55433&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>★</name></author>
	</entry>
	<entry>
		<id>https://wiki.extremist.software/index.php?title=Chuck&amp;diff=55433&amp;oldid=prev</id>
		<title>C0DE: #B0B</title>
		<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=Chuck&amp;diff=55433&amp;oldid=prev"/>
		<updated>2016-12-04T06:02:17Z</updated>

		<summary type="html">&lt;p&gt;#B0B&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Arduino sketch code for RFID reader and 4x4 keypad matrix.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**************************************************************************/&lt;br /&gt;
/*! &lt;br /&gt;
    @file     readMifare.pde&lt;br /&gt;
    @author   Adafruit Industries&lt;br /&gt;
	@license  BSD (see license.txt)&lt;br /&gt;
&lt;br /&gt;
    This example will wait for any ISO14443A card or tag, and&lt;br /&gt;
    depending on the size of the UID will attempt to read from it.&lt;br /&gt;
   &lt;br /&gt;
    If the card has a 4-byte UID it is probably a Mifare&lt;br /&gt;
    Classic card, and the following steps are taken:&lt;br /&gt;
   &lt;br /&gt;
    - Authenticate block 4 (the first block of Sector 1) using&lt;br /&gt;
      the default KEYA of 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF&lt;br /&gt;
    - If authentication succeeds, we can then read any of the&lt;br /&gt;
      4 blocks in that sector (though only block 4 is read here)&lt;br /&gt;
	 &lt;br /&gt;
    If the card has a 7-byte UID it is probably a Mifare&lt;br /&gt;
    Ultralight card, and the 4 byte pages can be read directly.&lt;br /&gt;
    Page 4 is read by default since this is the first &amp;#039;general-&lt;br /&gt;
    purpose&amp;#039; page on the tags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is an example sketch for the Adafruit PN532 NFC/RFID breakout boards&lt;br /&gt;
This library works with the Adafruit NFC breakout &lt;br /&gt;
  ----&amp;gt; https://www.adafruit.com/products/364&lt;br /&gt;
 &lt;br /&gt;
Check out the links above for our tutorials and wiring diagrams &lt;br /&gt;
These chips use SPI or I2C to communicate.&lt;br /&gt;
&lt;br /&gt;
Adafruit invests time and resources providing this open source code, &lt;br /&gt;
please support Adafruit and open-source hardware by purchasing &lt;br /&gt;
products from Adafruit!&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
/**************************************************************************/&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_PN532.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Keypad.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// If using the breakout with SPI, define the pins for SPI communication.&lt;br /&gt;
#define PN532_SCK  (2)&lt;br /&gt;
#define PN532_MOSI (3)&lt;br /&gt;
#define PN532_SS   (4)&lt;br /&gt;
#define PN532_MISO (5)&lt;br /&gt;
&lt;br /&gt;
// If using the breakout or shield with I2C, define just the pins connected&lt;br /&gt;
// to the IRQ and reset lines.  Use the values below (2, 3) for the shield!&lt;br /&gt;
#define PN532_IRQ   (2)&lt;br /&gt;
#define PN532_RESET (3)  // Not connected by default on the NFC Shield&lt;br /&gt;
&lt;br /&gt;
// Uncomment just _one_ line below depending on how your breakout or shield&lt;br /&gt;
// is connected to the Arduino:&lt;br /&gt;
&lt;br /&gt;
// Use this line for a breakout with a software SPI connection (recommended):&lt;br /&gt;
//Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);&lt;br /&gt;
&lt;br /&gt;
// Use this line for a breakout with a hardware SPI connection.  Note that&lt;br /&gt;
// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino&amp;#039;s&lt;br /&gt;
// hardware SPI SCK, MOSI, and MISO pins.  On an Arduino Uno these are&lt;br /&gt;
// SCK = 13, MOSI = 11, MISO = 12.  The SS line can be any digital IO pin.&lt;br /&gt;
//Adafruit_PN532 nfc(PN532_SS);&lt;br /&gt;
&lt;br /&gt;
// Or use this line for a breakout or shield with an I2C connection:&lt;br /&gt;
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
const byte ROWS = 4; //four rows&lt;br /&gt;
const byte COLS = 4; //three columns&lt;br /&gt;
char keys[ROWS][COLS] = {&lt;br /&gt;
  {&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;@&amp;#039;},&lt;br /&gt;
  {&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;,&amp;#039;6&amp;#039;,&amp;#039;P&amp;#039;},&lt;br /&gt;
  {&amp;#039;7&amp;#039;,&amp;#039;8&amp;#039;,&amp;#039;9&amp;#039;,&amp;#039;&amp;lt;&amp;#039;},&lt;br /&gt;
  {&amp;#039;R&amp;#039;,&amp;#039;0&amp;#039;,&amp;#039;D&amp;#039;,&amp;#039;E&amp;#039;}&lt;br /&gt;
};&lt;br /&gt;
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad&lt;br /&gt;
byte colPins[COLS] = {13, 12, 11, 10}; //connect to the column pinouts of the keypad&lt;br /&gt;
&lt;br /&gt;
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup(void) {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  Serial.println(&amp;quot;Hello!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  nfc.begin();&lt;br /&gt;
&lt;br /&gt;
  uint32_t versiondata = nfc.getFirmwareVersion();&lt;br /&gt;
  if (! versiondata) {&lt;br /&gt;
    Serial.print(&amp;quot;Didn&amp;#039;t find PN53x board&amp;quot;);&lt;br /&gt;
    while (1); // halt&lt;br /&gt;
  }&lt;br /&gt;
  // Got ok data, print it out!&lt;br /&gt;
  Serial.print(&amp;quot;Found chip PN5&amp;quot;); Serial.println((versiondata&amp;gt;&amp;gt;24) &amp;amp; 0xFF, HEX); &lt;br /&gt;
  Serial.print(&amp;quot;Firmware ver. &amp;quot;); Serial.print((versiondata&amp;gt;&amp;gt;16) &amp;amp; 0xFF, DEC); &lt;br /&gt;
  Serial.print(&amp;#039;.&amp;#039;); Serial.println((versiondata&amp;gt;&amp;gt;8) &amp;amp; 0xFF, DEC);&lt;br /&gt;
  &lt;br /&gt;
  // configure board to read RFID tags&lt;br /&gt;
  nfc.SAMConfig();&lt;br /&gt;
  &lt;br /&gt;
  Serial.println(&amp;quot;Waiting for an ISO14443A Card ...&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop(void) {&lt;br /&gt;
  uint8_t i = 0;&lt;br /&gt;
  for (i; i &amp;lt; 100; i++) {&lt;br /&gt;
    // Check Keypad&lt;br /&gt;
    char key = keypad.getKey();&lt;br /&gt;
  &lt;br /&gt;
    if (key){&lt;br /&gt;
      Serial.println(key);&lt;br /&gt;
      i = 0;&lt;br /&gt;
    }&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  uint8_t success;&lt;br /&gt;
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };  // Buffer to store the returned UID&lt;br /&gt;
  uint8_t uidLength;                        // Length of the UID (4 or 7 bytes depending on ISO14443A card type)&lt;br /&gt;
    &lt;br /&gt;
  // Wait for an ISO14443A type cards (Mifare, etc.).  When one is found&lt;br /&gt;
  // &amp;#039;uid&amp;#039; will be populated with the UID, and uidLength will indicate&lt;br /&gt;
  // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)&lt;br /&gt;
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &amp;amp;uidLength, 100);&lt;br /&gt;
  &lt;br /&gt;
  if (success) {&lt;br /&gt;
    // Display some basic information about the card&lt;br /&gt;
    Serial.println(&amp;quot;Found an ISO14443A card&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;  UID Length: &amp;quot;);Serial.print(uidLength, DEC);Serial.println(&amp;quot; bytes&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;  UID Value: &amp;quot;);&lt;br /&gt;
    nfc.PrintHex(uid, uidLength);&lt;br /&gt;
    Serial.println(&amp;quot;&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    if (uidLength == 4)&lt;br /&gt;
    {&lt;br /&gt;
      // We probably have a Mifare Classic card ... &lt;br /&gt;
      Serial.println(&amp;quot;Seems to be a Mifare Classic card (4 byte UID)&amp;quot;);&lt;br /&gt;
	  &lt;br /&gt;
      // Now we need to try to authenticate it for read/write access&lt;br /&gt;
      // Try with the factory default KeyA: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF&lt;br /&gt;
      Serial.println(&amp;quot;Trying to authenticate block 4 with default KEYA value&amp;quot;);&lt;br /&gt;
      uint8_t keya[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };&lt;br /&gt;
	  &lt;br /&gt;
	  // Start with block 4 (the first block of sector 1) since sector 0&lt;br /&gt;
	  // contains the manufacturer data and it&amp;#039;s probably better just&lt;br /&gt;
	  // to leave it alone unless you know what you&amp;#039;re doing&lt;br /&gt;
      success = nfc.mifareclassic_AuthenticateBlock(uid, uidLength, 4, 0, keya);&lt;br /&gt;
	  &lt;br /&gt;
      if (success)&lt;br /&gt;
      {&lt;br /&gt;
        Serial.println(&amp;quot;Sector 1 (Blocks 4..7) has been authenticated&amp;quot;);&lt;br /&gt;
        uint8_t data[16];&lt;br /&gt;
		&lt;br /&gt;
        // If you want to write something to block 4 to test with, uncomment&lt;br /&gt;
		// the following line and this text should be read back in a minute&lt;br /&gt;
        //memcpy(data, (const uint8_t[]){ &amp;#039;a&amp;#039;, &amp;#039;d&amp;#039;, &amp;#039;a&amp;#039;, &amp;#039;f&amp;#039;, &amp;#039;r&amp;#039;, &amp;#039;u&amp;#039;, &amp;#039;i&amp;#039;, &amp;#039;t&amp;#039;, &amp;#039;.&amp;#039;, &amp;#039;c&amp;#039;, &amp;#039;o&amp;#039;, &amp;#039;m&amp;#039;, 0, 0, 0, 0 }, sizeof data);&lt;br /&gt;
        // success = nfc.mifareclassic_WriteDataBlock (4, data);&lt;br /&gt;
&lt;br /&gt;
        // Try to read the contents of block 4&lt;br /&gt;
        success = nfc.mifareclassic_ReadDataBlock(4, data);&lt;br /&gt;
		&lt;br /&gt;
        if (success)&lt;br /&gt;
        {&lt;br /&gt;
          // Data seems to have been read ... spit it out&lt;br /&gt;
          Serial.println(&amp;quot;Reading Block 4:&amp;quot;);&lt;br /&gt;
          nfc.PrintHexChar(data, 16);&lt;br /&gt;
          Serial.println(&amp;quot;&amp;quot;);&lt;br /&gt;
		  &lt;br /&gt;
          // Wait a bit before reading the card again&lt;br /&gt;
          delay(1000);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
          Serial.println(&amp;quot;Ooops ... unable to read the requested block.  Try another key?&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        Serial.println(&amp;quot;Ooops ... authentication failed: Try another key?&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if (uidLength == 7)&lt;br /&gt;
    {&lt;br /&gt;
      // We probably have a Mifare Ultralight card ...&lt;br /&gt;
      Serial.println(&amp;quot;Seems to be a Mifare Ultralight tag (7 byte UID)&amp;quot;);&lt;br /&gt;
	  &lt;br /&gt;
      // Try to read the first general-purpose user page (#4)&lt;br /&gt;
      Serial.println(&amp;quot;Reading page 4&amp;quot;);&lt;br /&gt;
      uint8_t data[32];&lt;br /&gt;
      success = nfc.mifareultralight_ReadPage (4, data);&lt;br /&gt;
      if (success)&lt;br /&gt;
      {&lt;br /&gt;
        // Data seems to have been read ... spit it out&lt;br /&gt;
        nfc.PrintHexChar(data, 4);&lt;br /&gt;
        Serial.println(&amp;quot;&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
        // Wait a bit before reading the card again&lt;br /&gt;
        delay(1000);&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        Serial.println(&amp;quot;Ooops ... unable to read the requested page!?&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>C0DE</name></author>
	</entry>
</feed>