Go Down

Topic: Duda función millis en domotización para el apagado de un display (SOLUCIONADO) (Read 17989 times) previous topic - next topic

Dabauza


Yo no segui desarrollando el sketch que te he pasado porque ya me meti en Souliss, que ya tiene desarrolladas todas esas ideas, la de pulso corto, la de pulso largo, y estoy pendiente de dedicarle algo de tiempo a desarrollar el doble y triple click (que no tiene mucha complejidad)


Me he mirado la programación del dimmer que me has pasado y no he entendido ni papa ademas me falta la librería <CapacitiveSensorDue.h> que la he estado buscando pero no la he encontrado , con lo cual me he puesto a intentar desarrollar la programación por mi cuenta, pero sigo teniendo el mismo problema que antes con los dichos millis().


El caso es que no queria pulsos cortos en ese proyecto, para evitar estar durmiendo, tocar sin querer el boton capacitivo y encender la luz a 255 xD. Nos despertariamos asi:  :smiley-eek: xD


Que gran verdad XD. Yo de momento no tengo ese problema, y si no una posible solución seria poner el código de pulsos cortos y largos al pulsador de entrada al dormitorio y el otro que enciende/apaga poco a poco en los de las mesitas de noche.


Para otros usos si que tengo programadas las lamparas capacitivas en un nodo Souliss que enciende a 170 o apaga con el pulso corto, y regula con el pulso largo, te lo paso tambien si quieres :)


Me harías un favor a ver si consigo sacar mi programación del dimmer.


Ves! yo hace años que acabe el CFGM de Electronica y cada vez que me pongo a recordar algo, me cuesta mas que si lo estuviera aprendiendo de nuevas! Con decirte que acabe por revisar el funcionamiento de un puente de diodos... xD por vergüenza xD


Suele pasar... Las cosas de no usarlas al final se acaban olvidando. Es una lastima pero así es.


Asi que con las dudas de electronica, que suelen ser las mas sencillas en los circuitos mas chorras, y a su vez las mas faciles de solventar..., ya tengo alguien a quien consultar! :) (Mi profesor de electronica basica se reiria de mi el c...bron xDD )


Dalo por hecho, pero que sean facilitas  :D que yo me defiendo pero mi nivel en electronica no es que sea muy avanzado XD


Yo tambien hice programacion PLC ( locura introducir los programas en un teclado hexadecimal, queda a años luz de lo que ahora se puede hacer con un Arduino de 2€ ) Pero considero que es una gran base, igual que aprender C o incluso Pseudocodigo para tener la mente dispuesta a programar.


Pfffff. Y tan años luz... Yo los masndo hexadecimales solo los he visto, pero no he llegado a manejarlos. No veas menudas reliquias tu, mas que el espectrum. XD


Luego me dedique (y me dedico) a la reparacion de equipos, pero acabe estudiando tambien CFGS de Programacion, en este ambito (arduino) creo que cuanto mas polivalente y multidisciplinal seas muchas mas posibilidades e ideas tienes.


No podría estar mas de acuerdo, no hay que cerrarse solo a un campo, por que si no al final te estancas. En cuantos mas temas este informado y/o domines mejor. Lo que pasa es que la tecnología evoluciona a velocidades de vértigo (y cada vez mas) y este mundo no puedes estar parado por que si te quedas rezagado (en cuanto a conocimientos) cuesta mas reengancharse.

¿Seria mucho pedir, que me recomendaras algunos libros que estén bien para ir aprendiendo y ampliando conocimientos en el mundo de Arduino y de programación?

La verdad es que te lo agradecería bastante. Yo tengo este:

http://www.amazon.es/ARDUINO-pr%C3%A1ctico-formaci%C3%B3n-Torrente-Artero/dp/8494072501

Pero creo que le falta un poco de "algo" (no sabría decirte el que), creo que lo que le falta son mas ejemplos de cada una de las funciones o ejemplos de "proyectos" en los que se usen varias funciones juntas y ver como funcionan unas con otras, por que la verdad es que yo me siento un poco pez a la hora de enlazarlas unas con otras.


Mi proximo reto (ya iniciado y con fecha fin) es montarme una Impresora 3d, que se hace con un MEGA2560 y pocos mas conocimientos, si realmente quiero llevar a cabo mis ideas creo que ese es el camino a seguir, no es un coste muy alto, en contra de lo que la gente cree (unos 150-200€) lo que me gaste en su dia en una grabadora de cd 2x vamos... xD


Ostras, pues no sale muy cara, yo las estuve mirando aquí pero me parecieron que se iban de madre, sera por que vienen ya montadas por que si no... no lo entiendo.

http://dx.com/es/s/impresora%2b3d?PriceSort=down

Igual cuando tenga este mundo un poco mas dominado me hago el animo y me monto una también :)

Saludos

juanpintom

#16
Mar 19, 2014, 08:00 pm Last Edit: Mar 19, 2014, 08:11 pm by juanpintom Reason: 1

Me he mirado la programación del dimmer que me has pasado y no he entendido ni papa ademas me falta la librería <CapacitiveSensorDue.h> que la he estado buscando pero no la he encontrado , con lo cual me he puesto a intentar desarrollar la programación por mi cuenta, pero sigo teniendo el mismo problema que antes con los dichos millis().

La libreria es una de las standard de arduino.

https://github.com/arduino-libraries/CapacitiveSensor

Del codigo no me extraña que no lo entendieras xD al hacerlo para mi no tiene apenas comentarios (mala costumbre) y ademas muchas de las lineas son de debug (puedes obviar cualquier linea con Serial.print)

Esta noche te lo simplifico en todo caso, porque unicamente necesitas una pequeña parte del codigo.



Para otros usos si que tengo programadas las lamparas capacitivas en un nodo Souliss que enciende a 170 o apaga con el pulso corto, y regula con el pulso largo, te lo paso tambien si quieres :)


Me harías un favor a ver si consigo sacar mi programación del dimmer.

Te lo paso luego tambien, aunque este SI, es un nodo Souliss :)


¿Seria mucho pedir, que me recomendaras algunos libros que estén bien para ir aprendiendo y ampliando conocimientos en el mundo de Arduino y de programación?


Es realmente complicado, yo de Arduino no he leido mas que en web, y ningun texto extenso, sino cosas muy concretas. Y de programacion general aprendi Visual, algo de PHP, algo de ASP, mucho de SQL y de todo ello ahora me sirve bien poco, dado como han cambiado las cosas, y tendria que renovarme.

Con la programacion (al menos eso pienso yo) es como cuando intentas hablar otro idioma, durante el proceso de aprendizaje "piensas" en tu idioma nativo, "traduces", y luego "hablas" el otro idioma. Realmente deberiamos "pensar" directamente en el lenguaje que vayas a "hablar". Antes que mucha teoria, hay que tener la mente preparada para entender "la programacion"

Todo esto es lo que mi profesora de programacion (que con gran cariño recuerdo) llamaba "hacerte click" la cabeza para aprender a programar, es decir, entender la programacion como lo que es, un lenguaje, que al fin y al cabo tiene una interpretacion. De ella saque/sacamos una gran leccion, aprende pseudocodigo y aprenderas cualquier lenguaje con relativa facilidad.

Yo siempre he aprendido metiendome de lleno y exprimiendo las referencias del lenguaje en cuestion. Hace no mucho estoy aprendiendo java/javascript, estoy con Android Studio (que al final es java tambien) y con algun proyecto HTML/JS/CSS, pero me temo que me queda mucho por aprender.





Ostras, pues no sale muy cara, yo las estuve mirando aquí pero me parecieron que se iban de madre, sera por que vienen ya montadas por que si no... no lo entiendo.

http://dx.com/es/s/impresora%2b3d?PriceSort=down

Igual cuando tenga este mundo un poco mas dominado me hago el animo y me monto una también :)

Saludos



Eso son KITs y no vienen montados, es decir, te la montas tu, y si, si lo compras por kit sale excesivamente caro, si lo compras por componentes (con una sencilla lista de la compra) reduces el coste una barbaridad, y luego esta la gran ventaja de tener gente en la zona (Valencia) donde se mueve mucho el tema, asi que espero conseguir un padrino que me ayude y que incluso me pueda imprimir algunas piezas para mi montaje :) todo es cuestion de colaborar :)

Salu2
Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Dabauza


La libreria es una de las standard de arduino.

https://github.com/arduino-libraries/CapacitiveSensor


Muchas gracias, yo la estaba buscando por el nombre que me lanzaba el compilador y no la encontraba


Del codigo no me extraña que no lo entendieras xD al hacerlo para mi no tiene apenas comentarios (mala costumbre) y ademas muchas de las lineas son de debug (puedes obviar cualquier linea con Serial.print)

Esta noche te lo simplifico en todo caso, porque unicamente necesitas una pequeña parte del codigo.


Te lo agradecería :)


Te lo paso luego tambien, aunque este SI, es un nodo Souliss :)


Esto también me iría bien así voy viendo como funciona/se programa para Souliss


Y de programacion general aprendi Visual, algo de PHP, algo de ASP, mucho de SQL y de todo ello ahora me sirve bien poco, dado como han cambiado las cosas, y tendria que renovarme.


Pfff, no tengo ni idea de para que sirve nada de esto


Con la programacion (al menos eso pienso yo) es como cuando intentas hablar otro idioma, durante el proceso de aprendizaje "piensas" en tu idioma nativo, "traduces", y luego "hablas" el otro idioma. Realmente deberiamos "pensar" directamente en el lenguaje que vayas a "hablar". Antes que mucha teoria, hay que tener la mente preparada para entender "la programacion"

Todo esto es lo que mi profesora de programacion (que con gran cariño recuerdo) llamaba "hacerte click" la cabeza para aprender a programar, es decir, entender la programacion como lo que es, un lenguaje, que al fin y al cabo tiene una interpretacion. De ella saque/sacamos una gran leccion, aprende pseudocodigo y aprenderas cualquier lenguaje con relativa facilidad.


Pues yo aun estoy aprendiendo "vocabulario" así que imaginate XD XD XD.

Tomo nota, voy a buscar información sobre pseudocodigos, por que la verdad es que no se muy bien ni lo que significa.


Yo siempre he aprendido metiendome de lleno y exprimiendo las referencias del lenguaje en cuestion. Hace no mucho estoy aprendiendo java/javascript, estoy con Android Studio (que al final es java tambien) y con algun proyecto HTML/JS/CSS, pero me temo que me queda mucho por aprender.


Yo tenia en mente con una raspberry desarrollar alguna programación, ponerle una pantalla tactil y poderla usar como cerebro junto con Arduino. Pero esto lo tengo muy verde aun, he leido algo de programar con Python pero la verdad es que no tengo ni idea de como funciona (solo conozco el nombre XD).


Eso son KITs y no vienen montados, es decir, te la montas tu, y si, si lo compras por kit sale excesivamente caro, si lo compras por componentes (con una sencilla lista de la compra) reduces el coste una barbaridad, y luego esta la gran ventaja de tener gente en la zona (Valencia) donde se mueve mucho el tema, asi que espero conseguir un padrino que me ayude y que incluso me pueda imprimir algunas piezas para mi montaje :) todo es cuestion de colaborar :)


Vaya, yo también soy de Valencia que coincidencias :)

Espero aprender rápido, me voy a tener que poner también las pilas con el ingles...  =(  Por que muchos manuales/tutoriales que he visto vienen en ingles y mas o menos lo entiendo pero no al 100% y es una faena.

Saludos

juanpintom



Del codigo no me extraña que no lo entendieras xD al hacerlo para mi no tiene apenas comentarios (mala costumbre) y ademas muchas de las lineas son de debug (puedes obviar cualquier linea con Serial.print)

Esta noche te lo simplifico en todo caso, porque unicamente necesitas una pequeña parte del codigo.


Te lo agradecería :)


Te paso el codigo, se podria simplificar aun mas.

Code: [Select]
#define LEDPIN 9
#define BOTON 2

byte Brillo = 0;
boolean up;
boolean down;

void setup()
{
        pinMode(LEDPIN,OUTPUT);
pinMode(BOTON,INPUT);

}

void loop()
{
    if (!digitalRead(BOTON)) { 
          up = false;
          down = false;
    }else{
        if (!up && !down && Brillo == 0) up = true;
       
        if (up && Brillo < 254) Brillo++;
               
        if (!up && !down && Brillo >= 1) down = true;
       
        if (down && Brillo > 0)
            if (Brillo == 1) Brillo--; else Brillo=Brillo-2;
           
        analogWrite(LEDPIN,Brillo); 

    }
}




Te lo paso luego tambien, aunque este SI, es un nodo Souliss :)


Esto también me iría bien así voy viendo como funciona/se programa para Souliss

Este si, te lo paso en un adjunto. No te asustes cuando veas el codigo Souliss por primera vez... xD aunque parezca un poco raro es mucho mas legible y mucho mas entendible de lo que parece. Lo mejor seria que vieras los ejemplos mas basicos (sobretodo si utilizan SpeakEasy) y si tienes alguna duda mas concreta que me preguntes. Por ejemplo, este link:

https://code.google.com/p/souliss/wiki/SpeakEasy


Tomo nota, voy a buscar información sobre pseudocodigos, por que la verdad es que no se muy bien ni lo que significa.


Pseudocodigo no es mas que programacion en lenguaje ordinario, es decir, utilizando palabras que no pertenecen a ningun lenguaje de programacion, por ejemplo:

Code: [Select]
void loop () 
{
   int numero = 0;
   do
      {
       serial.print("Contador:");
       serial.println(numero);
       numero = numero + 1;
    }while (numero < 10)
}

Seria:

Repite Mientras numero sea menor que 10
        -Escribir en pantalla el numero
        -Incrementar el numero

A mi al principio me parecio una chorrada, hasta que entendi que si no aprendia a ver las cosas de manera logica no seria capaz de aprender a expresarme programando, a poder hacer las cosas de diferentes formas y no de una unica forma.


Yo tenia en mente con una raspberry desarrollar alguna programación, ponerle una pantalla tactil y poderla usar como cerebro junto con Arduino. Pero esto lo tengo muy verde aun, he leido algo de programar con Python pero la verdad es que no tengo ni idea de como funciona (solo conozco el nombre XD).

Yo le tengo echado el ojo a la Raspberry tambien, para montarme el XBMC y el Ambilight!! jajaja, se que se le pueden hacer mil perrerias, espero tener 34€  =(

Python es un lenguaje de script, la principal diferencia con otros muchos es que es "interpretado", es decir, no es necesario compliarlo en un exe para ejecutarlo, eso le da el pro de la facilidad de desarrollo, aunque como contra es que es un poco mas lento en ejecucion con respecto a otros lenguajes. Es sencillo, una vez sabes uno, es facil aprender otros lenguajes.



Vaya, yo también soy de Valencia que coincidencias :)

Espero aprender rápido, me voy a tener que poner también las pilas con el ingles...  =(  Por que muchos manuales/tutoriales que he visto vienen en ingles y mas o menos lo entiendo pero no al 100% y es una faena.

Saludos

Jaja, es curioso, en 2 dias en 2 foros diferentes, cruzando mensajes con 2 personas diferentes, y al final resulta que todos somos del mismo sitio!! jajaja

Pues aqui en valencia hay un foro RepRap Valencia, que esta lleno de gente del foro Clonewars (el mas importante en desarrollo de impresoras 3d en España) y sinceramente aun no les he dedicado el tiempo que merecen por falta de fondos, pero es impresionante lo que se esta moviendo el tema aqui, tenemos tiendas, proveedores e incluso gente fabricando filamento. Encima hay muy buen ambiente para ayudar y ser ayudado, se mueve mucho el tema de que apadrinen con el compromiso de apadrinar a otro y asi difundir el tema de las 3d de forma economica.

Yo del ingles voy tirando, y a base de mucho leer, y mucho google traslator para palabras concretas vamos tirando... xD Forzarme a escribir en ingles "penoso" en el foro de Souliss tambien me ayuda algo... xD

Salu2
Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Dabauza


Te paso el codigo, se podria simplificar aun mas.


Muchas gracias, me estaba volviendo loco ya. Llevo todo el día intentando hacerlo. Voy a probar el tuyo a ver que tal :)

¿¿¿¿Simplificarlo mas aun????  :smiley-eek: Si vieras lo que yo estaba haciendo alucinarías entonces XD comparado con el tuyo parece el quijote. XD


Este si, te lo paso en un adjunto. No te asustes cuando veas el codigo Souliss por primera vez... xD aunque parezca un poco raro es mucho mas legible y mucho mas entendible de lo que parece. Lo mejor seria que vieras los ejemplos mas basicos (sobretodo si utilizan SpeakEasy) y si tienes alguna duda mas concreta que me preguntes. Por ejemplo, este link:

https://code.google.com/p/souliss/wiki/SpeakEasy


Madre mía!!! Duda en concreto??? Soy un hervidero de dudas XD XD XD. Lo único que he visto mas o menos claro  (del link que me has pasado) es en el setup definir la dirección y la puerta de enlace. Lo del loop ni idea para que sirve. Y de tus códigos ya ni hablamos...


Pseudocodigo no es mas que programacion en lenguaje ordinario, es decir, utilizando palabras que no pertenecen a ningun lenguaje de programacion.


Esto lo voy haciendo yo de forma inconsciente yo en mi cabeza mientras lo voy escribiendo, por ejemplo: Si pulsacion pin 2, guarda el estado, pin 10 a estado guardado. (mas o menos voy pensadolo asi)


Yo le tengo echado el ojo a la Raspberry tambien, para montarme el XBMC y el Ambilight!! jajaja, se que se le pueden hacer mil perrerias, espero tener 34€  =(

Python es un lenguaje de script, la principal diferencia con otros muchos es que es "interpretado", es decir, no es necesario compliarlo en un exe para ejecutarlo, eso le da el pro de la facilidad de desarrollo, aunque como contra es que es un poco mas lento en ejecucion con respecto a otros lenguajes. Es sencillo, una vez sabes uno, es facil aprender otros lenguajes.


A ver si le cojo el tranquillo pronto a esto, no sera por falta de interés o dedicación... lo que pasa es que como tengo que ir probando cada dos por tres y cada vez que algo no funciona encontrar el error y repararlo me cuesta la vida. Aparte que mis conocimientos son bastante limitados.

Ademas también me gustaría ponerme y aprender con la raspberry pero si esto hay cosas que ya me cuestan no quiero ni imaginarme lo otro.


Jaja, es curioso, en 2 dias en 2 foros diferentes, cruzando mensajes con 2 personas diferentes, y al final resulta que todos somos del mismo sitio!! jajaja


Hay que ver lo pequeño que es el mundo. XD


Pues aqui en valencia hay un foro RepRap Valencia, que esta lleno de gente del foro Clonewars (el mas importante en desarrollo de impresoras 3d en España) y sinceramente aun no les he dedicado el tiempo que merecen por falta de fondos, pero es impresionante lo que se esta moviendo el tema aqui, tenemos tiendas, proveedores e incluso gente fabricando filamento. Encima hay muy buen ambiente para ayudar y ser ayudado, se mueve mucho el tema de que apadrinen con el compromiso de apadrinar a otro y asi difundir el tema de las 3d de forma economica.


Me gusta mucho ese tipo de royo (ayudar y ser ayudado), parece ser que por lo menos la gente se va dando cuenta y ya no se buscan solo los intereses económicos.


Yo del ingles voy tirando, y a base de mucho leer, y mucho google traslator para palabras concretas vamos tirando... xD Forzarme a escribir en ingles "penoso" en el foro de Souliss tambien me ayuda algo... xD


A mi lo que es leerlo mas o menos lo entiendo (aunque sea el concepto global y si esta escrito facilito XD) y si alguna palabra no la veo clara hago lo que tu dices "san google translator", el problema lo tengo a la hora de hablarlo o escribirlo... entonces ya si que no hay "tu tia"

juanpintom


Muchas gracias, me estaba volviendo loco ya. Llevo todo el día intentando hacerlo. Voy a probar el tuyo a ver que tal :)

¿¿¿¿Simplificarlo mas aun????  :smiley-eek: Si vieras lo que yo estaba haciendo alucinarías entonces XD comparado con el tuyo parece el quijote. XD

Ya me cuentas como lo llevas :)


Madre mía!!! Duda en concreto??? Soy un hervidero de dudas XD XD XD. Lo único que he visto mas o menos claro  (del link que me has pasado) es en el setup definir la dirección y la puerta de enlace. Lo del loop ni idea para que sirve. Y de tus códigos ya ni hablamos...

Tranquilo, es muchisimo mas facil de lo que parece, mañana si tengo un rato redacto algo que sea "entendible" y lo pongo en el post de Souliss, realmente todo son una serie de lineas de codigo para cada elemento que quieras introducir que van organizadas en diferentes sitios y en diferentes intervalos de tiempo. Digamos que todo son "mini-bloques" estructurados, y solo es cuestion de copiar/pegar, como ya he comentado estamos preparando un pequeño GUI que generaria el codigo completo en funcion de los elementos que contenga el NODO, ya que como digo esta todo ya bien organizado, solo es cuestion de entender esa estructura.


Esto lo voy haciendo yo de forma inconsciente yo en mi cabeza mientras lo voy escribiendo, por ejemplo: Si pulsacion pin 2, guarda el estado, pin 10 a estado guardado. (mas o menos voy pensadolo asi)


Pues en un papel (notepad o comentario) te lo apuntas antes de empezar a programar. Yo recomiendo usar papel para ir añadiendo cosas y tachando otras. El caso es tener medio estructurado lo que quieres hacer, para que cuando te pongas manos a la obra ya sepas un poco por donde debes ir.


A ver si le cojo el tranquillo pronto a esto, no sera por falta de interés o dedicación... lo que pasa es que como tengo que ir probando cada dos por tres y cada vez que algo no funciona encontrar el error y repararlo me cuesta la vida. Aparte que mis conocimientos son bastante limitados.

Ademas también me gustaría ponerme y aprender con la raspberry pero si esto hay cosas que ya me cuestan no quiero ni imaginarme lo otro.

Lo de "prueba y error" es un clasico, para muchos es una perdida de tiempo, yo aprendo muchisimas cosas cometiendo errores, es cuestion de perspectiva.

Lo de la raspberry ya hay muchas cosas hechas, asi que supongo que a parte de tener que leer un rato no creo que haga falta mas. Y segun creo, hay muchisimas similitudes, Lo cierto es que ya tenia en mente integrar en mi proyecto de domotica un dispositivo multimedia, aportaria muchas cosas, como integrar un hilo musical y otras tantas funciones.


Me gusta mucho ese tipo de royo (ayudar y ser ayudado), parece ser que por lo menos la gente se va dando cuenta y ya no se buscan solo los intereses económicos.

Como OFF-topic: Lo triste es que aun no somos capaces de darnos cuenta del poder que tenemos como sociedad, y asi vamos...

Salu2

Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Dabauza

Hola de nuevo juanpintom,

Al final te vas aburrir de mi y mis dudas/problemas (y con razón).

He estado probando el código que me has enviado y no regula, solo enciende y apaga (con un pulso enciende y con otro apaga), lo he copiado tal cual lo has puesto tu, lo único que he modificado han sido el pin del pulsador y el pin del LED.

Supongo que debería de encender/apagar y regular con el mismo botón. ¿No?

¿Tengo que añadir algo mas?

Luego tambien he visto que pones en todas las lineas del loop:
"if (!up && !down && Brillo == 0) up = true;",

¿no seria?:
"if (!up && !down && Brillo == 0) { up = true;}" (con los {})

Y este lo mismo:
        if (down && Brillo > 0)
              if (Brillo == 1) Brillo--; else Brillo=Brillo-2;

¿Seria?:
       if (down && Brillo > 0) {
           if (Brillo == 1) Brillo--; else Brillo=Brillo-2;
        }

Disculpa por bombardearte a preguntas.

Muchísimas gracias de nuevo por todas tus aclaraciones y por tu tiempo.

Saludos

juanpintom

#22
Mar 20, 2014, 03:21 am Last Edit: Mar 20, 2014, 03:43 am by juanpintom Reason: 1

Hola de nuevo juanpintom,

Al final te vas aburrir de mi y mis dudas/problemas (y con razón).

He estado probando el código que me has enviado y no regula, solo enciende y apaga (con un pulso enciende y con otro apaga), lo he copiado tal cual lo has puesto tu, lo único que he modificado han sido el pin del pulsador y el pin del LED.

Supongo que debería de encender/apagar y regular con el mismo botón. ¿No?

¿Tengo que añadir algo mas?

Luego tambien he visto que pones en todas las lineas del loop:
"if (!up && !down && Brillo == 0) up = true;",

¿no seria?:
"if (!up && !down && Brillo == 0) { up = true;}" (con los {})

Y este lo mismo:
        if (down && Brillo > 0)
              if (Brillo == 1) Brillo--; else Brillo=Brillo-2;

¿Seria?:
       if (down && Brillo > 0) {
           if (Brillo == 1) Brillo--; else Brillo=Brillo-2;
        }

Disculpa por bombardearte a preguntas.

Muchísimas gracias de nuevo por todas tus aclaraciones y por tu tiempo.

Saludos


Ahora reviso el codigo, porque lo he adaptado de mi sketch y no me he parado a revisar mucho la verdad xD

El uso de los {} en las estructuras if es unicamente obligatorio cuando contienen mas de una linea de codigo. Por ejemplo, para apagar un led si esta encendido:
if (digitalRead(PIN)) digitalWrite(PIN,LOW);  

pero si ademas quiero enviar por puerto serie (para debug) el estado del pin ya tendria que usar {}
if (digitalRead(PIN))
{
   digitalWrite(PIN,LOW);  
   Serial.println("Apagado");
}

Salu2

Edito: Ya decia yo que podia ser mas sencillo... xD Pruebalo, no lo he compilado: (lee el reedito antes de probar este codigo)

Code: [Select]
#define LEDPIN 9
#define BOTON 2

byte Brillo = 0;

void setup()
{
       pinMode(LEDPIN,OUTPUT);
pinMode(BOTON,INPUT);

}

void loop()
{
   if (digitalRead(BOTON) && Brillo > 0) Brillo--;
   if (digitalRead(BOTON) && Brillo == 0 )
            if (Brillo<254) Brillo++;
         
   analogWrite(LEDPIN,Brillo);  
}


Lo que creo que hara es un rebote al llegar a 0 y volvera a subir, asi que puede ser complicado apagarlo, haz pruebas a ver si consigues algo y si no mañana le hecho un ojo.

Re-edito. Creo que lo que esta pasando en el codigo "largo" es que sube y baja muy rapido y parece que se encienda y se apaga, aunque realmente esta haciendo el dimmer en 254 milisegundos xD, incluye un delay(50); despues del analogWrite :) y este codigo no tiene el rebote que comentaba en el "Edito"

Y otra cosa IMPORTANTE, debes utilizar un PIN para el LED que sea PWM o en un PIN analogico. (estos los puedes usar como PIN 14 y siguientes...)

Salu2
Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Dabauza

#23
Mar 20, 2014, 03:38 am Last Edit: Mar 20, 2014, 03:40 am by Dabauza Reason: 1

Ahora reviso el codigo, porque lo he adaptado de mi sketch y no me he parado a revisar mucho la verdad xD


Gracias de nuevo.


El uso de los {} en las estructuras if es unicamente obligatorio cuando contienen mas de una linea de codigo.


Vaya, esta también me la apunto. :).

Un saludo

juanpintom

Code: [Select]
#define LEDPIN 9
#define BOTON 2

byte Brillo = 0;
boolean up;
boolean down;

void setup()
{
        pinMode(LEDPIN,OUTPUT);
pinMode(BOTON,INPUT);

}

void loop()
{
    if (!digitalRead(BOTON)) { 
          up = false;
          down = false;
    }else{
        if (!up && !down && Brillo == 0) up = true;
       
        if (up && Brillo < 254) Brillo++;
               
        if (!up && !down && Brillo >= 1) down = true;
       
        if (down && Brillo > 0)
            if (Brillo == 1) Brillo--; else Brillo=Brillo-2;
           
        analogWrite(LEDPIN,Brillo); 
        delay(50);

    }
}
Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Dabauza


Ya me cuentas como lo llevas :)

Hablando del proyecto principal:
A ver si averiguo como se adjuntan los archivos y te adjunto el mio, le he añadido tambien un boton para poder encender la pantalla manualmente sin tener que pagar y volver a encender los leds.


Tranquilo, es muchisimo mas facil de lo que parece, mañana si tengo un rato redacto algo que sea "entendible" y lo pongo en el post de Souliss, realmente todo son una serie de lineas de codigo para cada elemento que quieras introducir que van organizadas en diferentes sitios y en diferentes intervalos de tiempo. Digamos que todo son "mini-bloques" estructurados, y solo es cuestion de copiar/pegar, como ya he comentado estamos preparando un pequeño GUI que generaria el codigo completo en funcion de los elementos que contenga el NODO, ya que como digo esta todo ya bien organizado, solo es cuestion de entender esa estructura.


Estaría genial leerlo para ir pillando le el rollo al Souliss. Aunque mas o menos el concepto general creo que lo entiendo, ya te digo es mas o menos o lo que yo tenia en mente hacer en mi casa (aunque jamas me hubiese imaginado que fuera tan complicado)


Pues en un papel (notepad o comentario) te lo apuntas antes de empezar a programar. Yo recomiendo usar papel para ir añadiendo cosas y tachando otras. El caso es tener medio estructurado lo que quieres hacer, para que cuando te pongas manos a la obra ya sepas un poco por donde debes ir.


En papel ya lo he intentado, el problema es que me cuesta mucho plasmar en papel lo que pienso que quiero hacer con el Arduino. Y yo creo que se debe a que aun no se combinar bien las funciones.


Lo de "prueba y error" es un clasico, para muchos es una perdida de tiempo, yo aprendo muchisimas cosas cometiendo errores, es cuestion de perspectiva.


Yo creo que es como mas se aprende, aunque a veces me desquicio, sobre todo cuando me quedo mucho tiempo estancado en el mismo punto.


Lo de la raspberry ya hay muchas cosas hechas, asi que supongo que a parte de tener que leer un rato no creo que haga falta mas. Y segun creo, hay muchisimas similitudes, Lo cierto es que ya tenia en mente integrar en mi proyecto de domotica un dispositivo multimedia, aportaria muchas cosas, como integrar un hilo musical y otras tantas funciones.


Como yo digo, el unico limite es la imaginacion de cada uno, por que la verdad es que no es que sea excesivamente caro y al final tar o temprano uno se puede hacer con los componentes y llevar el proyecto a cabo


Como OFF-topic: Lo triste es que aun no somos capaces de darnos cuenta del poder que tenemos como sociedad, y asi vamos...


No podría estar mas de acuerdo, hoy en día lo que prima es mirar por uno mismo aunque tengas que chafar al de al lado, y como tu dices, así nos va...

Dabauza

#26
Mar 20, 2014, 04:08 am Last Edit: Mar 20, 2014, 04:11 am by Dabauza Reason: 1

Ahora reviso el codigo, porque lo he adaptado de mi sketch y no me he parado a revisar mucho la verdad xD

El uso de los {} en las estructuras if es unicamente obligatorio cuando contienen mas de una linea de codigo. Por ejemplo, para apagar un led si esta encendido:
if (digitalRead(PIN)) digitalWrite(PIN,LOW); 

pero si ademas quiero enviar por puerto serie (para debug) el estado del pin ya tendria que usar {}
if (digitalRead(PIN))
{
    digitalWrite(PIN,LOW); 
    Serial.println("Apagado");
}

Salu2

Edito: Ya decia yo que podia ser mas sencillo... xD Pruebalo, no lo he compilado: (lee el reedito antes de probar este codigo)

Code: [Select]
#define LEDPIN 9
#define BOTON 2

byte Brillo = 0;

void setup()
{
        pinMode(LEDPIN,OUTPUT);
pinMode(BOTON,INPUT);

}

void loop()
{
    if (digitalRead(BOTON) && Brillo > 0) Brillo--;
    if (digitalRead(BOTON) && Brillo == 0 )
             if (Brillo<254) Brillo++;
           
    analogWrite(LEDPIN,Brillo); 
}


Lo que creo que hara es un rebote al llegar a 0 y volvera a subir, asi que puede ser complicado apagarlo, haz pruebas a ver si consigues algo y si no mañana le hecho un ojo.

Re-edito. Creo que lo que esta pasando en el codigo "largo" es que sube y baja muy rapido y parece que se encienda y se apaga, aunque realmente esta haciendo el dimmer en 254 milisegundos xD, incluye un delay(50); despues del analogWrite :) y este codigo no tiene el rebote que comentaba en el "Edito"

Y otra cosa IMPORTANTE, debes utilizar un PIN para el LED que sea PWM o en un PIN analogico. (estos los puedes usar como PIN 14 y siguientes...)

Salu2


Si, el led si que lo tengo conectado a un pin PWM.

Lo del rebote en el primer caso no creo que sea por que encencer si que enciende (con un pulso), y apagar si que apaga (con otro pulso)

Voy a hacer pruebas a ver

Muchas gracias

Dabauza


Code: [Select]
#define LEDPIN 9
#define BOTON 2

byte Brillo = 0;
boolean up;
boolean down;

void setup()
{
        pinMode(LEDPIN,OUTPUT);
pinMode(BOTON,INPUT);

}

void loop()
{
    if (!digitalRead(BOTON)) { 
          up = false;
          down = false;
    }else{
        if (!up && !down && Brillo == 0) up = true;
       
        if (up && Brillo < 254) Brillo++;
               
        if (!up && !down && Brillo >= 1) down = true;
       
        if (down && Brillo > 0)
            if (Brillo == 1) Brillo--; else Brillo=Brillo-2;
           
        analogWrite(LEDPIN,Brillo); 
        delay(50);

    }
}



Muchas gracias,

Este ultimo si que funciona. De todas formas mañana les pego un ojo a todos detenidamente por que ya se me cruzan las lineas.

Saludos

JohnnyDeauville

#28
Mar 20, 2014, 04:23 pm Last Edit: Mar 20, 2014, 04:25 pm by JohnnyDeauville Reason: 1
Con permiso de juanpintom, me he permitido hacer el código un poco más reducido... en espacio y memoria

Code: [Select]

#define PIN_LED 9
#define PIN_BOTON 2

#define MODO_ESPERA 0
#define MODO_ARRIBA 1
#define MODO_ABAJO  2

byte byBrillo = 0;
byte byModo = MODO_ESPERA;

void setup()
{
 
  pinMode( PIN_LED, OUTPUT );
pinMode( PIN_BOTON, INPUT );

}

void loop()
{

if( !digitalRead( PIN_BOTON ) ) {
 
 byModo = MODO_ESPERA;
 
} else {

 switch( byModo ) {
 case MODO_ARRIBA:
   byBrillo = min( byBrillo++, 255 );
   break;
   
 case MODO_ABAJO:
   byBrillo = max( byBrillo - 2, 0 );
   break;
 
 default:
   byModo = ( ( byBrillo == 0 ) ? MODO_ARRIBA : MODO_ABAJO );
 
 }
   
    analogWrite( PIN_LED, byBrillo );  
    delay( 50 );

 }

}

juanpintom


Con permiso de juanpintom, me he permitido hacer el código un poco más reducido... en espacio y memoria

Code: [Select]

#define PIN_LED 9
#define PIN_BOTON 2

#define MODO_ESPERA 0
#define MODO_ARRIBA 1
#define MODO_ABAJO  2

byte byBrillo = 0;
byte byModo = MODO_ESPERA;

void setup()
{
 
  pinMode( PIN_LED, OUTPUT );
pinMode( PIN_BOTON, INPUT );

}

void loop()
{

if( !digitalRead( PIN_BOTON ) ) {
 
 byModo = MODO_ESPERA;
 
} else {

 switch( byModo ) {
 case MODO_ARRIBA:
   byBrillo = min( byBrillo++, 255 );
   break;
   
 case MODO_ABAJO:
   byBrillo = max( byBrillo - 2, 0 );
   break;
 
 default:
   byModo = ( ( byBrillo == 0 ) ? MODO_ARRIBA : MODO_ABAJO );
 
 }
   
    analogWrite( PIN_LED, byBrillo );  
    delay( 50 );

 }

}



Al contrario, precisamente el codigo lo hice lo mas "legible" posible, pero encuentro tu programacion mas estructurada y por supuesto mas optima. Lo que no habia visto yo referencias es de las funciones max y min, una cosa mas que aprendo! Gracias :)

+1 a tu karma  :P
Souliss - Distributed Home Automation and Internet of Things<br /><br />http://www.souliss.net/<br /><br />http://forum.arduino.cc/index.php?topic=223723.0

Go Up