Things used in this project

Hardware components:
12002 04
Breadboard (generic)
×1
buttons
×3
wires
×3
Adafruit industries ada592 image 75px
USB-A to Micro-USB Cable
×1
Photon new
Particle Photon
×1
Software apps and online services:
Arduino particle.io
Hand tools and fabrication machines:
09507 01
Soldering iron (generic)

Schematics

Fritzing diagram
The wiring of our Photon
Fritzing i2q8d4g5rl
screen_shot_2017-03-10_at_10_05_49_am_CknpQmBAwJ.png
Screen shot 2017 03 10 at 10 05 49 am cknpqmbawj

Code

button codeProcessing
// This #include statement was automatically added by the Particle IDE.
#include <SparkFunPhant.h>

/*  SparkFun Inventor's Kit for Photon
    Experiment 2 - Part 1: With a Touch of a Button
    This sketch was written by SparkFun Electronics
    August 31, 2015
    https://github.com/sparkfun

    This is a simple example sketch that turns on an LED
    when pushing down on the push button

    Development environment specifics:
    Particle Build environment (https://www.particle.io/build)
    Particle Photon RedBoard
    Released under the MIT License(http://opensource.org/licenses/MIT)
*/

 // LED is connected to D0
int pushButtonHappy = D0;
int pushButtonIndifferent = D1;
int pushButtonSad = D2;// Push button is connected to D2
///int counterHappy = 0;
///int counterIndifferent = 0;
///int counterSad = 0;
double counterHappy = 0;
double counterIndifferent = 0;
double counterSad = 0;

const char server[] = "data.sparkfun.com"; // Phant destination server
const char publicKey[] = "LQgKbzbqMrcQ47m3b59y"; // Phant public key - HAS TO BE CHANGED
const char privateKey[] = "A1WnaVavRNfYEX4D8ejw"; // Phant private key  - HAS TO BE CHANGED
Phant phant(server, publicKey, privateKey); // Create a Phant object

const int POST_RATE = 3000; // Time between posts, in ms.
unsigned long lastPost = 0; // global variable to keep track of last post time


// This routine runs only once upon reset
void setup() 
{
 // Initialize D0 pin as output
  pinMode(pushButtonHappy, INPUT_PULLUP); 
  pinMode(pushButtonIndifferent, INPUT_PULLUP); 
  pinMode(pushButtonSad, INPUT_PULLUP);
  Serial.begin(9600);

  // Initialize D2 pin as input with an internal pull-up resistor
}

// This routine loops forever
void loop() 
{
  int pushButtonStateHappy; 
  int pushButtonStateIndifferent; 
  int pushButtonStateSad; 
  pushButtonStateHappy = digitalRead(pushButtonHappy);
  pushButtonStateIndifferent = digitalRead(pushButtonIndifferent);
  pushButtonStateSad = digitalRead(pushButtonSad);

  if(pushButtonStateHappy == HIGH)
  { // If we push down on the push button
     counterHappy = counterHappy + 1;
     Serial.println("Happy: " + (String)counterHappy) ;
     postToPhant() ;
     delay(250) ;
     // Turn ON the LED
  }
  if(pushButtonStateIndifferent == HIGH)
  {
     counterIndifferent = counterIndifferent +1;
     Serial.println("Indifferent: " + (String)counterIndifferent) ;
     postToPhant() ;
     delay(250) ;
  }
  if(pushButtonStateSad == HIGH)
  {
    counterSad = counterSad +1 ;
    Serial.println("Sad: " + (String)counterSad) ;
    postToPhant() ;
    delay(250) ;
  }

}

int postToPhant()
{    
    // Use phant.add(<field>, <value>) to add data to each field.
    // Phant requires you to update each and every field before posting,
    // make sure all fields defined in the stream are added here.
    phant.add("happy", counterHappy);
    phant.add("indifferent", counterIndifferent);
    phant.add("sad", counterSad);

        	
    TCPClient client;
    char response[512];
    int i = 0;
    int retVal = 0;
    
    if (client.connect(server, 80)) // Connect to the server
    {
		// Post message to indicate connect success
        Serial.println("Posting!"); 
		
		// phant.post() will return a string formatted as an HTTP POST.
		// It'll include all of the field/data values we added before.
		// Use client.print() to send that string to the server.
        client.print(phant.post());
        delay(1000);
		// Now we'll do some simple checking to see what (if any) response
		// the server gives us.
        while (client.available())
        {
            char c = client.read();
            Serial.print(c);	// Print the response for debugging help.
            if (i < 512)
                response[i++] = c; // Add character to response string
        }
		// Search the response string for "200 OK", if that's found the post
		// succeeded.
        if (strstr(response, "200 OK"))
        {
            Serial.println("Post success!");
            retVal = 1;
        }
        else if (strstr(response, "400 Bad Request"))
        {	// "400 Bad Request" means the Phant POST was formatted incorrectly.
			// This most commonly ocurrs because a field is either missing,
			// duplicated, or misspelled.
            Serial.println("Bad request");
            retVal = -1;
        }
        else
        {
			// Otherwise we got a response we weren't looking for.
            retVal = -2;
        }
    }
    else
    {	// If the connection failed, print a message:
        Serial.println("connection failed");
        retVal = -3;
    }
    client.stop();	// Close the connection to server.
}

Credits

1cecad180fd0c32a8bddbc8a7529cd94
Ian Eubanks

Lane Tech College Prep Computer Science Major

Contact

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Similar projects you might like

Lightweight Sliding Door Automator
Intermediate
  • 1,535
  • 7

Work in progress

Automate the opening and closing of a lightweight sliding door (e.g. a screen door), including remote controls on your phone.

Christmas Gift Box
Intermediate
  • 3,633
  • 595

Full instructions

Christmas Gift Box plays music and sends an email when it is opened.

Carbon Fiber Vacuum Chamber
Intermediate
  • 2,905
  • 94

Full instructions

Our project is a carbon fiber vacuum chamber that is monitored by multiple particle photons and various sensors.

ConnectTheDots with Particle Azure IoT Hub Integration
Intermediate
  • 841
  • 8

Protip

This project will allow you to connect your Particle device into an Azure IoT Hub for viewing data in real-time through an ASP.NET web app!

What should I wear outside?
Intermediate
  • 5,044
  • 67

Full instructions

A whimsical weather clock powered by Particle and forecast.io

Garage Door Opener with Blynk
Intermediate
  • 367
  • 2

Open, close and monitor a garage door opener with a smart phone using a Particle Photon and the Blynk application.

Add projectSign up / Login