Ayuda funciones

Hola a todos

estoy en fase de aprendizaje y tengo muchas dudas, disculpar

Se pueden llamar dos o mas funciones al mismo tiempo ?
Es decir llamar a una y sin esperar que acabe comenzar la otra.

Saludos

Lo que alomejor podrias hacer es llamar a una funcion dentro de otra,por ejemplo esto compila bien pero no he probado si funcionaria con codigo dentro:

void funcion1(){// Codigo}
void funcion2(){funcion1();} // La funcion2 contiene una llamada a la funcion1
void setup(){}
void loop(){funcion2();} // Llamada a la funcion2 que a su vez llama a funcion1

Hola a todos

estoy en fase de aprendizaje y tengo muchas dudas, disculpar

Se pueden llamar dos o mas funciones al mismo tiempo ?
Es decir llamar a una y sin esperar que acabe comenzar la otra.

Saludos

Si la pregunta está formulada exactamente en estos términos la respuesta es "no".

Saludos

Hola,

lo he hecho como dices
pero como las funciones son bucles espera a que acabe un bucle para empezar el otro.

son varios temporizadores hecho con un bucle y varias funciones

lo que quiero hacer es varios outputs, que empiezen igual y que acaben cada uno en un tiempo solo una vez y que solo vuelvan a funcionar cuando les vuelva a llamar, le ha dado un millon de vueltas con el currentMillis y con los bucles. Me podeis ayudar, tiene que ser sin delay

gracias

claro que se puede, usando millis() y variables long que comparen los tiempos que te interesan.
A ver... tu define las salidas y los tiempos que deben cumplirse para que se activen las salidas y te damos un empujón.

hola,

el proyecto es automatizar un riego con tres reles

1 rele valvula agua cada dia a las 9 i a las 16 mira la humedad y riega hasta alcanzarla, cuando para, corta la bombas siguientes aunque no hayan cumplido el tiempo, no se puede dosificar sin agua.

2 rele bomba dosificacion sales no calcicas, comienza igual que el otro pero acaba en un tiempo 20-25 minutos

3 rele bomba dosificacion sales sales calcicas comienza tambien igual pero acaba con otro tiempo 15-20 min.

tanto la humedad de paro como los tiempos se han de poder canviar a traves del teclado de un pantalla Lcd keypad que tengo.

las entradas serian un entrada analogica con el detector de humedad y el reloj externo
y las salidas pe 49,50 y 51 a un modulo de reles a parte de la lcd key pad

Estoy trabanjandolo por partes, la entrada de humedad, la pantalla lcd keypad, el reloj que tengo problemas mirar otro post y los temporizadores que los tenia con un "for" pero ahora no puedo poner en marcha mas de uno.

me podriais ayudar en lo de los temporizadores y en un planteamineto general.

saludos

me podriais ayudar en lo de los temporizadores y en un planteamineto general.

A ver, yo te ayudo con la condición de que hagas, lo primero, un diagrama con los tiempos que explicas: a lo largo las horas y a lo alto si están las bombas arrancadas o no (o si lo pueden estar en función de la humedad, . . .). Luego haremos una especificación algo más concreta que la que haces tú: habrá que hacer un borrador de las opciones que aparecerán en el LCD, qué posibilidades de cambio de horas y/o parámetros, . . .

Después tendrás que mirar algunos de los ejemplos que hay por ahí para aprender algo, que me da la sensación de que estás muy verde. Ya te indico cuáles.

Luego empezaremos a analizar/programar por partes: lo primero las salidas digitales controladas por tiempos, después la entrada del sensor de humedad y, por fin, la pantalla.

Soy buen maestro :smiley: pero exigente: si has visto karate kid "dar barniz, pulir barniz . . . ."

Saludos

Acá en general los que ayudamos somos casi siempre un grupete al que se le suman o restar algunos, pero todos hemos creado un modo de trabajo y jusamente es el que sugiere vffgaston. Entonces... hay que hacer deberes.
La idea ya quedó clara y eso ayuda para que todos nos metamos en tu proyecto.
Lo segundo es PRESENTARLO apropiadamente, no hace falta grandes presentaciones sino, un diagrama o esquema manuscrito, le sacas una foto y la subes para que de nuevo ENTENDAMOS ahora con algun detalle que pretendes.
Asi poco a poco, todo queda claro y hablamos el mismo idioma.

Tu tienes que poder poner en papel la idea total.

Bueno por ahora tenemos 3 reles y 3 tiempos.

  1. Rele1 arranca en Hora1 y Hora2, lo hace hasta alcanzar los limites de Humedad indicados x programa.
  2. Rele2 tiempo 20 a 25 min
  3. Rele3 tiempo 15 a 20 min

Salidas de un MEGA 49, 50 y 51
Reloj RTC
LCD y Teclado 4x4?
Ajustes por menu para Umbral de Humedad (uHum), tiempos Rele2 o tiempo sales no calcicas TimeSNC de ahora en mas
Ajuste para Tiempo Rele3 o tiempo sales Calcicas TimeSC de ahora en mas
tendremos x ahora 3 variables

uHum.......umbral de Humedad
TimeSNC....Tiempo Sales NO Calcicas
TimeSC.....Tiempo Sales Calcicas
Hora1......Hora 1
Hora2......Hora 2

NOTA: Bueno por tu forma de escribir debes ser catalán digo porque usas canviar en lugar de cambiar pero eso es porque a mi siempre me ha llamado la atención que un español escriba asi (y no porque este mal que claro que lo está, pero hay que entender que se habla otro dialecto).

NOTA: Bueno por tu forma de escribir debes ser catalán digo porque usas canviar en lugar de cambiar pero eso es porque a mi siempre me ha llamado la atención que un español escriba asi (y no porque este mal que claro que lo está, pero hay que entender que se habla otro dialecto).

¡OJO!. Terreno pantanoso. Mejor dejarlo en las cuestiones técnicas . . . . . . :grin:

Saludos

Jajaja me disculpo entonces si no es catalán. digo porque me llama siempre la atención eso, y cuando pregunto siempre me dicen, soy catalán (ojoooo no lo digo para ofender ni mucho menos), solo que comprendo que estan acostumbrados a hablar y escribir de otro modo y por eso cuando lo hacen en foros de habla hispana patinan... se entiende la expresión?

(Aún con riesgo de que me caiga un chaparrón) :roll_eyes:

El catalán es un idioma diferente del castellano. De hecho tiene, también, similaridades con el francés y con el italiano (yo hablo estos dos últimos y entiendo el catalán bastante bien gracias, en parte, a ello).

Los españoles, en general, hablamos y escribimos el castellano bastante peor que en sudamérica. Nos llama la atención la fluidez y el vocabulario de la gente que, antes en la tele y ahora en directo, oímos con acentos diferentes al nuestro.

Efectivamente los catalanes cometen faltas de ortografía recurrentes ('b' en lugar de 'v'; 'j' en lugar de 'y'; . . . .) en palabras que son comunes a ambas lenguas y que se escriben con alguna pequeña diferencia; esto no les exime de escribir castellano bien, de manera que son faltas de ortografía, no la forma de escribir el castellano en España (ni en cataluña). De todas formas, no sólo los catalanes cometen(mos) faltas de ortografía; es lamentable la proporción de españoles que tienen el castellano como lengua materna y que son incapaces de escribir diez palabras seguidas sin cometer (perpetrar) dos o tres faltas de ortografía "normales" y una descomunal (acer, hechar, ai -por ahí o hay o ay o estas entre sí-, . . . . . . .)

El terreno pantanoso es porque escriben mal en castellano (los catalanes) . . . ahí no entro.

Saludos (cariñosos) para españoles, sudamericanos, catalanes, vascos, . . . . . :wink:

Oka.. creo Gaston que debemos seguirla en el foro debates o nuestro amigo se va a molestar... jaja

Esperomos su respuesta. Te escrito algo por mensaje privado. Miralo please.

Hola,

he escrito un reply pero no se donde ha ido a parar, lo volvere a escribir

lo del catalan a quedado claro creo,

Has entendido bien la cuestion, adjunto un esquema

Tiene que ponerse en marcha a las 9 y a las 16 de cada dia
Como puede ser que haga falta poca agua cuando se llegue a uHUm tiene que cortar los time aunque no hayan llegado al final.
El detector de humedad se como va y lo ha probado.
Es un Lcd keypad 16x2, lleva cuatro teclas ,selec y reset sobre una entrada analogica(0) tambien lo he probado cada tecla da un valor y por if puedes discriminar que tecla es.Se tendria que apagar cuando no se use.Tambien tendria que poder modificar en el lcd los tres valores uHUM y los dos times.
Haber si podemos estrcuturarlo un poco
Saludos y gracias

Proyecto riego0001.pdf (295 KB)

Antes de programar algo te falta decirnos como te enteras que no hay agua, tienes una boya de nivel con un switch que te avisa el nivel bajo del tanque?
Si es asi, lo sumamos como una entrada.

Bueno, como siempre alguien tuvo tu problema es importante tomarse 5 minutos y buscar la librería apropiada.
Aca la librería Time que Brillantemente hará el 95% de nuestro duro trabajo.

http://www.pjrc.com/teensy/td_libs_TimeAlarms.html
Bien, el ejemplo

/*
 * TimeAlarmExample.pde
 *
 * This example calls alarm functions at 8:30 am and at 5:45 pm (17:45)
 * and simulates turning lights on at night and off in the morning
 * A weekly timer is set for Saturdays at 8:30:30
 *
 * A timer is called every 15 seconds
 * Another timer is called once only after 10 seconds
 *
 * At startup the time is set to Jan 1 2011  8:29 am
 */
 
#include <Time.h>
#include <TimeAlarms.h>

void setup()
{
  Serial.begin(9600);
  setTime(8,29,0,1,1,11); // set time to Saturday 8:29:00am Jan 1 2011
  // create the alarms 
  Alarm.alarmRepeat(8,30,0, MorningAlarm);  // 8:30am every day
  Alarm.alarmRepeat(17,45,0,EveningAlarm);  // 5:45pm every day 
  Alarm.alarmRepeat(dowSaturday,8,30,30,WeeklyAlarm);  // 8:30:30 every Saturday 

 
  Alarm.timerRepeat(15, Repeats);            // timer for every 15 seconds    
  Alarm.timerOnce(10, OnceOnly);             // called once after 10 seconds 
}

void  loop(){  
  digitalClockDisplay();
  Alarm.delay(1000); // wait one second between clock display
}

// functions to be called when an alarm triggers:
void MorningAlarm(){
  Serial.println("Alarm: - turn lights off");    
}

void EveningAlarm(){
  Serial.println("Alarm: - turn lights on");           
}

void WeeklyAlarm(){
  Serial.println("Alarm: - its Monday Morning");      
}

void ExplicitAlarm(){
  Serial.println("Alarm: - this triggers only at the given date and time");       
}

void Repeats(){
  Serial.println("15 second timer");         
}

void OnceOnly(){
  Serial.println("This timer only triggers once");  
}

void digitalClockDisplay()
{
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println(); 
}

void printDigits(int digits)
{
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

Ahora fijate que tiene todos los ingredientes necesarios para tu tarea.

  1. podes hacer que se dispare una Alarma todos los dias, solo una vez, etc, etc.
  2. podes disparar un timer por el tiempo que desees.

Simplemente maravillosa.

Empieza trabajando por aca.
Si tienes problemas nos preguntas pero veras que es un buen comienzo.

Complemento porque me quede extasiado de lo buena que esta la librería
Dice :

Creacion de alarmas

Alarmas que son usadas para llamar una función en un momento del dia especificado.
Alarms are used to call a function at a specific time of the day.

Alarm.alarmRepeat(hours, minutes, seconds, function);
Crea una alarma que llamara una función en un momento particular todos los dias.
Create an alarm that will call a function every day at a particular time.

Alarm.alarmRepeat(dayofweek, hours, minutes, seconds, function);
Crear una alarma que llamará una función cada semana de un dia específico en un momento determinado.
dayofweek Dia de la semana puede ser domingo Sunday etc etc..
Create an alarm that will call a function every week on a specific day at a particular time.
"dayofweek" can be dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, or dowSaturday.

Alarm.alarmOnce(hours, minutes, seconds, function);
Crear una alarma que llamara una función mañana en un momento particular.
Create an alarm that will call a function tomorrow at a particular time.

Alarm.alarmOnce(dayofweek, hours, minutes, seconds, function);
Crea una alarma que llamará una función una sola vez, en un momento específico.
Create an alarm that will call a function once, at specific day and time.

Creación de Timers

Timer llama una función a intervalos regulares
Timers call a function at regular intervals.

Alarm.timerRepeat(seconds, function);
Crea un timer que llamara una función repetidamente cada X segundos
Create a timer that will call a function every at an interval of "seconds".

Alarm.timerOnce(seconds, function);
Crea un timer que llama una funcion una vez en "segundos"
Create a timer that will call a function once in "seconds".