Gör ditt husdjur rätter tweet! (6 / 7 steg)
Steg 6: Hela programmet
Hela källkoden är här, öppen källkod, med licensen Creative Commons erkännande och andra licenser som ärvts från Arduino IDE och fäst bibliotek.
/ * Tweeting sällskapsdjur rätter
ver 0.5b
Den 25 juni, 2011
Denna kod använder Neocat's Twitter bibliotek och
Ethernet Shield. Se Instructable mer information
av Daniel Gentleman för
Adafruit/Instructables gör det Tweet utmaning.
*/
#if defined(ARDUINO) & & ARDUINO > 18 / / Arduino 0019 eller senare
#include
#endif
#include
#include
#include
MAC-adressen är på en etikett på Ethernet shield.
byte [mac] = {
0x90, 0xA2, 0xDA, 0x00, 0x3E, 0x28};
byte ip [] = {
192,168,1, 222};
Din Token tweet (få den från http://arduino-tweet.appspot.com/)
Twitter twitter ("din TOKEN här");
Variabler variabler variabler
CONST int foodPin = A2; Analog 0 för att mäta livsmedel vikt
CONST int ledPin = 3; LED
CONST int waterPin = 2; Digital 9 för vatten sensor
int foodWeight; Variabel för att lagra mat vikt
CONST int ledPin = 13. LED stift för vattennivån
int waterState = 0; Variabel för att ange vatten staten
int lastWaterState = 0; Variabel för senast vatten tillstånd
CONST int lowFood = 25; om mat är under detta, kommer det tweet
int lastFoodWeight; Platshållare för sista mat stat
int foodTweet = 0; //
int foodValue = 0; //
char msg [125]; göra en trevlig fett buffert (125 tecken) för tweets
int waterAlarmState = 0; Har vi rapporterat vatten ännu?
int foodAlarmState = 0; Har vi rapporterat en tom skål?
Sträng tweet = "Starta upp";
void setup()
{
Delay(1000);
Ethernet.BEGIN (mac, ip);
Serial.BEGIN(9600);
pinMode (waterPin, ingång);
pinMode (foodPin, ingång);
pinMode (ledPin, produktionen);
Delay(1000);
foodWeight = getFood();
waterState = getWater();
}
CONST int analogInPin = A2; Analog ingång pin som potentiometern är kopplad till
CONST int analogOutPin = 13. Analog utgång pin som LED är kopplad till
int sensorValue = 0; värdet läsa från potten
int outputValue = 0; värdet utdata till PWM (analog utgång)
void loop() {
lastFoodWeight = foodWeight;
foodWeight = getFood();
om (foodWeight > (lastFoodWeight + 20)) {//If vi matas husdjur minst 20
String gotfed = "Tack för att mata mig! Min skål är nu ";
Sträng tweet = gotfed + foodWeight + "% full!".
Serial.println(tweet);
postTweet(tweet);
foodAlarmState = 0; Rensar mat larm om det var under kritiska
}
om (foodWeight < (lastFoodWeight - 10)) {/ / om husdjur åt minst 10
int ateweight = lastFoodWeight - foodWeight;
om (ateweight > 100) {
ateweight = 0;
}
String atefood = "Jag bara åt";
Sträng tweet = atefood + ateweight + "% av min mat!";
Serial.println(tweet);
postTweet(tweet);
}
om (foodWeight < lowFood) {/ / om maten är under den låg tröskeln
om (foodAlarmState! = 1) {
String foodwarning = "jag nästan av mat! Jag har bara ";
Sträng tweet = foodwarning + foodWeight + "procent vänster!";
Serial.println(tweet);
postTweet(tweet);
foodAlarmState = 1;
}
}
om (getWater() == 0) {
om (waterAlarmState! = 1) {
String waterPre = "min mat är på";
Sträng tweet = waterPre + foodWeight + "% men min vatten är låga!";
Serial.println(tweet);
postTweet(tweet);
waterAlarmState = 1; Uppsättningar vatten larm state (så det inte kommer tweet för evigt)
}
}
om (waterState > lastWaterState) {
Sträng tweet = "Tack för vattnet!";
Serial.println(tweet);
postTweet(tweet);
waterAlarmState = 0; Clear vatten larm state
}
Delay(2000); Regelbundna loop dröjsmål
}
int getFood()
{
Läs analogt värde:
int foodValue = analogRead(foodPin); första provet
Serial.Print(foodValue);
om (foodValue > = 600) {
foodValue = 599;
}
om (foodValue < = 582) {
foodValue = 583;
}
int bowlPercent = karta (foodValue, 583, 599, 1, 100);
Serial.Print ("mat nivå =");
Serial.println(bowlPercent);
återvända bowlPercent;
}
int getWater() {
lastWaterState = waterState;
waterState = digitalRead(waterPin);
om (waterState == hög) {
Serial.println ("vatten är låg");
waterState = 0;
digitalWrite (ledPin, hög);
Return 0;
}
annat {
Serial.println ("vatten är bra");
waterState = 1;
digitalWrite (ledPin, låg);
tillbaka 1.
}
}
void postTweet(String tweet) {
String termTweet = tweet + "\0" ;// Terminate tweet med ett null-värde
Serial.Print(termTweet);
Serial.println ("-avslutade tweet");
int twtlen = (termTweet.length()+3); räkna tecken, Lägg 3 skull
Serial.Print(twtlen);
Serial.println ("-Tweet längd");
termTweet.toCharArray(msg,twtlen); Konvertera den till en matris kallas msg
Serial.Print ("försök tweet");
Serial.println(MSG);
tweet.toCharArray(msg,twtlen);
Serial.println ("ansluta...");
om (twitter.post(msg)) {
Ange & Serial output fick svar på följetong.
Om ingen utgång krävs, kan du bara utesluta argumentet, t.ex.
int status = twitter.wait();
int status = twitter.wait (& följetong);
om (status == 200) {
Serial.println("OK.");
fördröjning (120000); Vänta två minuter innan du gör något efter en tweet (spamma inte!)
}
annat {
Serial.Print ("misslyckades: koden");
Serial.println(status);
}
}
annat {
Serial.println ("Anslutning misslyckades.");
}
}