Solar X-rays:
Geomagnetic Field:
From n3kl.org
The Texas Instruments PCA9534 IO expander IC allows you to configure 8 digital pins as inputs or outputs. Each pin is individually configurable, and can trigger an external interrupt pin on any state change. The chip communicates via I2C, making it quite easy to interface.
The chip also has 3 additional pins used for setting the bus address. Simply ground all three pins to utilize the base address, or tie one or more pins high via a resistor to set a different address. This means you could in theory chain up to 8 devices on a single I2C bus (64 IO pins).
Reading individual bits simply requires the application of a bit mask. To remind you, here is a conversion table for decimal, hex and binary. Here is an example, and I will put together a collection of examples and upload them to github soon.
/* PCA9534 read demo This sketch sets all pins as input and reads the data, then prints to the serial monitor. Written by Emery Premeaux Copyright: Public Domain, but attributing would be welcome <a href="http://www.DIY-SciB.org ">http://www.DIY-SciB.org </a> */ #include <Wire.h> #define IOE_ID 0x20 // address when all address pins are low uint8_t data; // IOE as in Input/Output Expander void setup() { // Set the PCA9534 pins to inputs Serial.begin(9600); Wire.begin(); Wire.beginTransmission(IOE_ID); Wire.write(0x03); // control register Wire.write(0xff); // all pins input Wire.endTransmission(); } void loop() { // put your main code here, to run repeatedly: Wire.beginTransmission(IOE_ID); Wire.write(0x00); // go to the input port register Wire.endTransmission(); Wire.requestFrom(IOE_ID, 1); // start read mode if(Wire.available()){ data = Wire.read(); // fetch one byte Wire.endTransmission(); Serial.print(data, HEX); Serial.print(", "); Serial.print(data, BIN); Serial.print(", "); masking(); } else { Serial.println("No connection?"); } delay(500); } void masking(){ if ((data & 0x08 ? false : true) == true){ // Bit 4 Serial.print("N"); } if ((data & 0x20 ? false : true) == true){ // Bit 6 Serial.print("NE"); } if ((data & 0x04 ? false : true) == true){ // Bit 3 Serial.print("NW"); } if ((data & 0x40 ? false : true) == true){ // Bit 7 Serial.print("E"); } if ((data & 0x80 ? false : true) == true){ // Bit 8 Serial.print("SE"); } if ((data & 0x10 ? false : true) == true){ // Bit 5 Serial.print("S"); } if ((data & 0x02 ? false : true) == true){ // Bit 2 Serial.print("W"); } if ((data & 0x01 ? false : true) == true){ // Bit 1 Serial.print("SW"); } Serial.println(); }
Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer