Otros Programadores a mi (Programa arduino inside)

  1. #1
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219

    Programadores a mi (Programa arduino inside)

    Hola muy buenas.

    Tengo que hacer un programa muy simple en arduino pero mis habilidades de programacion estan algo (muy) oxidadas.

    El programa lo que tiene que hacer es que cuando pulses un botón (pulsar y soltar) empiece a contar como un cronometro y cuando pulse el segundo botón pare y me diga en el monitor del ordenador el tiempo que ha tardado. A estos botones en el programa los llamo sensores. No se hacer los print para que me de el tiempo y tampoco se si lo que he hecho esta bien. Agradezco toda ayuda posible.

    Mi programa ahora mismo:

    int segundos = 0;
    int decimas = 0;
    long milisegundos = 0;
    int sensor1 = 10;
    int sensor2 = 9;

    void setup(){
    Serial.begin(9600);
    pinMode(sensor1, INPUT);
    digitalWrite(sensor1, LOW);
    pinMode(sensor2, INPUT);
    digitalWrite(sensor2, LOW);
    }
    void loop(){

    if(digitalRead(sensor1) == HIGH){
    segundos = 0;
    decimas = 0;


    milisegundos = millis();
    if(milisegundos % 100 == 0){ //Only enter if it has passed tenth of a second
    decimas++;
    if(decimas == 10){ //When it has passed 10 tenths of a second it count one second
    decimas = 0;
    segundos++;
    }
    }

    if(digitalRead(sensor2) == HIGH){
    }
    }
    }

    Gracias de antemano

    EDIT: El programa ahora mismo es un frankestein fruto de varias busquedas por la web.

  2. #2
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    Up

  3. #3
    ForoParalelo: Miembro Avatar de marck
    Registro
    31 Aug, 14
    Ubicación
    Madrid
    Mensajes
    3,555
    Me gusta (Dados)
    1489
    Me gusta (Recibidos)
    575
    Yo lo primero no llamaria a los botones "sensores"

    Pondría como variables globales el tiempo y el estado del boton primero, que se haya pulsado vaya. Y que mientras el boton primero haya sido pulsado, aumentar el tiempo como sea que se haga (no se). Luego si pulsan el segundo boton devolver el tiempo y resetear el valor del estado del primer boton por así decirlo

  4. #4
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    Cita Iniciado por marck Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    Yo lo primero no llamaria a los botones "sensores"

    Pondría como variables globales el tiempo y el estado del boton primero, que se haya pulsado vaya. Y que mientras el boton primero haya sido pulsado, aumentar el tiempo como sea que se haga (no se). Luego si pulsan el segundo boton devolver el tiempo y resetear el valor del estado del primer boton por así decirlo
    El nombre da igual, lo llamo sensores por que en la practica sera un sensor IR que da una salida digital de 5v pero para simular pondre en una protoboard dos botones. Respecto a lo de contar el tiempo note he entendido muy bien. Luego con mas tiempo cuando llegue a casa lo miro.

    Gracias

  5. #5
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    un UP mañanero

  6. #6
    ForoParalelo: Miembro Avatar de horticultor
    Registro
    17 May, 13
    Ubicación
    La huerta
    Mensajes
    581
    Me gusta (Dados)
    369
    Me gusta (Recibidos)
    147
    No se programar en arduino pero...

    ¿Qué devuelve la función millis()?

    Además, si HIGH es el evento de soltar el botón, eso entra en el if, inicializa las variables y cuando termina.... ¿qué?
    y si no es el evento de soltar el botón y tan sólo comprueba que ese botón esté arriba, la condición se cumpliría siempre y siempre estarías inicializando los segundos a cero.


    PD: indenta el código, aunque sea un poco, al menos para poder leerlo
    Código:
    void loop(){
     
      if(digitalRead(sensor1) == HIGH){
        segundos = 0;
        decimas = 0;
        
        milisegundos = millis();
        if(milisegundos % 100 == 0){ //Only enter if it has passed tenth of a second
          decimas++;
          
          if(decimas == 10){ //When it has passed 10 tenths of a second it count one second
            decimas = 0;
            segundos++;
          }
        }
        
        if(digitalRead(sensor2) == HIGH){
        }
      }
    }

  7. #7
    ForoParalelo: Miembro Avatar de Perce
    Registro
    12 Dec, 16
    Mensajes
    167
    Me gusta (Dados)
    159
    Me gusta (Recibidos)
    31
    yo que tu preguntaba en stackoverflow no en fp

  8. #8
    ForoParalelo: Miembro Avatar de infamous
    Registro
    19 Dec, 16
    Ubicación
    casa cristo
    Mensajes
    449
    Me gusta (Dados)
    263
    Me gusta (Recibidos)
    40
    Cita Iniciado por Perce Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    yo que tu preguntaba en stackoverflow no en fp

  9. #9
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    Cita Iniciado por Perce Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    yo que tu preguntaba en stackoverflow no en fp
    Gracias por la info, creo que al final consegui acabarlo (haber si lo testeo) pero me lo apunto!!

  10. #10
    Partepiernas Avatar de Kagnaska
    Registro
    04 Jan, 16
    Ubicación
    Tamriel
    Mensajes
    1,051
    Me gusta (Dados)
    68
    Me gusta (Recibidos)
    157
    Cita Iniciado por PROPELLERMAN Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    Gracias por la info, creo que al final consegui acabarlo (haber si lo testeo) pero me lo apunto!!
    haberlo

  11. #11
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    Cita Iniciado por Kagnaska Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    haberlo
    aqui te lo pongo, no te rias si esta muy mal

    int segundos = 0;
    int decimas = 0;
    long milisegundos = 0;
    int sensor1 = 10;
    int sensor2 = 9;

    void setup() {
    Serial.begin(9600);
    pinMode(sensor1, INPUT);
    pinMode(sensor2, INPUT);

    }
    void loop() {

    if (digitalRead(sensor1) == HIGH) {
    segundos = 0;
    decimas = 0;


    milisegundos = millis();
    if (milisegundos % 100 == 0) {
    decimas++;
    if (decimas == 10) {
    decimas = 0;
    segundos++;
    }
    }

    if (digitalRead(sensor2) == HIGH) {

    Serial.print("Tiempo (segundos)");
    Serial.print(segundos);
    Serial.println();

    Serial.print("Decimas");
    Serial.print(decimas);
    Serial.println();

    Serial.print("Milisegundos");
    Serial.print(milisegundos);
    Serial.println();

    }



    }
    }



    Gracias por la ayuda

  12. #12
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    Cita Iniciado por horticultor Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    No se programar en arduino pero...

    ¿Qué devuelve la función millis()?

    Además, si HIGH es el evento de soltar el botón, eso entra en el if, inicializa las variables y cuando termina.... ¿qué?
    y si no es el evento de soltar el botón y tan sólo comprueba que ese botón esté arriba, la condición se cumpliría siempre y siempre estarías inicializando los segundos a cero.


    PD: indenta el código, aunque sea un poco, al menos para poder leerlo
    Código:
    void loop(){
     
      if(digitalRead(sensor1) == HIGH){
        segundos = 0;
        decimas = 0;
        
        milisegundos = millis();
        if(milisegundos % 100 == 0){ //Only enter if it has passed tenth of a second
          decimas++;
          
          if(decimas == 10){ //When it has passed 10 tenths of a second it count one second
            decimas = 0;
            segundos++;
          }
        }
        
        if(digitalRead(sensor2) == HIGH){
        }
      }
    }
    Gracias por tu ayuda, la señal sera high cuando pulse el boton, en la cita a otro forero de arriba he dejado el programa a mi ultima version, milis es para contar el tiempo pero nose si lo estoy usando bien en el programa. La funcion que tiene que hacer el programa es: HIGH en sensor1 -> empiezo a contar -> HIGH sensor2 -> paro de contar y muestro en pantalla el tiempo en formato "Segundos xx (siguiente linea) Decimas x (siguiente linea) milisegundos x.

    Gracias de antemano!!!

    EDIT: despues del primer if del loop tengo igualadas las variables a 0 para borrar los datos anteriores y poder contar de nuevo sin tener que iniciar la placa de nuevo. Gracias

  13. #13
    ForoParalelo: Miembro Avatar de Kasurro
    Registro
    07 Oct, 15
    Mensajes
    1,079
    Me gusta (Dados)
    222
    Me gusta (Recibidos)
    172
    Y no se puede pedir la hora al sistema cada vez que pulses y restar?

  14. #14
    :3 Avatar de dinpolero
    Registro
    10 May, 16
    Ubicación
    Detras de ti
    Mensajes
    50,686
    Me gusta (Dados)
    34822
    Me gusta (Recibidos)
    21288
    Veo que ya lo tienes. El Arduino es fácil cuando le pillas el truco.

  15. #15
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    Cita Iniciado por Kasurro Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    Y no se puede pedir la hora al sistema cada vez que pulses y restar?
    Pues no tendria ni idea de como hacerlo, aun asi necesito precisión ya que va a contar lapsus de tiempo menores a 1 segundo el 90% de las veces asi que necesito que el tiempo que me de sea 0,xxx segundos, minimo 3 decimas. Aun asi me lo apunto para mirarlo, no es mala idea!!

  16. #16
    ForoParalelo: Miembro Avatar de horticultor
    Registro
    17 May, 13
    Ubicación
    La huerta
    Mensajes
    581
    Me gusta (Dados)
    369
    Me gusta (Recibidos)
    147
    Se avecina tocho

    Cita Iniciado por PROPELLERMAN Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    Gracias por tu ayuda, la señal sera high cuando pulse el boton, en la cita a otro forero de arriba he dejado el programa a mi ultima version, milis es para contar el tiempo pero nose si lo estoy usando bien en el programa. La funcion que tiene que hacer el programa es: HIGH en sensor1 -> empiezo a contar -> HIGH sensor2 -> paro de contar y muestro en pantalla el tiempo en formato "Segundos xx (siguiente linea) Decimas x (siguiente linea) milisegundos x.

    Gracias de antemano!!!

    EDIT: despues del primer if del loop tengo igualadas las variables a 0 para borrar los datos anteriores y poder contar de nuevo sin tener que iniciar la placa de nuevo. Gracias
    Ya he comentado que no se programar en arduino, pero siguen pareciéndome raras un par de cosas:

    Código:
    int segundos = 0;
    int decimas = 0;
    long milisegundos = 0;
    int sensor1 = 10;
    int sensor2 = 9;
    
    void setup() {
        Serial.begin(9600);
        pinMode(sensor1, INPUT);
        pinMode(sensor2, INPUT);
    }
    void loop() {
        if (digitalRead(sensor1) == HIGH) {
            segundos = 0;
            decimas = 0;
            milisegundos = millis();
            if (milisegundos % 100 == 0) {
                decimas++;
                if (decimas == 10) {
                    decimas = 0;
                    segundos++;
                }
            }
        
            if (digitalRead(sensor2) == HIGH) {
                Serial.print("Tiempo (segundos)");
                Serial.print(segundos);
                Serial.println();
                
                Serial.print("Decimas");
                Serial.print(decimas);
                Serial.println();
                
                Serial.print("Milisegundos");
                Serial.print(milisegundos);
                Serial.println();
            }
        }
    }
    Supongo que loop se ejecuta constantemente (cada milisegundo)
    Si HIGH se detecta cuando apretamos un botón, para que el programa funcione necesitará que ese sensor1 esté en HIGH, ya que la parte que controla el sensor2 se incluye dentro del if que comprueba que sensor1 se encuentre en HIGH
    Además, millis() me da el número de ms desde el inicio de la placa, con lo que sea cuando sea que pulse el sensor 1 el sistema almacena el momento y al pulsar el sensor 2 me muestra la información de cuando pulsé 1, no calcula cuando he pulsado 1 para compararlo con la pulsación de 2


    Sin tener ni puta idea, yo haría algo así... que igual es una aberración fruto de mi ignorancia
    Código:
    int sensor1 = 10;
    int sensor2 = 9;
    long milisegundos1 = 0;
    long milisegundos2 = 0;
    int segundos = 0
    int decimas = 0
    
    void setup() {
        Serial.begin(9600);
        pinMode(sensor1, INPUT);
        pinMode(sensor2, INPUT);
    }
    void loop() {
        if (digitalRead(sensor1) == HIGH) {
            milisegundos1 = millis();
        }
        if (digitalRead(sensor2) == HIGH) {
            milisegundos2 = millis();
    
            Serial.print("Tiempo (segundos)");
            segundos = (milisegundos2 - milisegundos1)/1000;
            Serial.print(segundos);
            Serial.println();
            
            Serial.print("Decimas");
            decimas = (milisegundos2 - milisegundos1)/100;
            Serial.print(decimas);
            Serial.println();
                
            Serial.print("Milisegundos");
            Serial.print((milisegundos2 - milisegundos1));
            Serial.println();
        }
    }
    Esto nos daría (espero) el tiempo en segundos completos, en décimas completas y en milisegundos desde la última pulsación del sensor1 cuando pulsemos el sensor2

    ejemplo:
    comienzo la ejecución.
    tras 1234 ms pulso el sensor1
    tras 2345 ms pulso el sensor2

    - el programa muestra 1 segundos
    - el programa muestra 11 decimas
    - el programa muestra 1111 milisegundos
    tras 4567 ms pulso el sensor 2 de nuevo
    - el programa muestra 3 segundos
    - el programa muestra 34 decimas
    - el programa muestra 3423 milisegundos
    tras 5000 ms pulso el sensor 1
    tras 9845 ms pulso el sensor 2

    - el programa muestra 4 segundos
    - el programa muestra 48 decimas
    - el programa muestra 4845 milisegundos[/I]
    tras 10000 ms pulso el sensor 1
    tras 10100 ms pulso el sensor 2

    - el programa muestra 0 segundos
    - el programa muestra 1 decimas
    - el programa muestra 100 milisegundos
    Última edición por horticultor; 11/01/2017 a las 09:53

  17. #17
    ForoParalelo: Miembro Avatar de DulceLimon
    Registro
    13 Dec, 16
    Mensajes
    19
    Me gusta (Dados)
    0
    Me gusta (Recibidos)
    5
    Tienes varias cosas mejorables, las variables que sabes que son constantes deberias marcarlas como tal, y en el 95% de los casos medir el transcurso del tiempo no es necesario, basta con apuntar el momento inicio y restarlo luego con el momento final. Te paso el código arreglado, falta que completes una parte.

    Código:
    // Pines de los botones
    const int sensor1 = 10;
    const int sensor2 = 9;
    
    // Momento en el que arrancamos el cronometro
    unsigned long horaInicio = 0;
    
    void setup() {
        Serial.begin(9600);
        pinMode(sensor1, INPUT);
        pinMode(sensor2, INPUT);
    }
    void loop() {
        if (digitalRead(sensor1) == HIGH) {
            horaInicio = millis();
        }
        if (digitalRead(sensor2) == HIGH) {
    
            // Comprobamos que antes de pulsar el segundo boton hayan pulsado el primero. Si no lo han hecho se ejecuta el cuerpo del if.
            if(horaInicio == 0){
                //Tu eliges, le mandas un mensaje diciendo como se usa, le insultas por tarugo, lo dejo a tu imaginacion
                return; 
            }
    
            unsigned long horaActual = millis();
            // Tiempo transcurrido en ms
            unsigned long tiempoTranscurrido = horaActual - horaInicio;
     
            /* ..... Resto del codigo, imprimes por serial el tiempoTranscurrido o haces lo que quieras con el. Recuerda que la variable tiempoTranscurrido está en milisegundos. 
             Si quieres forzar a que despues de pulsar el segundo boton sea necesario volver a pulsar el primero para arrancar de nuevo el cronometro, descomenta esta linea. */
           //horaInicio = 0; 
           
        }
    }
    Hace tiempo que no toco nada de Arduino, puede que se me haya escapado algo.

    Saludos

    Edit:
    Cita Iniciado por horticultor Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    Sin tener ni puta idea, yo haría algo así... que igual es una aberración fruto de mi ignorancia
    Para no tener ni puta idea hiciste una aproximación muy buena
    Última edición por DulceLimon; 12/01/2017 a las 14:14 Razón: No había leido todas las respuestas

  18. #18
    ForoParalelo: Miembro Avatar de horticultor
    Registro
    17 May, 13
    Ubicación
    La huerta
    Mensajes
    581
    Me gusta (Dados)
    369
    Me gusta (Recibidos)
    147
    @DulceLimon
    Gracias

    Al final el estilo de programación de muchos lenguajes es similar, tienen sus cosillas de sintaxis y funciones, pero se dan un aire

  19. #19
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    Cita Iniciado por DulceLimon Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    Tienes varias cosas mejorables, las variables que sabes que son constantes deberias marcarlas como tal, y en el 95% de los casos medir el transcurso del tiempo no es necesario, basta con apuntar el momento inicio y restarlo luego con el momento final. Te paso el código arreglado, falta que completes una parte.

    Código:
    // Pines de los botones
    const int sensor1 = 10;
    const int sensor2 = 9;
    
    // Momento en el que arrancamos el cronometro
    unsigned long horaInicio = 0;
    
    void setup() {
        Serial.begin(9600);
        pinMode(sensor1, INPUT);
        pinMode(sensor2, INPUT);
    }
    void loop() {
        if (digitalRead(sensor1) == HIGH) {
            horaInicio = millis();
        }
        if (digitalRead(sensor2) == HIGH) {
    
            // Comprobamos que antes de pulsar el segundo boton hayan pulsado el primero. Si no lo han hecho se ejecuta el cuerpo del if.
            if(horaInicio == 0){
                //Tu eliges, le mandas un mensaje diciendo como se usa, le insultas por tarugo, lo dejo a tu imaginacion
                return; 
            }
    
            unsigned long horaActual = millis();
            // Tiempo transcurrido en ms
            unsigned long tiempoTranscurrido = horaActual - horaInicio;
     
            /* ..... Resto del codigo, imprimes por serial el tiempoTranscurrido o haces lo que quieras con el. Recuerda que la variable tiempoTranscurrido está en milisegundos. 
             Si quieres forzar a que despues de pulsar el segundo boton sea necesario volver a pulsar el primero para arrancar de nuevo el cronometro, descomenta esta linea. */
           //horaInicio = 0; 
           
        }
    }
    Hace tiempo que no toco nada de Arduino, puede que se me haya escapado algo.

    Saludos

    Edit:


    Para no tener ni puta idea hiciste una aproximación muy buena
    madre, haber si mañana le dedico un ratillo haber si descifro tu programa, al final he tenido otro tipo de problemas, si no consigo solucionarlo lo comentare por aqui. Mil gracias!!!!

  20. #20
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    @DulceLimon te invoco para resolver esto que me estoy volviendo loco: (el programa que tengo ahora esta en el post #23.

    Ahora el programa hace lo que yo quiero pero no me lo imprime como yo quiero, bueno como me exigen, me explico; mi idea era que el programa me pusiera en la pantalla los milisegundos que ha tardado desde que paro de pulsar el primer botón hasta que paro de pulsar el segundo pero mi programa lo que hace es imprimirme los instantes de tiempo que el segundo boton esta pulsado, entonces el dato que yo quiero que me imprima es solo el ultimo, he intentado programar un flanco de subida para que solo printe el ultimo pero nada (los botones son normalmente cerrados, van al revés, cuando no estan pulsados el arduino recibe un HIGH). Adjunto fotos y programa.

    Programadores a mi (Programa arduino inside)

    Solo quiero el ultimo dato.

    programa

    int sensor1 = 11;
    int sensor2 = 12;
    int Valorsensor1 = 0;
    int Valorsensor2 = 0;
    int T1=0;
    int T2=0;
    int T=0;
    bool ultima = false;

    void setup() {

    Serial.begin(9600);
    pinMode (sensor1, INPUT);
    pinMode (sensor2, INPUT);

    }

    void loop() {

    Valorsensor1=digitalRead (sensor1);
    Valorsensor2=digitalRead (sensor2);



    if (Valorsensor1 == LOW)
    {
    T1=millis();
    T1=0;
    T2=0;
    T=0;
    }



    if (Valorsensor2 == LOW)
    {
    T2=millis();

    T=T2-T1;
    Serial.print("Tiempo (ms):");
    Serial.print(T);
    Serial.println();

    /*if (T1 == 0){

    Serial.print("No se ha detectado un objeto en el sensor superior.");
    Serial.println();
    return;
    */
    }


    }
    Última edición por PROPELLERMAN; 13/01/2017 a las 11:42

  21. #21
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    Gracias

  22. #22
    ForoParalelo: Miembro Avatar de horticultor
    Registro
    17 May, 13
    Ubicación
    La huerta
    Mensajes
    581
    Me gusta (Dados)
    369
    Me gusta (Recibidos)
    147
    Cita Iniciado por PROPELLERMAN Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    @DulceLimon te invoco para resolver esto que me estoy volviendo loco:

    Ahora el programa hace lo que yo quiero pero no me lo imprime como yo quiero, bueno como me exigen, me explico; mi idea era que el programa me pusiera en la pantalla los milisegundos que ha tardado desde que paro de pulsar el primer botón hasta que paro de pulsar el segundo pero mi programa lo que hace es imprimirme los instantes de tiempo que el segundo boton esta pulsado, entonces el dato que yo quiero que me imprima es solo el ultimo, he intentado programar un flanco de subida para que solo printe el ultimo pero nada (los botones son normalmente cerrados, van al revés, cuando no estan pulsados el arduino recibe un HIGH). Adjunto fotos y programa.

    Programadores a mi (Programa arduino inside)

    Solo quiero el ultimo dato.

    programa

    int sensor1 = 11;
    int sensor2 = 12;
    int Valorsensor1 = 0;
    int Valorsensor2 = 0;
    int T1=0;
    int T2=0;
    int T=0;
    bool ultima = false;

    void setup() {

    Serial.begin(9600);
    pinMode (sensor1, INPUT);
    pinMode (sensor2, INPUT);

    }

    void loop() {

    Valorsensor1=digitalRead (sensor1);
    Valorsensor2=digitalRead (sensor2);



    if (Valorsensor1 == LOW)
    {
    T1=millis();
    T1=0;
    T2=0;
    T=0;
    }



    if (Valorsensor2 == LOW)
    {
    T2=millis();

    T=T2-T1;
    Serial.print("Tiempo (ms):");
    Serial.print(T);
    Serial.println();

    /*if (T1 == 0){

    Serial.print("No se ha detectado un objeto en el sensor superior.");
    Serial.println();
    return;
    */
    }


    }

    ¿Y utilizar un par de variables globales como interruptor?
    Código:
    interruptor1 = 0;
    interruptor2 = 0;
    
    if(sensor1 == low){
        interruptor1=1;
    }
    if(sensor1 == high && interruptor1==1){
        interruptor1 = 0;
        t1 = millis();
    }
    if(sensor2 == low){
        interruptor2 = 1;
    }
    if(sensor2 == high && interruptor2 ==1){
        interruptor2 = 0;
        t2 = millis();
    .....    y el resto del codigo ....
    }

  23. #23
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    @horicultor

    Hora estoy con esto, deberia funcionar pero no se por que no me imprime nada


    #define led LED_BUILTIN //led del arduino
    boolean Actual1=LOW;
    boolean Actual2=LOW;
    boolean Actual3=LOW;
    boolean Actual4=LOW;
    boolean Antigua1=LOW;
    boolean Antigua2=LOW;
    boolean Antigua3=LOW;
    boolean Antigua4=LOW;

    int sensor1 = 11;
    int sensor2 = 12;
    int Valorsensor1 = 0;
    int Valorsensor2 = 0;
    int T1=0;
    int T2=0;
    int T3=0;
    int T4=0;
    int T=0;

    void setup() {

    Serial.begin(9600);
    pinMode (sensor1, INPUT);
    pinMode (sensor2, INPUT);
    pinMode(led,OUTPUT);


    }

    void loop() {

    Valorsensor1=digitalRead (sensor1);
    Valorsensor2=digitalRead (sensor2);


    //SENSOR DE ARRIBA (CONVERSIÓN FLANCOS DE ABAJDA A FLANCOS DE SUBIDA)
    if(Valorsensor1=LOW)
    {
    boolean Actual1=HIGH;
    }
    else
    {
    Actual1= LOW;
    }
    //SENSOR DE ABAJO (CONVERSION FLANCOS DE ABAJDA A SUBIDA)
    if(Valorsensor2=LOW)
    {
    boolean Actual2=HIGH;
    }
    else
    {
    Actual2= LOW;
    }
    //-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-EMPEZAMOS CON PROGRAMA DETECCIÓN DE FLANCOS-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-
    //SENSOR DE ARRIBA FLANCO DE SUBIDA
    if(Actual1==HIGH && Antigua1==LOW)//flanco de subida
    {T1=millis();
    digitalWrite(led,HIGH);
    Antigua1=Actual1;
    }

    //SENSOR DE ARRIBA FLANCO DE BAJADA

    if(Actual1==LOW && Antigua1==HIGH)//flanco de bajada
    {T2=millis();
    Antigua1=Actual1;
    }

    //SENSOR DE ABAJO FLANCO DE SUBIDA
    if(Actual2==HIGH && Antigua2==LOW)//flanco de subida
    {T3=millis();

    Antigua2=Actual2;
    }

    //SENSOR DE ABAJO FLANCO DE BAJADA

    if(Actual1==LOW && Antigua1==HIGH)//flanco de bajada
    {T2=millis();
    digitalWrite(led,LOW);
    Antigua2=Actual2;
    Serial.println("T1=");
    Serial.println(T1);
    Serial.println("T2=");
    Serial.println(T2);
    Serial.println("T3=");
    Serial.println(T3);
    Serial.println("T4=");
    Serial.println(T4);
    }

    }


    Ya me estoy desesperando......

  24. #24
    ForoParalelo: Miembro Avatar de PROPELLERMAN
    Registro
    16 Dec, 16
    Mensajes
    1,261
    Me gusta (Dados)
    513
    Me gusta (Recibidos)
    219
    @horicultor @DulceLimon ya lo he arreglado!!!!!! Os debo una birra, cuando lo acabe (me falta piner unas operaciones ) si quereis posteo!! mil graciaaas

    Enviado desde mi Redmi Note 3 mediante Tapatalk

  25. #25
    ForoParalelo: Miembro Avatar de DulceLimon
    Registro
    13 Dec, 16
    Mensajes
    19
    Me gusta (Dados)
    0
    Me gusta (Recibidos)
    5
    Cita Iniciado por PROPELLERMAN Ver mensaje
    El mensaje está oculto porque el usuario está en tu lista de ignorados.
    @horicultor @DulceLimon ya lo he arreglado!!!!!! Os debo una birra, cuando lo acabe (me falta piner unas operaciones ) si quereis posteo!! mil graciaaas

    Enviado desde mi Redmi Note 3 mediante Tapatalk
    Me alegro de que te funcione, el mérito es de @horicultor que yo acabo de entrar ahora.

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •