Aunque no te pueda ayudar, porque también soy nuevo en este mundillo, si que te agradecería que colgaras el programa y los esquemas.
no se a que te refieres con 'los esquemas', pero aqui tienes el codigo,.. esta todo a medias pero bueno, espero ke te inspire
#include <Time.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <EEPROM.h> // 170: humedad 171: Hora de riego 172: minuto de riego 173: duracion del riego
#include <DS1307RTC.h>
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
int menu, menuSel;
int pulsUp = 2;
int pulsDown = 3;
int pulsEnter = 4;
int humedad = EEPROM.read(170);
int rHora = EEPROM.read(171);
int rMinuto = EEPROM.read(172);
int duracion = EEPROM.read(173);
int setRiegoStage = 1;
long count = 0;
int cCStage, cCHora, cCMinuto, cCDia, cCMes, cCAno;
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC);
setSyncProvider(RTC.get);
for (int x = 2; x <= 4; x++) {
pinMode(x, INPUT);
}
//setRiego(rHora, rMinuto, setRiegoStage);
//setRiegoStage = 1;
principal(rHora, rMinuto);
//menuSel = 1;
//root();
//clockChange();
}
void loop() {
if (menu == 0) {
unsigned long currentMillis = millis();
if (currentMillis - count > 1000) {
count = currentMillis;
principal(rHora, rMinuto);
}
}
buttonWorks();
}
void buttonWorks(){
if (digitalRead(pulsEnter) == HIGH) { // BOTON ENTER EN EL MENU PRIONCIPAL
if (menu == 0) {
menuSel = 1;
root();
delay(500);
goto paro;
}
if (menu == 1) { //BOTONES TRABAJANDO EN EL MENU 1
if (menuSel == 1) {
//cCHora = hour(); cCMinuto = minute(); cCDia = day(); cCMes = month(); cCAno = year();
clockChange();
delay(100);
goto paro;
}
if (menuSel == 2) {
setRiego(rHora, rMinuto, setRiegoStage);
setRiegoStage = 1;
delay(250);
goto paro;
}
if (menuSel == 3) {
setHumedad(humedad);
delay(250);
goto paro;
}
if (menuSel == 4) {
}
if (menuSel == 5) {
menuSel == 1;
menu == 0;
principal(rHora, rMinuto);
delay(500);
goto paro;
}
}
if (menu == 4) {
EEPROM.write(170, humedad);
menuSel = 3;
root();
delay(500);
goto paro;
}
if (menu == 3) {
if (setRiegoStage == 1) {
EEPROM.write(171, rHora);
setRiegoStage = 2;
setRiego(rHora, rMinuto, setRiegoStage);
delay(150);
goto paro;
}
if (setRiegoStage == 2) {
EEPROM.write(172, rMinuto);
setRiegoStage = 1;
menuSel = 2;
root();
delay(500);
goto paro;
}
}
}
if (digitalRead(pulsDown) == HIGH) { // MOVER EL CURSOR ABAJO
if (menu == 1) {
if (menuSel == 5) {
menuSel = 1;
root();
delay(250);
goto paro;
}
if (menuSel < 5) {
menuSel = menuSel + 1;
root();
delay(250);
goto paro;
}
}
if (menu == 4) {
humedad--;
if (humedad < 0) {
humedad = 100;
}
setHumedad(humedad);
delay(150);
goto paro;
}
if (menu == 3) {
if (setRiegoStage == 1) {
rHora--;
if (rHora < 0) {
rHora = 23;
}
setRiego(rHora, rMinuto, setRiegoStage);
delay(150);
goto paro;
}
if (setRiegoStage == 2) {
rMinuto--;
if (rMinuto < 0) {
rMinuto = 59;
}
setRiego(rHora, rMinuto, setRiegoStage);
delay(150);
goto paro;
}
}
}
if (digitalRead(pulsUp) == HIGH) { // CURSR ARRIBA
if (menu == 1) {
if (menuSel == 1) {
menuSel = 5;
root();
delay(250);
goto paro;
}
if (menuSel > 1) {
menuSel = menuSel - 1;
root();
delay(250);
goto paro;
}
}
if (menu == 3) {
if (setRiegoStage == 1) {
rHora++;
if (rHora >= 24) {
rHora = 0;
}
setRiego(rHora, rMinuto, setRiegoStage);
delay(150);
goto paro;
}
if (setRiegoStage == 2) {
rMinuto++;
if (rMinuto >= 60) {
rMinuto = 0;
}
setRiego(rHora, rMinuto, setRiegoStage);
delay(150);
goto paro;
}
}
if (menu == 4) {
humedad++;
if (humedad > 100) {
humedad = 0;
}
setHumedad(humedad);
delay(150);
goto paro;
}
}
paro:;
}
void setDurada(){
}
void setHumedad(int hume) {
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(60 ,15);
display.write(30);
display.setTextSize(3);
display.setCursor(38, 25);
display.print(hume);
display.println("%");
display.setTextSize(1);
display.setCursor(60, 49);
display.write(31);
display.display();
menu = 4;
}