Fish Feeder Improved Code

code

 /*
 By Roee Bloch  Fish feeder improved
All right Reserved
 Copyright (c) 2015 All Right Reserved, http://www.electronics-freak.com

 This source is subject to the Roee Bloch License.
 Please see the License.txt file for more information.
 All other rights reserved.

 THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
 KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
 PARTICULAR PURPOSE.

 </copyright>
 <author>Roee Bloch</author>
 <email>roeebloch@walla.co.il</email>
 <date>August 2015</date>

also took servo from here:
 Controlling a servo position using a potentiometer (variable resistor)
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>

 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob
*/
#include <Servo.h>
#include <EEPROM.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin
int time1, time2; // time
int data, degree1;
int first_run = 0;
int minutes, hours;

void setup()
{
  degree1 = EEPROM.read(0); // reading address 0
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  delay(50);
  myservo.write(degree1);
  Serial.begin(9600);
  time1 = millis();
  // Serial.println(time1);
}

void loop()
{
  if (first_run == 0) {
    // waiting for reset command 30 seconds
    Serial.println("waiting for Servo reset command to ZERO degrees, hours and minutes, press 'r' and ENTER to RESET");
    time2 = millis();
    while ((time2 - time1) < 10000) // we are in first 30 seconds waiting for commands
    {
      data = Serial.read();
      if (Serial.available() > 0) {
        // read the incoming byte:
        data = Serial.read();

        // say what you got:
        Serial.print("I received: ");
        Serial.println(data, DEC);
        if (data == 114)
        {
          Serial.println("Reset to Zero degrees now and eeprom");
          EEPROM.write(0, 0); // wiriting address 0 value 0 // not in use now
          EEPROM.write(1, 0); // reseting hours
          EEPROM.write(2, 0); // reseting minutes
        }
        Serial.flush();
      }

      time2 = millis();
    }
    Serial.println("Time passed - code continue");
    first_run = 1;
  }
  hours = EEPROM.read(1); // reading hours
  minutes = EEPROM.read(2); // reading hours
  Serial.println("hours that passed");
  Serial.println(hours);
  Serial.println("minutes that passed");
  Serial.println(minutes);
  if (hours == 23)
  {
    Serial.println("Reseting hours to ZERO");
    hours = 0;
  }
  if (minutes == 59)
  {
    Serial.println("Reseting minutes to ZERO");
    minutes = 0;
  }

  while(1) // never ending loop
  {
     wait_day();
    for (int x=0; x<4;x++)
    {
    myservo.write(0);                  // sets the servo position to 0
    delay(1000);
    myservo.write(180); 
    delay(1000);
     myservo.write(0); 
      delay(1000);
    }

   
  }

}
void wait_day()
{

  for (int y = hours; y < 24; y++) //counting 24 hours
  {
    EEPROM.write(1, y); // saving hours
    for (int x = minutes; x < 60; x++) //minutes delay
    {
      EEPROM.write(2, x); // saving hours
      delay(60000);
//    delay(15); //for debug
    }
  }
  Serial.println("day passed!");
  //reseting hours and minutes now
  hours = 0;
  minutes = 0;
}

This code uses Servo motor, and just 2 holes in circular plastic box
Every 24 hours that box will rotate 4 times throwing food out of holes
if there was electricity power off – when the power on again it will continue from last time
Since it saves hours and minutes to ARDUINO memory

Ebay link to bu Arduino Mega: [adsenseyu2]

Ebay link to bu Arduino Uno: [adsenseyu3]

Ebay link to bu Arduino Nano: [adsenseyu4]