#include <LiquidCrystal.h>
#include <Stepper.h>
#include <EEPROM.h>
// Assign pins for LCD Screen
LiquidCrystal lcd(3, 8, 4, 5, 6, 7);
// For Stepper Motor
const int stepsPerRev = 2038;
// IN1-IN3-IN2-IN4 ???
Stepper steppy = Stepper(stepsPerRev, 41, 42, 43, 44);
int red = 11;
int gre = 12;
int blu = 13;
int waterLevelPin = A1;
int lightSensorPin = A0;
// daytime default
int mode = 1;
// Setup Code
void setup() {
// Initialize LCD and print message
lcd.begin(16, 2);
lcd.print("ENEL 301");
delay(500);
lcd.clear();
// Begin serial for debugging
Serial.begin(9600);
Serial.println("SERIAL");
// RED
pinMode(red, OUTPUT);
digitalWrite(red, LOW);
// GREEN
pinMode(gre, OUTPUT);
digitalWrite(gre, LOW);
// BLUE
pinMode(blu, OUTPUT);
digitalWrite(blu, LOW);
const int level100 = 1;
const int level60 = 1;
const int level30 = 1;
const int level10 = 1;
const int level0 = 1;
int dayLight = 69;
int nightLight = 69;
}
// Main Code
void loop() {
// Get Water and Light Level
int waterLevel = analogRead(waterLevelPin);
double lightLevel = map(analogRead(lightSensorPin), 500, 1000, 0, 100);
Serial.println("water: " + String(waterLevel) + " light: " + String(lightLevel));
// Check light sensor'
lcd.clear();
lcd.print(String(waterLevel) + " " + String(lightLevel));
steppy.setSpeed(10);
steppy.step(stepsPerRev/4);
tone(9,100,1000);
delay(100);
// Set RGB According to Water Level
switch(waterLevel){
// From 100-60% Level
case level60 ... level100:
// reset all lights, then set green
digitalWrite(red, LOW);
digitalWrite(blu, LOW);
digitalWrite(gre, LOW);
digitalWrite(gre, HIGH);
// From 60-30
case level30 ... (level60 - 0.01):
// reset all lights, then set yellow
digitalWrite(red, LOW);
digitalWrite(blu, LOW);
digitalWrite(gre, LOW);
digitalWrite(gre, HIGH);
digitalWrite(red, HIGH);
// From 30-10
case level10 ... (level30 - 0.01):
// reset all lights, then set red
digitalWrite(red, LOW);
digitalWrite(blu, LOW);
digitalWrite(gre, LOW);
digitalWrite(red, HIGH);
// blink red when level is critical
case 0 ... (level10 - 0.01):
digitalWrite(red, LOW);
digitalWrite(blu, LOW);
digitalWrite(gre, LOW);
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red, LOW);
delay(500);
digitalWrite(red, HIGH);
delay(500);
digitalWrite(red,LOW);
delay(500);
digitalWrite(red, HIGH);
}
// Code to Actuate Food Dispenser
// breakfast time
if (mode == 0 && lightlevel >= dayLight){
steppy.setSpeed(10);
steppy.step(stepsPerRev/4); // adjust these two values depending on physical model
tone(9,100,1000);
lcd.clear();
lcd.print("Breakfast Time!");
lcd.setCursor(0, 1);
lcd.print("Enjoy your day :)");
delay(10000);
mode = 1;
}
// dinnertime
if (mode == 1 && lightlevel <= nightLight){
steppy.setSpeed(10);
steppy.step(stepsPerRev/4); // adjust these two values depending on physical model
tone(9,100,1000);
lcd.clear();
lcd.print("Dinner Time!");
lcd.setCursor(0, 1);
lcd.print("Goodnight Cat :)");
delay(10000);
mode = 0;
}
}