Duda función millis en domotización para el apagado de un display (SOLUCIONADO)

Muy buenas,

Tengo la idea en mente de domotizarme la casa usando arduino y tengo una duda, de momento llevo que hecho el encendido/apagado de las luces de forma manual y de forma automática mediante dos pulsadores (uno para el ON/OFF del modo manual y otro para el ON/OFF del modo automático). Si la enciendo de forma manual las luces se enceraran al máximo, pero si la enciendo de forma automática dependerá de que el sensor de presencia detecte movimiento y ademas mediante una LDR se regulara la intensidad de la luz.

También he añadido un display LCD de 16x2 en el que muestro la hora, la humedad y la temperatura y si el sistema esta funcionando en modo manual o en modo automático.

Ahora bien, estoy intentando que el display solo permanezca encendido solo durante 30 segundos (con la función millis) después de pulsar cualquiera de los dos pulsadores, pero no hay manera, lo he probado de 10 millones de formas y nada, lo máximo que he conseguido es que se apague a los 30 segundos pero si vuelvo a pulsar el pulsador ya no hay manera de que vulva a iluminarse el display.

Ya no se que mas intentar, aqui dejo lo que llevo de la programación para que veáis como esta, seguramente hecha un desastre, pero soy nuevo en esto y he ido aprendiendo de lo que he ido leyendo y a base de prueba y error.

#include "DHT.h" //cargamos la librería DHT
#define DHTPIN 12 //Seleccionamos el pin en el que se //conectará el sensor
#define DHTTYPE DHT11 //Se selecciona el DHT11 (hay //otros DHT)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#include <DS1302.h>
// RST=pin8
DS1302 rtc(8, 9, 10); // DAT=pin9
// CLK=pin10

Time x;

LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display

DHT dht(DHTPIN, DHTTYPE); //Se inicia una variable que será usada por Arduino para comunicarse con el sensor

byte termometro[8] = //icono de termometro
{
B00100,
B01010,
B01010,
B01110,
B01110,
B11111,
B11111,
B01110
};

byte humedad[8] = //icon de gota de agua
{
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110,
};

byte reloj[8] = //icon de reloj
{
B00000,
B01110,
B10101,
B10101,
B10111,
B10001,
B01110,
B00000,
};

int leds[]={2,3,4,5,6}; //LEDS controlados por pwm y entrada analoga
int i=0;
int foto=A15; //Variable de fotocelula
int medida=0;
int luzled=0;
int PIR=26;
int estadoPIR;

int estadoActual=0; //Guarda el estado actual del botón
int estadoUltimo=0; //Guarda el último estado del botón
int contador=0; //Guarda las veces que se pulsa el botón
int pulsador=52;

int estadoActualManual=0; //Guarda el estado actual del botón
int estadoUltimoManual=0; //Guarda el último estado del botón
int contadorManual=0; //Guarda las veces que se pulsa el botón
int pulsadorManual=50;

void setup()
{
for(i=0;i<5;i++)
{
pinMode(leds*,OUTPUT);*

  • }*

  • pinMode(foto,INPUT);*

  • pinMode(PIR,INPUT); *

  • pinMode(pulsador, INPUT); //Donde esta conectado el pulsador*

  • pinMode(pulsadorManual, INPUT); //Donde esta conectado el pulsador*

  • Serial.begin(9600);*

  • dht.begin(); //Se inicia el sensor*

  • lcd.init(); //Se inicia el LCD *

  • lcd.createChar(1,termometro);*

  • lcd.createChar(2,humedad);*

  • lcd.createChar(3,reloj); *
    }

void loop()
{
estadoActual=digitalRead(pulsador);
if (estadoActual != estadoUltimo)
{
if (estadoActual == HIGH)
{
contador = contador +1;
Serial.print ("Esta es la pulsación nº ");
Serial.println (contador);
}
}
estadoUltimo=estadoActual;

if (contador % 2 == 0) //Pulsacion par modo Manual
{
estadoActualManual=digitalRead(pulsadorManual);
if (estadoActualManual != estadoUltimoManual)
{
if (estadoActualManual == HIGH)
{
contadorManual = contadorManual +1;
Serial.print ("Esta es la pulsación manual nº ");
Serial.println (contadorManual);
}
}
estadoUltimoManual=estadoActualManual;

for(i=0;i<5;i++)
{
if (contadorManual % 2 == 0)
{
analogWrite(leds*,0);*

  • lcd.noBacklight();*
  • lcd.clear();*
  • }*
  • else*
  • {*
    _ analogWrite(leds*,255); _
    _
    }_
    _
    }_
    _
    }_
    _
    else _
    _
    { _
    _
    estadoPIR=digitalRead(PIR); _
    _
    Serial.println(estadoPIR); _
    _
    if (estadoPIR == HIGH)_
    _
    {_
    _
    medida = analogRead(foto); //Toma la medida del puerto analogo*_
    * Serial.println(medida); //Imprime el valor de la medida*
    * luzled = 255 - (medida/4); *
    * Serial.println(luzled); //Imprime el valor de la salida luzled*
    * for(i=0;i<5;i++)*
    * {*
    * if (luzled <= 5) // Si el calculo de luzled es menor o igual a 5...*
    * {*
    _ analogWrite(leds*,0); // ...luzled no se encendera*
    * }
    else // Entonces es mayor de 5...
    {
    analogWrite(leds,luzled); // ...luzled se encendera de forma*

    * // regulada*
    * }
    }
    }
    else*

    * {
    for(i=0;i<5;i++)
    analogWrite(leds,0);
    }
    }*_

* if (contador % 2 != 0){LCDaut();} *
* if (contadorManual % 2 != 0) {LCDman();} *
}
void LCDman()
*{ *
* float h = dht.readHumidity(); //Se lee la humedad*
* float t = dht.readTemperature(); //Se lee la temperatura*
* x = rtc.getTime();*
* Serial.println("Humedad: ");*
* Serial.println(h);*
* Serial.println("Temperatura: ");*
* Serial.println(t);*
/*
* lcd.setCursor(0, 0);*
* lcd.write(3);*
* lcd.setCursor(1, 0); //Inicio de la posicion 1 de la primera linea*
* lcd.print(rtc.getTimeStr());*
/
lcd.setCursor(1, 0);*

* lcd.write(3);*
* lcd.setCursor(2, 0);*
* lcd.print(x.hour);*
* lcd.print(":");*
* lcd.print(x.min);*

* lcd.setCursor(9, 0);*
* lcd.print("man");*
* lcd.backlight();*
* lcd.setCursor(0, 1); //Inicio de la posicion 0 de la segunda linea*
* lcd.write(1);*
* lcd.print(t);*
* lcd.setCursor(6, 1); //Inicio de la posicion 6 de la segunda linea*
* lcd.print((char)223);*
* lcd.print("C");*

* lcd.setCursor(9, 1); //Inicio de la posicion 9 de la segunda linea*
* lcd.write(2);*
* lcd.print(h);*
* lcd.setCursor(15, 1); //Inicio de la posicion 15 de la segunda linea*
* lcd.print("%");*
}
void LCDaut()
*{ *
* float h = dht.readHumidity(); //Se lee la humedad*
* float t = dht.readTemperature(); //Se lee la temperatura*
* x = rtc.getTime();*
* Serial.println("Humedad: ");*
* Serial.println(h);*
* Serial.println("Temperatura: ");*
* Serial.println(t);*
/*
* lcd.setCursor(0, 0);*
* lcd.write(3);*
* lcd.setCursor(1, 0); //Inicio de la posicion 1 de la primera linea*
* lcd.print(rtc.getTimeStr());*
/
lcd.setCursor(1, 0);*

* lcd.write(3);*
* lcd.setCursor(2, 0);*
* lcd.print(x.hour);*
* lcd.print(":");*
* lcd.print(x.min);*
* lcd.setCursor(13, 0);*
* lcd.print("aut");*
* lcd.backlight();*
* lcd.setCursor(0, 1); //Inicio de la posicion 0 de la segunda linea*
* lcd.write(1);*
* lcd.print(t);*
* lcd.setCursor(6, 1); //Inicio de la posicion 6 de la segunda linea*
* lcd.print((char)223);*
* lcd.print("C");*

* lcd.setCursor(9, 1); //Inicio de la posicion 9 de la segunda linea*
* lcd.write(2);*
* lcd.print(h);*
* lcd.setCursor(15, 1); //Inicio de la posicion 15 de la segunda linea*
* lcd.print("%");*
}

Cualquier sugerencia sera bien recibida en cuanto a la presentación del código, así como su estructura o lo que sea.

Un saludo y muchas gracias

Estoy investigando a ver como funciona esto:

http://playground.arduino.cc/Code/Timer#.UyhQRPl5NyW

Parece ser que esto resolvería el problema que tengo del LCD y ademas podría usarlo para que la placa no este leyendo constantemente la lectura de los sensores y el RTC ya que si lo pongo en modo automático se ralentiza mucho el funcionamiento de la placa.

Voy a continuar con las pruebas a ver si consigo algo en claro

Saludos

Dabauza:
Muy buenas,

Tengo la idea en mente de domotizarme la casa usando arduino y tengo una duda, de momento llevo que hecho el encendido/apagado de las luces de forma manual y de forma automática mediante dos pulsadores (uno para el ON/OFF del modo manual y otro para el ON/OFF del modo automático). Si la enciendo de forma manual las luces se enceraran al máximo, pero si la enciendo de forma automática dependerá de que el sensor de presencia detecte movimiento y ademas mediante una LDR se regulara la intensidad de la luz.

También he añadido un display LCD de 16x2 en el que muestro la hora, la humedad y la temperatura y si el sistema esta funcionando en modo manual o en modo automático.

Ahora bien, estoy intentando que el display solo permanezca encendido solo durante 30 segundos (con la función millis) después de pulsar cualquiera de los dos pulsadores, pero no hay manera, lo he probado de 10 millones de formas y nada, lo máximo que he conseguido es que se apague a los 30 segundos pero si vuelvo a pulsar el pulsador ya no hay manera de que vulva a iluminarse el display.

Ya no se que mas intentar, aqui dejo lo que llevo de la programación para que veáis como esta, seguramente hecha un desastre, pero soy nuevo en esto y he ido aprendiendo de lo que he ido leyendo y a base de prueba y error.

No se como realizarlo utilizando el RTC (aun no he montado el modulo y lo tengo desde hace meses xD), en todo caso tu problema es sencillo de solventar :slight_smile:

//define una variable y un PIN que encienda el LCD
unsigned long tiempo = millis();
#define pinLCD   3

En el Setup()

pinMode(pinLCD,OUTPUT);
digitalWrite(pinLCD,HIGH);

y en el loop haces lo siguiente:

if ( digitalRead(pulsador) || digitalRead(pulsadorManual) )
{
   tiempo = millis ();
   if (!digitalRead(pinLCD)) digitalWrite(pinLCD,HIGH);
}else if (millis()-tiempo > 30000)
   digitalWrite(pinLCD,LOW);

Revisalo que no lo he pasado por el compilador y puede faltar algun ; xD
:slight_smile:

juanpintom:
No se como realizarlo utilizando el RTC (aun no he montado el modulo y lo tengo desde hace meses xD), en todo caso tu problema es sencillo de solventar :slight_smile:

//define una variable y un PIN que encienda el LCD

unsigned long tiempo = millis();
#define pinLCD  3




En el Setup()



pinMode(pinLCD,OUTPUT);
digitalWrite(pinLCD,HIGH);




y en el loop haces lo siguiente:



if ( digitalRead(pulsador) || digitalRead(pulsadorManual) )
{
  tiempo = millis ();
  if (!digitalRead(pinLCD)) digitalWrite(pinLCD,HIGH);
}else if (millis()-tiempo > 30000)
  digitalWrite(pinLCD,LOW);




Revisalo que no lo he pasado por el compilador y puede faltar algun ; xD
:)

Muchas gracias juanpintom, voy a probarlo a ver el resultado.

Edito:
Un par de preguntas que igual son un poco tontas...

¿Que diferencia hay entre...?:
#define pinLCD 3 e
int pinLCD = 3

y... Si al inicio del sketch ya he definido:
unsigned long tiempo = millis();
¿Es necesario luego en el loop poner esto?
tiempo = millis();

¿O se podria hacer asi?
unsigned long tiempo (al inicio)
tiempo = millis(); (en el loop)

Muchas gracias

Saludos

Dabauza:
Edito:
Un par de preguntas que igual son un poco tontas...

¿Que diferencia hay entre...?:
#define pinLCD 3 e
int pinLCD = 3

Lo hago por costumbre, cualquier valor que no sea una variable lo defino como constante, para que en ningun caso pueda ser alterado en tiempo de ejecucion.
Tecnicamente no puedo ser muy claro porque lo explicaria mal. Pero si no me equivoco tambien ocupa menos memoria al ser declarado como constante y no variable.

Dabauza:
y... Si al inicio del sketch ya he definido:
unsigned long tiempo = millis();
¿Es necesario luego en el loop poner esto?
tiempo = millis();

¿O se podria hacer asi?
unsigned long tiempo (al inicio)
tiempo = millis(); (en el loop)

Muchas gracias

Saludos

Si, se podria hacer perfectamente con la segunda opcion que propones, solo que siempre que utilizo variables de tiempo las inicializo con el valor al inicio. Pero de nuevo, son costumbres. Lo que es seguro es que en el loop tiene que estar. Cada vez que se pulse un boton la variable tiempo guardara el momento en que este se pulso, para luego hacer el calculo posterior.

Salu2

juanpintom:
Lo hago por costumbre, cualquier valor que no sea una variable lo defino como constante, para que en ningun caso pueda ser alterado en tiempo de ejecucion.
Tecnicamente no puedo ser muy claro porque lo explicaria mal. Pero si no me equivoco tambien ocupa menos memoria al ser declarado como constante y no variable.

Lo veo bastante lógico y coherente, de ahora en adelante lo haré así también :slight_smile:

Por cierto, yo ya no se que hago mal, he probado el código que me has puesto y nada de nada hace lo mismo que sin añadir el código tuyo. Ya no se que puñetas hago mal. Esto empieza a ser un poco desesperante =(

Edito:
Creo que había conectado Vcc del LCD donde no tocaba, voy a probar de nuevo a ver lo que pasa.

Re-Edito:
Si que funciona lo que pasa es que el LCD al quitarle la alimentacion se ralla y cuando vuelvo a apagar y encender los LEDS en el LCD faltan caracteres o salen cosas raras.

Estoy probando asi:
if (contador % 2 != 0){
tiempo = millis ();
LCDaut();
}
else if (millis()-tiempo > 30000){
lcd.noBacklight();
lcd.clear();
}

if (contadorManual % 2 != 0){
tiempo = millis ();
LCDman();
}
else if (millis()-tiempo > 30000){
lcd.noBacklight();
lcd.clear();
}

Pero estoy como al principio, enciende pero no apaga transcurridos los 30 seg :frowning:

Re-re-edito: :slight_smile:
BIIIIIIIIIIIIIIIIIIIIIIEEEEEEEEEEEEEEEEEEEENNNNNNNNNNNNNN!!!!!!!!!!!!!!!!!!!!!!!

Ya funciona!!!!!!!! :smiley: :smiley: :smiley: :smiley:

No veas menuda alegría, después de días y días intentándolo por fin a funcionado. Muchisimas gracias
juanpintom y a todos los que colgais tan maravillosa y valiosa informacion en este foro :smiley: :smiley: :smiley: la solucion era esta:

if ((contador % 2 != 0)&&(digitalRead(pulsador))){
tiempo = millis ();
LCDaut();
}
else if (millis()-tiempo > 30000){
lcd.noBacklight();
lcd.clear();
}

if ((contadorManual % 2 != 0)&&(digitalRead(pulsadorManual))){
tiempo = millis ();
LCDman();
}
else if (millis()-tiempo > 30000){
lcd.noBacklight();
lcd.clear();
}

Había una cosa por las que yo sabia que no funcionaba pero que no sabia como hacerlo. Una de ellas era que no conseguía hacer que el conteo del temporizador dependiera del momento en que yo pulsaba el pulsador, la solución era tan sencilla como poner if(... ... ... &&(digitalRead(pulsador))){ (!!!Esas puertas logicas!!! :D)

Y la otra era que yo usaba el else, y usando el else if puedo poner una segunda condición en vez de ponerlo todo en la primera.

Ademas, no me preguntes el por que pero se a solucionado solo el problema de que el mega 2650 funcionara lento. :slight_smile: Aunque de todas formas voy a intentar que no este leyendo todo el rato el DHT11 y el RTC

Un saludo

Dabauza:

juanpintom:
Lo hago por costumbre, cualquier valor que no sea una variable lo defino como constante, para que en ningun caso pueda ser alterado en tiempo de ejecucion.
Tecnicamente no puedo ser muy claro porque lo explicaria mal. Pero si no me equivoco tambien ocupa menos memoria al ser declarado como constante y no variable.

Lo veo bastante lógico y coherente, de ahora en adelante lo haré así también :slight_smile:

Por cierto, yo ya no se que hago mal, he probado el código que me has puesto y nada de nada hace lo mismo que sin añadir el código tuyo. Ya no se que puñetas hago mal. Esto empieza a ser un poco desesperante =(

Edito:
Creo que había conectado Vcc del LCD donde no tocaba, voy a probar de nuevo a ver lo que pasa.

Re-Edito:
Si que funciona lo que pasa es que el LCD al quitarle la alimentacion se ralla y cuando vuelvo a apagar y encender los LEDS en el LCD faltan caracteres o salen cosas raras.

Estoy probando asi:
if (contador % 2 != 0){
tiempo = millis ();
LCDaut();
}
else if (millis()-tiempo > 30000){
lcd.noBacklight();
lcd.clear();
}

if (contadorManual % 2 != 0){
tiempo = millis ();
LCDman();
}
else if (millis()-tiempo > 30000){
lcd.noBacklight();
lcd.clear();
}

Pero estoy como al principio, enciende pero no apaga transcurridos los 30 seg :frowning:

Un saludo

Puede ser que este pasando constantemente por tiempo=millis(); ?
Añade un Serial.println("Boton pulsado"); en los if
y otro Serial.println("Apagar pantalla"); en los else if
y prueba si sale constantemente "Boton Pulsado" en el monitor serie

Salu2

juanpintom:
Puede ser que este pasando constantemente por tiempo=millis(); ?
Añade un Serial.println("Boton pulsado"); en los if
y otro Serial.println("Apagar pantalla"); en los else if
y prueba si sale constantemente "Boton Pulsado" en el monitor serie

Salu2

Exactamente, ese era el problema. Al añadir la puerta AND junto con el estado del pulsador ya no reinicia todo el rato el temporizador

Muuuchiiiiiiisiiiiimaaaas gracias. :slight_smile:

Ahora a intentar que las lecturas las tome de forma pausada de los sensores y a esperar que lleguen pronto el resto de materiales para continuar con los experimentos.

También me gustaría hacer la función dimmer con un pulsador para poder regular los leds de forma manual también.

Y a ver si se me ocurre alguna otra cosa que ir añadiendo. Acepto sugerencias XD

Joe! No veas menuda alegría llevo encima XD. Que gusto da ver como las cosas van saliendo y mas aun cuando son cosas que haces por ti mismo y que te llevan tiempo y esfuerzo.

Por cierto seguiré atento al post de Proyecto Souliss para ir allanando el terreno mientras llegan los materiales e ir enterándome las nuevas que vayan surgiendo.

Juanpintom estoy a tu disposición para cualquier cosa que necesites :wink:

Muchas gracias de nuevo por tu tiempo y ayuda.

Saludos

Para la lectura cada 5 segs :
if(millis()%5000==0)
lecturas....

Para el dimmer te paso un codigo de una lampara dimmer capacitiva que tengo montada, es doble porque es la iluminacion que tengo montada en los lados de la cama. Lo que hace es cuando detecta una pulsacion sube el brillo, y si la luz esta encendida siempre lo baja, se podria depurar para que funcionara de otros modos, pero para mi este era el mas comodo. (Pulso hasta que ilumine suficiente y luego puedo bajar directamente o poco a poco.

No hay de que, estamos para ayudar! Seguramente tu sepas muchas cosas que yo no sepa y puede que necesite :slight_smile:

Para el proyecto Souliss precisamente interesaria tener gente con todo tipo de conocimientos, porque cualquiera puede aportar cosas interesantes.

Salu2

LamparaCapacitivaLibreriaFaderV1.ino (2.91 KB)

juanpintom:
Para la lectura cada 5 segs :
if(millis()%5000==0)
lecturas....

Gracias, Voy a intentar adaptarlo a mi código a ver si tengo suerte y no da mucha guerra :slight_smile:

juanpintom:
Para el dimmer te paso un codigo de una lampara dimmer capacitiva que tengo montada, es doble porque es la iluminacion que tengo montada en los lados de la cama. Lo que hace es cuando detecta una pulsacion sube el brillo, y si la luz esta encendida siempre lo baja, se podria depurar para que funcionara de otros modos, pero para mi este era el mas comodo. (Pulso hasta que ilumine suficiente y luego puedo bajar directamente o poco a poco.

Vaya, tenemos formas muy parecidas (por no decir iguales) de pensar, eso era lo que quería hacer que al pulsar incrementara y al volver a pulsar decrementara. Le voy a pegar un ojo por que (no se si tu dimmer funcionara asi) a mi me gustaría también que si le doy el primer pulso corto se encendiera al máximo, y si estando encendida le doy un pulso corto se apague.

juanpintom:
No hay de que, estamos para ayudar! Seguramente tu sepas muchas cosas que yo no sepa y puede que necesite :slight_smile:

Para el proyecto Souliss precisamente interesaria tener gente con todo tipo de conocimientos, porque cualquiera puede aportar cosas interesantes.

Yo soy electricista de profesión y formación :wink: aunque ahora mismo estoy parado por lo que estoy aprovechando para formarme mas. :slight_smile:

Así que de conocimientos de electricidad voy bastante bien, de electrónica analógica y digital me defiendo algo y de programación estoy aprendiendo ahora.

Personalmente he llegado hasta aquí cuando he estudiado los automatas programables (PLC) y sistemas domoticos (como el X10, KNX...), que cuando vi lo que valía cada cosa me quede :fearful: y me puse a investigar vías mas económicas con lo cual me tope de casualidad con Arduino, que ademas es polivalente y vale tanto como para usarlo como PLC como para domotica, robotica o lo que a uno se le ocurra e infinitamente mas económico.

Un saludo

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)

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: :astonished: xD

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 :slight_smile:

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

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! :slight_smile: (Mi profesor de electronica basica se reiria de mi el c...bron xDD )

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.

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.

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

Salu2

juanpintom:
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().

juanpintom:
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: :astonished: 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.

juanpintom:
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 :slight_smile:

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

juanpintom:
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.

juanpintom:
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! :slight_smile: (Mi profesor de electronica basica se reiria de mi el c...bron xDD )

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

juanpintom:
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

juanpintom:
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:

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.

juanpintom:
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 :slight_smile:

Saludos

Dabauza:
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.

Dabauza:

juanpintom:
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 :slight_smile:

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 :slight_smile:

Dabauza:
¿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.

Dabauza:
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 :slight_smile:

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 :slight_smile: todo es cuestion de colaborar :slight_smile:

Salu2

juanpintom:
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

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 :slight_smile:

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

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

juanpintom:
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

juanpintom:
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.

juanpintom:
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).

juanpintom:
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 :slight_smile: todo es cuestion de colaborar :slight_smile:

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

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

Dabauza:

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 :slight_smile:

Te paso el codigo, se podria simplificar aun mas.

#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);  

    }
}

Dabauza:

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

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

Dabauza:
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:

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.

Dabauza:
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.

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

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_Peer2V1_24_CapacitiveTouch_RFin_Dynamic.zip (4.98 KB)

juanpintom:
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 :slight_smile:

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

juanpintom:
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:

Google Code Archive - Long-term storage for Google Code Project Hosting.

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...

juanpintom:
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)

juanpintom:
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.

juanpintom:
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

juanpintom:
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.

juanpintom:
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"