Step 6: Upload the Arduino Code
I have also attached a copy of the .pde file you can download as well.
###### Start Sketch ######
// AlarmingTweet by willnue - www.nuewire.com
// Adds tweet capabilties to the GE 45142 Choice-Alert Wireless Control Center
// Requires Ethernet Shield for sending tweets
//ThingTweet code details
//-----------------------
/*
ThingTweet App to Update a Twitter Status
The ThingTweet sketch is designed for the Arduino + Ethernet Shield.
This sketch updates a Twitter status via the ThingTweet App
(http://community.thingspeak.com/documentation/apps/thingtweet/) using HTTP POST.
ThingTweet is a Twitter proxy web application that handles the OAuth.
Getting Started with ThingSpeak and ThingTweet:
* Sign Up for a New User Account for ThingSpeak - https://www.thingspeak.com/users/new
* Link your Twitter account to the ThingTweet App - Apps / ThingTweet
* Enter the ThingTweet API Key in this sketch under "ThingSpeak Settings"
Created: March 7, 2011 by Hans Scharler (http://www.iamshadowlord.com)
*/
//Libraries
//------------------------
#include <SPI.h>
#include <Ethernet.h>
//Ethernet shield Settings
//------------------------
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xB2, 0xAD, 0xEF, 0xEF }; // Must be unique on local network
byte ip[] = { 192, 168, 1, 5 }; // Must be unique on local network
byte gateway[] = { 192, 168, 1, 1 };
byte subnet[] = { 255, 255, 255, 0 };
//Define pins used
//-----------------------
#define pinPwr 5 //Analog pin for Power LED on control center
#define pinArm 4 //Analog pin for Armed LED on control center
#define pinZn1 0 //Analog pin for Zone 1 LED on control center
#define pinZn2 1 //Analog pin for Zone 2 LED on control center
#define pinZn3 2 //Analog pin for Zone 3 LED on control center
#define pinZn4 3 //Analog pin for Zone 4 LED on control center
//Global variables
//-----------------------
boolean prevPwr = false; // Last state of LED (ON = true, OFF = false)
boolean prevArm = false; // Last state of LED (ON = true, OFF = false)
boolean prevZn1 = false; // Last state of LED (ON = true, OFF = false)
boolean prevZn2 = false; // Last state of LED (ON = true, OFF = false)
boolean prevZn3 = false; // Last state of LED (ON = true, OFF = false)
boolean prevZn4 = false; // Last state of LED (ON = true, OFF = false)
String ledReport = ""; // string for storing LED status message
boolean pinAlerts[] = {false, false, false, false, false, false}; //Alert Status of pins
int i=0; //Counter
//Twitter options
//-----------------------
unsigned long tweetInterval = 300000; //Minimum to wait between sending tweets (in milliseconds) - 60000 per minute
unsigned long LastTweet = 0; //Variable to hold last tweet time (in milliseconds)
boolean sendTweet = true; //Flag for sending tweet
String tweetText = ""; //string for storing tweet
// ThingSpeak Settings
//-----------------------
byte server[] = { 184, 106, 153, 149 }; // IP Address for the ThingSpeak API
String thingtweetAPIKey = "YOUR API KEY HERE"; // Write API Key for a ThingSpeak Channel
Client client(server, 80);
long lastConnectionTime = 0;
boolean lastConnected = false;
int resetCounter = 0;
//Debug options
//-----------------------
boolean debugMode = true; //Enable to debug readings to serial console
void setup() {
Ethernet.begin(mac, ip, gateway, subnet); //Start up the Ethernet shield
delay(1000);
// Update Twitter via ThingTweet
if(!client.connected())
{
updateTwitterStatus("AlarmingTweet Started up!");
}
if (debugMode == true) {
Serial.begin (9600); //Open the serial port for debug output
tweetInterval = 60000; //Overide the tweet interval for testing
}
}
void loop() {
if (sendTweet == true){
if (millis() >= (LastTweet + tweetInterval)){ //Check to see if enough time has passed to send again
tweetText = "AlarmingTweet ALERT : ";
if (pinAlerts[0] == true){
tweetText += "Zone 1 / ";}
if (pinAlerts[1] == true){
tweetText += "Zone 2 / ";}
if (pinAlerts[2] == true){
tweetText += "Zone 3 / ";}
if (pinAlerts[3] == true){
tweetText += "Zone 4 / ";}
if (pinAlerts[4] == true){
tweetText += "ARM State / ";}
if (pinAlerts[5] == true){
tweetText += "ALARM State / ";}
// Update Twitter via ThingTweet
if(!client.connected())
{
updateTwitterStatus(tweetText);
if (debugMode == true) { // Print values out to the console
Serial.print("Tweeting : ");
Serial.println(tweetText);
Serial.println();
}
}
// Disconnect from ThingSpeak
if (!client.connected() && lastConnected)
{
if (debugMode == true) { // Print values out to the console
Serial.println();
Serial.println("...disconnected.");
Serial.println();
}
client.stop();
}
lastConnected = client.connected();
LastTweet = millis(); //Reset the time of the last tweet
for( i = 0; i < 6; i++) { //Clear the alert flags
pinAlerts[i] = false;
}
}
}
sendTweet = false; //Reset Tweet flag before checking LEDs
prevPwr = checkLED(pinPwr, prevPwr); //Check LED status
prevArm = checkLED(pinArm, prevArm); //Check LED status
prevZn1 = checkLED(pinZn1, prevZn1); //Check LED status
prevZn2 = checkLED(pinZn2, prevZn2); //Check LED status
prevZn3 = checkLED(pinZn3, prevZn3); //Check LED status
prevZn4 = checkLED(pinZn4, prevZn4); //Check LED status
// Print Update Response to Serial Monitor
if (client.available())
{
char c = client.read();
Serial.print(c);
}
delay(500); // General delay between loops
}
boolean checkLED(int ledPin, boolean prevVal){
boolean curVal = false; // Current state of LED (ON = true, OFF = false)
int ledReading = 1023; // variable to store reading from LED (set to 5v/1023 by default)
ledReading = analogRead(ledPin); // read the value of the LED
delay(10); // delay 10ms to let the ADC recover
if (ledReading < 100){ //Check the LED to see if it is ON (reading < 0.5v)
curVal = true;
}
if (prevVal != curVal){ //Check to see if the value changed from the previous reading
sendTweet = true; //Set the flag to send a tweet
pinAlerts[ledPin] = true; //Flag an Alert for this pin
}
if (debugMode == true) { // Print values out to the console
Serial.print("Pin ");
Serial.print(ledPin);
Serial.print(" : ");
Serial.print(ledReading);
Serial.print(", ");
if (prevVal == true)
Serial.print("ON");
else
Serial.print("OFF");
Serial.print("/");
if (curVal == true)
Serial.print("ON");
else
Serial.print("OFF");
Serial.print(", ");
if (sendTweet == true)
Serial.print("TWEET");
else
Serial.print("-----");
Serial.println();
Serial.print("Alerts : ");
for( i = 0; i < 6; i++) {
if (pinAlerts[i] == true)
Serial.print("Y");
else
Serial.print("N");
Serial.print(", ");
}
Serial.println();
//Un-comment below to check each LED individually
//sendTweet = false; //Reset Tweet flag individually for testing
}
return curVal; //Return the current reading
}
void updateTwitterStatus(String tsData)
{
if (client.connect() && tsData.length() > 0)
{
// Create HTTP POST Data
tsData = "api_key="+thingtweetAPIKey+"&status="+tsData;
if (debugMode == true) { // Print values out to the console
Serial.println("Connected to ThingTweet...");
Serial.println();
}
client.print("POST /apps/thingtweet/1/statuses/update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(tsData.length());
client.print("\n\n");
client.print(tsData);
}
else
{
if (debugMode == true) { // Print values out to the console
Serial.println("Connection Failed.");
Serial.println();
}
}
}
###### End Sketch ######
Remove these ads by
Signing Up
























Not Nice














Visit Our Store »
Go Pro Today »



