Professional Documents
Culture Documents
h>
#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
#include <Servo.h>
LiquidCrystal lcd( 8 , 9 , 4 , 5 , 6 ,
7 );
int val;
/* Speaker (buzzer): */
int speakerPin =
13 ;
RTC_DS3231 rtc;
/* Servo: */
Servo myservo;
int servoPin = 10 ;
DateTime now;
String h, m;
int feedHour = 14 ;
int feedMin = 0 ;
pinMode(speakerPin, OUTPUT);
lcd.begin( 16 ,
2 );
/* Start RTC: */
rtc.begin(); }
void loop() {
now = rtc.now();
printTime(now);
* 0-50: UP
* 50-150: RIGHT
* 150-300: DOWN
* 300-500: LEFT
* 500-750: SELECT
*/
val = analogRead(A0);
if ((val >=
750 )) { // SELECT
setFeedHour();
delay( 1000 );
} now = rtc.now();
printTime(now); delay( 2000 );
feed();
if (feedMin != now.minute()) {
foodTime = true;
}}
void feed() {
lcd.clear();
lcd.setCursor( 0 , 0 );
* from shaking) */
myservo.attach(servoPin);
myservo.write(pos);
delay( 15 ); }
delay( 1000 );
1){
myservo.write(pos);
delay( 15 );
delay( 3000 );
/* Detach servo: */
myservo.detach();
void bell() {
/* Bell sound: */
tone(speakerPin, 1915 );
delay( 700 );
tone(speakerPin, 1700 );
delay( 700 );
tone(speakerPin, 1519 );
delay( 700 );
noTone(speakerPin); lcd.clear();
lcd.setCursor( 0 , 0 );
lcd.setCursor( 0 , 1 );
lcd.print( "comida!!!!" ); delay( 5000 );
now = rtc.now();
printTime(now);
delay( 5000 );
}}
void printTime(DateTime t) {
/* Actual time */
lcd.setCursor( 0 , 0 );
hour = t.hour();
lcd.print(h);
lcd.print( ':' );
minute = t.minute();
if (minute <
lcd.print(m);
/* Feed hour */
lcd.setCursor( 0 , 1 );
if (feedHour <
10 ) {
h = "0" + String(feedHour);
} else {
h = String(feedHour); }
lcd.print(h);
lcd.print( ':' );
if (feedMin <
lcd.print(m);
return ;
lcd.setCursor( 0 , 0 );
lcd.setCursor( 0 , 1 );
if (hourAux <
10 ) { lcd.print( "0" );
lcd.print(hourAux);
} else { lcd.print(hourAux); }
lcd.setCursor( 10 , 1 );
lcd.print( ':' );
lcd.setCursor( 11 , 1 );
if (feedMin <
10 ) {
lcd.print(m);
delay( 200 );
val=analogRead(A0);
hourAux = (hourAux + 1 ) %
hourAux = hourAux - 1 ;
if (hourAux < 0 ) {
hourAux =
23 ;
break ;
feedHour = hourAux;
setFeedMin();
break ;
}}
return ; }
void setFeedMin() {
lcd.clear();
lcd.setCursor( 0 , 0 );
lcd.setCursor( 0 , 1 );
while (true) {
lcd.setCursor( 8 , 1 );
lcd.print(h);
lcd.setCursor( 10 , 1 );
lcd.print( ':' );
lcd.setCursor( 11 , 1 );
if (minAux <
10 ) {
m = String(minAux); }
val = analogRead(A0);
minAux = (minAux + 1 ) %
60 ; } else if
((val>= 150 ) && (val<= 300 )) { /* DOWN - 1 min */
minAux = minAux - 1 ;
if (minAux < 0 ) {
minAux =
59 ;
} else if
break ;
} else if
feedMin = minAux;
break ;
}}
return ; }