Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Written by Nick Gammon
- // Date: 18th February 2011
- // Modified by Synthetic Physical Computing
- // Date: 1st Febuary 2014
- #include <Wire.h>
- const byte MY_ADDRESS = 0x42;
- // various commands we might get
- enum {
- CMD_ID = 1,
- CMD_READ_A0 = 2,
- CMD_READ_A1 = 3,
- CMD_READ_A2 = 4,
- CMD_READ_A3 = 5,
- CMD_READ_D2 = 6,
- CMD_READ_D3 = 7,
- CMD_READ_D4 = 8,
- CMD_READ_D5 = 9,
- };
- char command;
- void setup()
- {
- command = 0;
- pinMode (2, INPUT);
- digitalWrite (2, HIGH); // enable pull-up
- pinMode (3, INPUT);
- digitalWrite (3, HIGH); // enable pull-up
- pinMode (4, INPUT);
- digitalWrite (4, HIGH); // enable pull-up
- pinMode (5, INPUT);
- digitalWrite (5, HIGH); // enable pull-up
- pinMode (A0, INPUT);
- digitalWrite (A0, LOW); // disable pull-up
- pinMode (A1, INPUT);
- digitalWrite (A1, LOW); // disable pull-up
- pinMode (A2, INPUT);
- digitalWrite (A2, LOW); // disable pull-up
- pinMode (A3, INPUT);
- digitalWrite (A3, LOW); // disable pull-up
- Wire.begin (MY_ADDRESS);
- Wire.onReceive (receiveEvent); // interrupt handler for incoming messages
- Wire.onRequest (requestEvent); // interrupt handler for when data is wanted
- } // end of setup
- void loop()
- {
- // all done by interrupts
- } // end of loop
- void receiveEvent (int howMany)
- {
- command = Wire.read (); // remember command for when we get request
- } // end of receiveEvent
- void sendSensor (const byte which)
- {
- int val = analogRead (which);
- byte buf [2];
- buf [0] = val >> 8;
- buf [1] = val & 0xFF;
- Wire.write (buf, 2);
- } // end of sendSensor
- void requestEvent ()
- {
- switch (command)
- {
- case CMD_ID: Wire.write (MY_ADDRESS); break; // send our ID
- case CMD_READ_A0: sendSensor (A0); break; // send A0 value
- case CMD_READ_A1: sendSensor (A1); break; // send A0 value
- case CMD_READ_A2: sendSensor (A2); break; // send A0 value
- case CMD_READ_A3: sendSensor (A3); break; // send A0 value
- case CMD_READ_D2: Wire.write (digitalRead (2)); break; // send D2 value
- case CMD_READ_D3: Wire.write (digitalRead (3)); break; // send D3 value
- case CMD_READ_D4: Wire.write (digitalRead (4)); break; // send D4 value
- case CMD_READ_D5: Wire.write (digitalRead (5)); break; // send D5 value
- } // end of switch
- } // end of requestEvent
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement