import twitter4j.conf.*;
import twitter4j.*;
import twitter4j.auth.*;
import twitter4j.api.*;
import java.util.*;
Twitter twitter;
String tweetMessage;
String directMessage;
String receiver = " @hi_im_lukas";
int boundary = 600;
int moisture;
int savedTime;
int timeFrame;
int days;
int hours;
boolean firsttweet;
boolean wet; //low boundary of what counts as "wet"
boolean lastState; //0 = dry, 1 = wet
float timePassed;
float change;
import processing.serial.*;
Serial myPort;  // Create object from Serial class
String inputString;      // Data received from the serial port
int val;

void setup() {
  twitterConfiguration();
  tweetMessage = "test";
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
  reset();
}
void draw() {
  if ( myPort.available() > 0) {
    inputString = myPort.readStringUntil('\n');
    if (inputString!=null) {
      inputString=trim(inputString);
      moisture=int(inputString);
    }
  }
  if (moisture > boundary) {
    wet = true;
  } else if (moisture < boundary) {
    wet = false;
  }
  if (millis() > 5000) {
    if (millis() < 10000) {
      if (!firsttweet) {
        firstTweet();
      }
      if (!wet) {
        //getNewImage(); 
        int difference = (millis() - savedTime);
        float timePassed = difference/3600000;
        if (difference > timeFrame) {
          if (firsttweet) {
            checkState();
            getTweetMessage();
            tweet(tweetMessage);
            //the next tweets are reminders to water the plant, rather than the initial warning
          } else if (!firsttweet) {
            firstTweet();
          }
          savedTime = millis();
          lastState = false;
        }
      } else if (wet) {
        lastState = true;
        if (change == 1) {
          getTweetMessage();
          tweet(tweetMessage);
        }
      }
    }
    //println(moisture + " " + wet);
  }
}
void reset() {
  savedTime = millis();
  timeFrame = 7200000;
  //(7200000 is 2 hours, default)
  timePassed = 0;
}
void firstTweet() {
  if (wet) {
    tweetMessage = "Hey" + receiver + "! I've come online at " + year() + "-" + month() + "-" + day() + " " + hour() + ":" + minute() + ". Currently, I don't need to be watered!";
  } else if (!wet) {
    tweetMessage = "Hey" + receiver + "! I've come online at " + year() + "-" + month() + "-" + day() + " " + hour() + ":" + minute() + ". Seems like I need to be watered soon!";
  }
  tweet(tweetMessage);
  firsttweet = true;
  int lstate = int(wet);
  lastState = boolean(lstate);
}
void getTweetMessage() {
  if (wet) {
    if (change == 0) {
      tweetMessage = "Thanks to " + receiver + ", I don't need to be watered right now!";
    } else if (change == 1) {
      tweetMessage = "Thanks for watering me, " + receiver;
      reset();
    }
  } else if (!wet) {
    if (change == 0) {
      tweetMessage = "Hey, " + receiver + ", I haven't been watered in" + timePassed + "hours!";
    } else if (change == -1) {
      tweetMessage = "Oh no! I've dried out!" + receiver + ", could you water me please?";
      reset();
    }
  }
void checkState() {
  if (wet) {
    if (lastState) {
      change = 0;
    } else if (!lastState) {
      change = 1;
    }
  } else if (!wet) {
    if (lastState) {
      change = -1;
    } else if (!lastState) {
      change = 0;
    }
  }
}
void tweet(String tweetMessage) {
  try {
    Status status = twitter.updateStatus(tweetMessage);
    println("Status updated to [" + status.getText() + "].");
  }
  catch (TwitterException te) {
    System.out.println("Error: "+ te.getMessage());
  }
}
void directMessage(String _reveiver, String _directMessage) {
  try {
    twitter.sendDirectMessage(_reveiver, _directMessage);
    println("Direct message sent");
  }
  catch (TwitterException te) {
    System.out.println("Error: "+ te.getMessage());
  }
}
void twitterConfiguration() {
  ConfigurationBuilder cb = new ConfigurationBuilder();
  cb.setOAuthConsumerKey("");
  cb.setOAuthConsumerSecret("");
  cb.setOAuthAccessToken("");
  cb.setOAuthAccessTokenSecret("");
  TwitterFactory tf = new TwitterFactory(cb.build());
  twitter = tf.getInstance();
}
void keyPressed() {
  if (key == 't' || key =='T') {
    tweet(tweetMessage);
  }
  if (key == 'd' || key =='D') {
    directMessage(receiver, directMessage);
  }
}
Back to Top