Arduino Code

The adafruitio_08_analog_in example uses pin A0 by default on all boards, and that can be modified if needed by changing the PHOTOCELL_PIN define.

Download: file
/************************ Example Starts Here *******************************/

// analog pin 0
#define PHOTOCELL_PIN A0

The next chunk of code sets up two integer variables to track the state of the photocell, and an Adafruit IO Feed instance for a feed called analog.

Download: file
// photocell state
int current = 0;
int last = -1;

// set up the 'analog' feed
AdafruitIO_Feed *analog = io.feed("analog");

The setup function connects your feather to Adafruit IO. The code will wait until you have a valid connection to Adafruit IO before continuing with the sketch. If you have any issues connecting, check config.h for any typos in your username or key.

Download: file
void setup() {

  // start the serial connection
  Serial.begin(115200);

  // wait for serial monitor to open
  while(! Serial);

  // connect to io.adafruit.com
  Serial.print("Connecting to Adafruit IO");
  io.connect();

  // wait for a connection
  while(io.status() < AIO_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  // we are connected
  Serial.println();
  Serial.println(io.statusText());

}

Next, we have the main loop() function. The first line of the loop function calls io.run(); this line will need to be present at the top of your loop in every sketch. It helps keep your device connected to Adafruit IO, and processes any incoming data.

Download: file
void loop() {

  // io.run(); is required for all sketches.
  // it should always be present at the top of your loop
  // function. it keeps the client connected to
  // io.adafruit.com, and processes any incoming data.
  io.run();

The next chunk of code inside the loop() checks the current value of the photocell, and saves the value of the photocell in the current variable.

We then check if the current photocell value is equal to the last photocell value. If it is equal, we will return early and not continue with the rest of the loop.

Download: file
  // grab the current state of the photocell
  current = analogRead(PHOTOCELL_PIN);

  // return if the value hasn't changed
  if(current == last)
    return;

The final chunk of the loop() function prints the current value to the Arduino Serial Monitor, and sends the current value to the analog feed on Adafruit IO. We also set last = current; so we can tell if the value of the photocell has changed in the next run of the loop.

Download: file
  // save the current state to the analog feed
  Serial.print("sending -> ");
  Serial.println(current);
  analog->save(current);

  // store last photocell state
  last = current;

  // wait one second (1000 milliseconds == 1 second)
  delay(1000);

}

Upload the sketch to your board, and open the Arduino Serial Monitor. Your board should now connect to Adafruit IO.

Download: file
Connecting to Adafruit IO....

Adafruit IO connected.

You can now cover the photocell with your hand, and you should see the changing values being sent to Adafruit IO.

Download: file
sending -> 1024
sending -> 953
sending -> 259
sending -> 476
sending -> 248
sending -> 173
sending -> 224
sending -> 291
sending -> 1024

Check your dashboard on Adafruit IO, and you should see the gauge respond to the changes in photocell values.

This guide was first published on Feb 16, 2017. It was last updated on Feb 16, 2017. This page (Arduino Code) was last updated on May 23, 2019.