[SOLUCIONADO]botón activa varias salidas

Hola a todos
sigo teniendo algun problema con el codigo del proyecto que estoy haciendo y os rogaria ayuda con esta duda de la que no he encontrado respuesta en san Google.
Estoy adaptando un interfono para que puedan usarlo personas discapacitadas , para facilitarles el uso pretendo que puedan realizar todas las funciones con un solo boton .
Aqui os dejo parte del codigo donde tengo el problema.

         if ( descuelgue == HIGH) {
           Serial.println("telefono descolgado");
           digitalWrite (cajaVoz, HIGH);
           unsigned long currentMillis = millis();
 
           // loop from the lowest pin to the highest:
           for (int led = 2; led < 6; led++) {
         
          //Apaga secuencia leds 
         while (currentMillis - previousMillis <= temporizador)
           currentMillis = millis();
           digitalWrite(led, LOW);
           currentMillis = millis();
           previousMillis = currentMillis;
           
          //Si se vuelve a pulsar el boton de descolgar abrimos puerta
          if (descuelgue == HIGH) {
            digitalWrite (abrepuerta, HIGH);
            delay(500);
            digitalWrite (abrepuerta, LOW);
           
          }
        }
      }

las señales tienen pull ups , pero aun asi pulsando una vez descolgar se ejecuta el ultimo if donde se abre la puerta .
Probé a escribir un digitalWrite(descuelgue,LOW), pero no se puede en las entradas verdad? :blush: , el caso es que no funcionó.
Si se os ocurre alguna idea , os lo agradeceria mucho , saludos

Tienes un problema de rebote en la lectura de descuelgue asi que prueba con esto y sino usa algun retardo de 20 a 50mseg que confirme que estas en HIGH con descuelgue.
Ahora prueba asi, y define la variable descuelgueAnt del mismo modo que descuelgue y inicializala a LOW.

    if ( descuelgue == HIGH && descuelgueAnt==LOW) {
        Serial.println("telefono descolgado");
        digitalWrite (cajaVoz, HIGH);
        unsigned long currentMillis = millis();
 
        // loop from the lowest pin to the highest:
        for (int led = 2; led < 6; led++) {
         
            //Apaga secuencia leds 
             while (currentMillis - previousMillis <= temporizador)
               currentMillis = millis();
               digitalWrite(led, LOW);
               currentMillis = millis();
               previousMillis = currentMillis;
               
              //Si se vuelve a pulsar el boton de descolgar abrimos puerta
              if (descuelgue == HIGH) {
                digitalWrite (abrepuerta, HIGH);
                delay(500);
                digitalWrite (abrepuerta, LOW);
       
              }
          }
    }
    descuelgueAnt = descuelgue;

Muchas gracias por la ayuda , he conseguido avanzar un poco , poniendo un poco de Delay ha sido suficiente para evitar que hiciera todo seguido .
El problema que tengo ahora es que tal como esta escrito solo activa el abrepuerta si pulso descolgar en el momento en que el escribe el digitalWrite (led,LOW);

while (currentMillis - previousMillis <= temporizador)
            currentMillis = millis();
          digitalWrite(led, LOW);
          previousMillis = currentMillis;
          
          descuelgue = digitalRead(descolgar);

          if (descuelgue == HIGH) {
            digitalWrite (abrepuerta, HIGH);
            delay(500);
            digitalWrite (abrepuerta, LOW);
          }

Podria plantearlo de otra forma , pero ahora que he conseguido llegar hasta aqui y que haga “casi” lo que quiero me da la mala. Por lo que he ido leyendo , una de las opciones seria usar interrupciones para leer el pulsador ,creeis que podria funcionar?.
Un saludo

No. Si el pulsador o switch rebota, la interrupción no resuelve nada.
No me había dado cuenta pero si usas millis() no deberías usar delay.

otro error es que esta línea

while (currentMillis - previousMillis <= temporizador)
            currentMillis = millis();

solo abarca hasta donde he puesto y no creo que haya sido tu intención.
al menos debería ser

  while (millis()- previousMillis >= temporizador){
          digitalWrite(led, LOW);
          previousMillis = millis();
  }

el sentido de la comparación <= tampoco se entiende.
Nunca saldrá de ese loop.

Hola
Entiendo lo que me dices de usar millis y delay ,y se que si no me da problemas es porque donde uso millis no hay ninguno .
Lo del comparardor <= funciona bien , la verdad es que lo copie de una pagina y le inverti el sentido , porque era un temporizado a la conexion y yo lo queria al reves .
Estaba pensando en quitar el while ya que ,como habia comentado en el post anterior , tiene que coincidir que se apague un led para que lea el estado de "descuelgue " y me abra la puerta .
En realidad es una tonteria lo que quiero hacer , y me da rabia no ser capaz de sacarlo sin tener que darle tanta vuelta .
Simplemente en un tiempo x que fijo mediante un potenciometro se van apagando los leds secuencialmente (para indicar el tiempo restante) y si pulsas “descuelgue” abres la puerta .

Para apagar los leds habia pensado en cuatro if tal que asi
if (currentMillis - previousMillis <= temporizador * 0,25);
if (currentMillis - previousMillis <= temporizador * 0,5);
if (currentMillis - previousMillis <= temporizador * 0,75);
if (currentMillis - previousMillis <= temporizador );

De nuevo gracias y saludos

Te da rabia porque te has salteado muchos pasos, como ponerte a estudíar lo básico. Pero todos hacen lo mismo, subestiman la programación.

lo que no entiendes es.. que no puedes esperar a un evento y usar delay. El dely hará que tu evento ocurra y tu no puedas detectarlo.

Explica que debe hacer el programa y no pongas código. Hazlo paso a paso. Cuando se descuelgue el telefono (con un HIGH), que mas?

No creas que subestimo la programacion , estoy continuamente buscando informacion y haciendo cursos online , pero ya me coje un poco pasao y las cosas no se quedan como antes :smiley: .
Sin codigo explico lo que hace el programa.
una llamada al interfono activa una entrada digital, cuando lo hace enciende cuatro leds indicandolo y temporiza 15 segundos , dentro de los cuales , si se pulsa una vez descolgar , empieza una cuenta atras ,con un tiempo definido mediante un potenciometro, en esa cuenta atras apaga los cuatro leds secuencialmente , ahi ademas activo un rele que da la señal a una caja de voz que reproduce un mensaje grabado “Buenos dias … quien es?”. Dentro de esa cuenta atras si pulso de nuevo decolgar activo el rele del abrepuertas durante medio seg.
y el codigo lo pongo entero por si es de ayuda.

int ledVerde1 = 2;
int ledVerde2 = 3;
int ledAmarillo = 4;
int ledRojo = 5 ;
int llamar = 6;
int cajaVoz = 7 ;
int descolgar = 9;
int abrepuerta = 8;
bool llamada = 0;
bool descuelgue = 0;
int estado = 0;
int i = 0;
unsigned long temporizador = 0;
unsigned long previousMillis = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  pinMode (13, OUTPUT);
  pinMode (ledVerde1, OUTPUT);
  pinMode (ledVerde2, OUTPUT);
  pinMode (ledAmarillo, OUTPUT);
  pinMode (ledRojo, OUTPUT);
  pinMode (llamar, INPUT);
  pinMode (cajaVoz, OUTPUT);
  pinMode (descolgar, INPUT);
  pinMode (abrepuerta, OUTPUT);
}
void loop() {

  llamada = digitalRead(llamar);
  temporizador = analogRead(0) * 10 ;
  unsigned int currentMillis = millis();

  if (llamada == HIGH) {
    previousMillis = currentMillis;
    estado = 1;
  }

  if (estado == 0) {
    digitalWrite( ledVerde1, LOW);
    digitalWrite (ledVerde2, LOW);
    digitalWrite( ledAmarillo, LOW);
    digitalWrite (ledRojo, LOW);
  }

  else {
    if (currentMillis - previousMillis < 15000) {

      Serial.print("temporizador: ");
      Serial.println(temporizador);
      //delay(1000);     // espera 1 segundo

      descuelgue = digitalRead(descolgar);

      Serial.print("llamada: ");
      Serial.println(llamada);
      //delay(1000);     // espera 1 segundo

      Serial.print("descuelgue: ");
      Serial.println(descuelgue);


      digitalWrite( ledVerde1, HIGH);
      digitalWrite (ledVerde2, HIGH);
      digitalWrite( ledAmarillo, HIGH);
      digitalWrite (ledRojo, HIGH);
      Serial.print("llamada despues if: ");
      Serial.println(llamada);


      if ( descuelgue == HIGH  ) {

        delay(400);
        Serial.println("telefono descolgado");
        Serial.println(descuelgue);
        digitalWrite (cajaVoz, HIGH);

        unsigned long currentMillis = millis();
        // loop from the lowest pin to the highest:
        for (int led = 2; led < 6; led++) {
          // turn the pin off:

          while (currentMillis - previousMillis <= temporizador)
            currentMillis = millis();
          digitalWrite(led, LOW);
          previousMillis = currentMillis;
          
          descuelgue = digitalRead(descolgar);

          if (descuelgue == HIGH) {
            digitalWrite (abrepuerta, HIGH);
            delay(500);
            digitalWrite (abrepuerta, LOW);
          }

        }
        estado = 0;
      }

    }
    else {
      estado = 0;
    }
  }
}

un saludo y gracias por tu paciencia

Ahora podremos analizarlo mejor. Siempre siempre siempre, haz esto que hiciste ahora. Nunca subestimes ni lo que sabes o no sabes hacer pero considera que NOSOTROS no sabemos como es el proyecto a menos que nos des una buena explicación.
Creo que esta mucho mas claro ahora.
Alguien o yo mismo te daremos un buen empujón. Espera a que tenga un tiempo que en 3 dias me voy de vacaciones y estoy apretado.

Xose, aquí tienes como lo haría yo

//definicion de pines de los leds
int ledVerde1 = 2;  
int ledVerde2 = 3;
int ledAmarillo = 4;
int ledRojo = 5 ;

int llamar = 6;//definicion del pin del botón de llamada del interfono 
int cajaVoz = 7 ;//definicion del pin al que se conecta el relé para activar el mensaje de voz
int descolgar = 9;//definición del pin del botón de descolgar
int abrepuerta = 8; //definicion del pin que activa la apertura de la puerta

bool llamada = 0; //guarda si se ha producido una llamada
bool descuelgue = 0; //guarda si se ha pulsado el botón descolgar
bool descuelgueant=0; // guarda el estando anterior de la pulsación del botón de descolgar 
bool apagarleds=0; //guarda si hay que apagar los leds
bool ActivarMensajeVoz=0; //guarda si hay que activar el mensaje de voz
unsigned long timeIniMsgVoz=0; //guarda tick(time) de inicio para la reproducción del mensaje de voz
long timeMsgVoz=2000; //tiempo de relé activo para la reproducción del mensaje de voz
bool AbrirPuerta=0; //guarda si hay que abrir la puerta
unsigned long timeIniAbrirPuerta; //guarda el tick de inicio para la apertura de la puerta 
long timeAperturaPuerta=500;  // tiempo de apertura de la apuerta
int pulsaciones_descuelgue=0; //controla el número de pulsaciones de la tecla descuelgue

int estado = 0; // controla el estado del botón de llamada del interfono
int estadollamadaant=0; //controla el estado del botón de llamada del interfono
bool han_llamado=0; //guarda si han llamado
bool han_descolgado=0; //guarda si han descolgado

int i = 0;
unsigned long temporizador = 0; //guarda el tiempo calculado a partir del potenciómetro
unsigned long previousMillis = 0; // guarda el tiempo de inicio del periodo de 15 seg tras la pulsación de llamada
unsigned long timeInidescuelgue=0; //guarda el tick de inicio de la pulsación de descuelgue

void setup() {
  
  Serial.begin(9600);  //Inicializa Serial

  //Inicializa puertos
  pinMode (13, OUTPUT); 
  pinMode (ledVerde1, OUTPUT);
  pinMode (ledVerde2, OUTPUT);
  pinMode (ledAmarillo, OUTPUT);
  pinMode (ledRojo, OUTPUT);
  pinMode (llamar, INPUT);
  pinMode (cajaVoz, OUTPUT);
  pinMode (descolgar, INPUT);
  pinMode (abrepuerta, OUTPUT);
  
  //fuerza a estado de leds apagados
  digitalWrite( ledVerde1, LOW);
  digitalWrite (ledVerde2, LOW);
  digitalWrite( ledAmarillo, LOW);
  digitalWrite (ledRojo, LOW);

  
}
void loop() {
    
	comprueba_llamada();
}


void comprueba_llamada(){
  
  unsigned long currentMillis = millis(); //guarda el tick actual

  llamada = digitalRead(llamar);  //leemos el pulsador del interfono
  
  if (llamada == HIGH && estadollamadaant==0){ //ejecutamos sólo si hay un cambio de estado del botón
	previousMillis = currentMillis; //guardamos el tiempo que utilizaremos para contar los 15 segundos
    estado=1;  //Cambiamos estado a botón pulsado
    han_llamado=1; //guardamos que ha habido una llamada
    estadollamadaant=1; //establecemos el estado anterior a pulsado
    enciende_leds(); //encendemos los leds
    //Serial.println("Cambió estado=1, han_llamado=1 y estadollamadaant=1");
    }
  
  
  
  if(llamada==LOW && estadollamadaant==1){ //Si se ha dejado de pulsar establecemos el estado anterior a 0
  	estadollamadaant=0;
    //Serial.println("Cambió estadollamadaant=0");
  }
  

  if (han_llamado && (currentMillis-previousMillis)<15000){ //Ejecutamos sólo si ha habido pulsación del botón de llamada y estamos dentro de los 15 segundos definidos
    proceso_llamada();
  }
  else {
    if(han_llamado){ //Si se han agotado los 15 segundos
   		Serial.println("Termino Tiempo llamada"); 
      	han_llamado=0; //establecemos a 0 
        reset_leds(); //apagamos todos los leds, relé y abrepuerta, por si quedó alguno en HIGH
    }
  }  
   
}   //fin void comprueba_llamada

void proceso_llamada(){

descuelgue = digitalRead(descolgar); //leemos el botón descolgar 
  if (descuelgue==HIGH && descuelgueant==0){ //Verificamos si se ha pulsado el botón de descolgar
  	pulsaciones_descuelgue++; //incrementamos en 1 el contador de pulsaciones
    descuelgueant=1; //guardamos para controlar próximas pulsaciones
    
    if (pulsaciones_descuelgue==1){ //Si es la primera pulsación encendemos los leds y calculamos el tiempo que tardarán en apagarse según el potenciometro
      temporizador = analogRead(0) * 10 ; //calculamos tiempo definido con el potenciometro
      timeInidescuelgue=millis(); //Guardamos el tick de inicio desde que se ha pulsado el pulsador
      apagarleds=1;  // guardamos en la variable que debemos apagar los leds
      ActivarMensajeVoz=1; //activamos el mensaje de voz
    }
    if (pulsaciones_descuelgue==2){ // Si es la segunda pulsación abrimos la puerta
		AbrirPuerta=1;
    }
  }
  if(descuelgue==LOW && descuelgueant==1){ // Si se deja de pulsar el botón de descuelgue
  	descuelgueant=0;  //guardamos que se ha dejado de pulsar
  }
  if(apagarleds==1){ // Si se deben apagar los leds
    apaga_sec_leds();
  }
  if(AbrirPuerta==1)Abre_Puerta(); //Si se debe abrir la puerta
  if(ActivarMensajeVoz==1)activa_MsgVoz();
}


void apaga_leds(){ //Esta función apaga todos los leds
  digitalWrite( ledVerde1, LOW);
  digitalWrite (ledVerde2, LOW);
  digitalWrite( ledAmarillo, LOW);
  digitalWrite (ledRojo, LOW);
}

void enciende_leds(){ //Esta función enciende todos los leds
  digitalWrite( ledVerde1, HIGH);
  digitalWrite (ledVerde2, HIGH);
  digitalWrite( ledAmarillo, HIGH);
  digitalWrite (ledRojo, HIGH);
}


void apaga_sec_leds(){ //Esta función apaga los leds secuencialmente. Apaga un led cuando ha pasado 1/4 del tiempo calculado por el potenciómetro

unsigned long timeTarget; //Tick al que debe llegar
unsigned long timeRestante;  //Tiempo restante hasta el tickTarget
unsigned long timePeriodo; //Tiempo en el que se debe apagar cada led
  
  timeTarget=timeInidescuelgue+temporizador; //Es el tiempo al que debe llegar. Cuando sea igual a millis() se habrán apagado todos los leds.
  timePeriodo=temporizador/4; //Calculamos cada cuanto tiempo se debe apagar un led
  timeRestante=timeTarget-millis(); //Tiempo restante hasta que estén todos apagados
  if (timeTarget>=millis()){ //Controlamos si hemos llegado al final del tiempo establecido por el potenciómetro
      switch((int)(timeRestante/timePeriodo)+1){ //Dividimos el tiempo que queda al final del periodo y lo convertimos a entero. Esto nos dará un número del 1 al 4 que será el led que vamos a apagar
        case 1: 
        if (digitalRead(ledVerde1)==HIGH){
          digitalWrite(ledVerde1,LOW);
          Serial.println("Led1 Apagado"); 
        }
        break;
        case 2: 
        if (digitalRead(ledVerde2)==HIGH){
          digitalWrite(ledVerde2,LOW);
          Serial.println("Led2 Apagado"); 
        }
        break;
        case 3: 
        if (digitalRead(ledAmarillo)==HIGH){
          digitalWrite(ledAmarillo,LOW);
          Serial.println("Led3 Apagado"); 
        }
        break;
        case 4: 
        if (digitalRead(ledRojo)==HIGH){
          digitalWrite(ledRojo,LOW);
          Serial.println("Led4 Apagado"); 
        }
        break;

      } //End Select
  } //fin del if
  else{
    pulsaciones_descuelgue=0; //restablecemos el contador de pulsaciones del boton de descuelgue
    
  }
  
}

void activa_MsgVoz(){ //Esta función activa el relé que pone en marcha el mensaje de voz durante el tiempo configurado en la variable timeMsgVoz

  if(timeIniMsgVoz==0){
    timeIniMsgVoz=millis();
    digitalWrite(cajaVoz,HIGH);
  }
  
  if((timeIniMsgVoz+timeMsgVoz)<millis()){
  	digitalWrite(cajaVoz,LOW);
    timeIniMsgVoz=0;
    ActivarMensajeVoz=0;
  }
}

void Abre_Puerta(){//Esta función activa el pin que abre la puerta durante el tiempo configurado en la variable timeAperturaPuerta

  if(timeIniAbrirPuerta==0){
    timeIniAbrirPuerta=millis();
    digitalWrite(abrepuerta,HIGH);
  }
  
  if((timeIniAbrirPuerta+timeAperturaPuerta)<millis()){
  	digitalWrite(abrepuerta,LOW);
    timeIniAbrirPuerta=0;
    AbrirPuerta=0;
  }
}

void reset_leds(){ //resetea todos los puertos a LOW 
  digitalWrite(abrepuerta,LOW);
  digitalWrite(cajaVoz,LOW);
  digitalWrite( ledVerde1, LOW);
  digitalWrite (ledVerde2, LOW);
  digitalWrite( ledAmarillo, LOW);
  digitalWrite (ledRojo, LOW);
}

Como verás está todo basado en el uso de millis() guardando los ticks del inicio del timer e intentando que no se ejecute nada que no sea estríctamente necesario.

Pruébalo con tu cacharro. A mí me funciona según las especificaciones que has comentado.

Saludos,

Juanjo

Muchas gracias surbyte por explicarme como debo hacer para postear mis dudas , al hacerlo de la otra manera creia que os ahorraba tiempo yendo directamente a donde tenia el problema.
Y muchisimas gracias Juanjo por dedicar tu tiempo a realizar el programa completo , parece que hay que retocar algo en la secuencia de leds , pues he aumentado el tiempo a temporizador * 30 , ya que era muy corto , y los ultimos leds se apagan juntos , no obstante no me preocupa , lo de modificar código se me da mucho mejor que plantearlo desde 0.
Lo cual me lleva a realizaros la pregunta de ,como planteais vosotros como sera el programa en funcion de un enunciado como el que yo os di .Cuando yo lo hago ,intento respetar la secuencia logica que realiza , como si el procesador fuese leyendo linea a linea lo que yo le escribo , se que no es lo adecuado , pero creo que asi me aclaro yo mas .Veo que usas muchas mas variables que yo , lo cual encuadra mucho mejor cada situacion …
Pero mi duda mas grande es , debo realizar tal vez antes , un diagrama de flujo , una tabla de estados.
Llevaba una semana con esto y lo habeis echo en unas horas :sweat_smile:
Por cierto donde simulais el arduino , en el proteus?.tengo que probar algo de eso , yo tengo aquí todo montado en una protoboard

parece que hay que retocar algo en la secuencia de leds , pues he aumentado el tiempo a temporizador * 30 , ya que era muy corto , y los ultimos leds se apagan juntos

Resuelto , era porque pasaba el tiempo de llamada. ;) un 10 maquina. Por cierto , todo el proyecto ,lo colgare en la pagina de Aspacenet mencionando las colaboraciones (comentame Juajo si tuvieras algun inconeveniente en que cuelgue el codigo) , os invito a todos a participar y desarrollar adaptaciones , la verdad es que hay un monton de cosas que se pueden hacer con arduino que pueden ayudar a mucha gente a llevar una vida mucho mas completa. Para aquellos que querais desarrolar algo y no tengais claro el que , ya os digo que en este mundillo hay mil cosas por hacer

xose79: Y muchisimas gracias Juanjo por dedicar tu tiempo a realizar el programa completo , parece que hay que retocar algo en la secuencia de leds , pues he aumentado el tiempo a temporizador * 30 , ya que era muy corto , y los ultimos leds se apagan juntos , no obstante no me preocupa , lo de modificar código se me da mucho mejor que plantearlo desde 0.

Como decía mi abuelo, no hay por qué no darlas!!... jejeje Una cosa...Con ese temporizador * 30 puedes superar con facilidad los 15 segundos de vida que tiene el ciclo de llamada. Quizás lo mejor sería controlar que el tiempo de apagado de los 4 leds no rebase el tiempo restante del ciclo de llamada.

xose79: Lo cual me lleva a realizaros la pregunta de ,como planteais vosotros como sera el programa en funcion de un enunciado como el que yo os di .Cuando yo lo hago ,intento respetar la secuencia logica que realiza , como si el procesador fuese leyendo linea a linea lo que yo le escribo , se que no es lo adecuado , pero creo que asi me aclaro yo mas .

Xose, quizás tenga que ver que llevo casi 30 años haciendo programitas.... jejeje De todos modos, cuando el comportamiento de la aplicación está bien definido, como tú lo has hecho, todo se vuelve tremendamente sencillo, los diagramas de flujo y las tablas de estado se crean solitos en la cabeza.

xose79: Veo que usas muchas mas variables que yo , lo cual encuadra mucho mejor cada situacion ....

La programación secuencial va muy bien para tareas en las que no estás esperando la interacción con puertos analógicos o digitales y timers. Para aquellas aplicaciones que tienen que escuchar puertos y timers lo mas recomendable es dejar al procesador el mayor tiempo posible para que pueda escuchar el estado de los puertos. Por ello la utilización de flags/estados se torna imprescindible.

xose79: Pero mi duda mas grande es , debo realizar tal vez antes , un diagrama de flujo , una tabla de estados. Llevaba una semana con esto y lo habeis echo en unas horas :sweat_smile:

Para la programación de Arduino, veo mas importante diseñar una tabla de estados.

xose79: Por cierto donde simulais el arduino , en el proteus?.tengo que probar algo de eso , yo tengo aquí todo montado en una protoboard

Existen varios, todos bastante básicos. Proteus es una de ellas, aunque te exige que previamente exportes los binarios compilados desde el IDE. Otra es https://123d.circuits.io que se usa online. Esta te permite retocar el código directamente en el diseñador, sin necesidad de compilar. En contrapartida, le faltan muchos componentes para añadir a la protoboard.

Saludos,

Juanjo

xose79: Resuelto , era porque pasaba el tiempo de llamada. ;) un 10 maquina.

Ya lo suponía.... jejeje

xose79: Por cierto , todo el proyecto ,lo colgare en la pagina de Aspacenet mencionando las colaboraciones (comentame Juajo si tuvieras algun inconeveniente en que cuelgue el codigo) , os invito a todos a participar y desarrollar adaptaciones , la verdad es que hay un monton de cosas que se pueden hacer con arduino que pueden ayudar a mucha gente a llevar una vida mucho mas completa. Para aquellos que querais desarrolar algo y no tengais claro el que , ya os digo que en este mundillo hay mil cosas por hacer

No Xose, no tengo ningún inconveniente. Estaré encantado de que mi humilde aportación esté a disposición de colectivos como Aspacenet. Conozco de cerca algún caso de parálisis cerebral no cognitiva y considero que toda ayuda es poca para que puedan ser tan autónomos como les sea posible. Cuenta conmigo para lo que necesites en ese ámbito. Ya me dirás dónde lo cuelgas.

Saludos,

Juanjo

Si esta resuelto agrega SOLUCIONADO al título

Asi lo hare. Os mantendre al tanto en cuanto empiece a funcionar el cacharro. De nuevo , muchas gracias por la ayuda .