el 07-05-2019 04:48 PM
buenas tardes amigo.
les quiero comentar mi problema, espero y me entiendan, mi proyecto trata de dos sensores que me comparan tres valores detectan el ruido, el que mayor detecten encendera, los sensores en la programacion, utilizo dentro de un case estructure dentro de el comparo 3 veces cada 500 ms en en cual llame cada case pico 1 2 y 3, que al compararlo en el case el que me detecte mas alto del umbral que le estipulo encendera el foco este proceso lo repetira siempre. pero veo que mi diseño el shift no me guarda ningun valor .
mi duda es que otro metodo puedo utilizar , o como puedo mejorarlo , solo deseo que los valores que compare lo guarde y lo compare .
saludos y espero su pronta respuesta ya que estoy algo oxidado desde la universidad. aqui le pongo mi vi de prueba.
¡Resuelto! Ir a solución.
el 07-08-2019 12:30 PM
Hola Eduardo,
No me quedó muy claro el objetivo de tu aplicación. ¿Estás tratando de comparar 3 valores de 3 sensores cada 500 ms?
De ser así, primero que nada, estás haciendo tus comparaciones cada 1000 ms, no cada 500 ms.
Por otra parte, veo que estás utilizando enums con las palabras "Uno", "Dos" y "Tres", sin embargo si entras a revisar los valores correspondientes, están de la siguiente manera:
Items Values
Uno 0
Dos 1
Tres 2
¿Es esto correcto? Por ejemplo en la segunda comparación del primer case structure, tu valor máximo puede llegar hasta dos, ya que sumas 0+1+(Resultado de la medición), por lo tanto NUNCA se va a cumplir tu condición de que la suma sea mayor que dos y el foco estará apagado.
Por otro lado, en la tercera comparación de tu primer case structure, estás haciendo una suma de 2+2+(Resultado de la medición). Por lo tanto, tu comparación SIEMPRE va ser mayor que dos y el foco siempre estará prendido.
En tu segundo case structure se presenta la misma situación que en el primero.
No creo que el problema de tu código esté relacionado a que los "Shift Registers" no te estén guardando valores, sino a lo que te mencioné anteriormente.
Espero haberte ayudado, si tienes dudas solo responde a este mensaje 🙂
el 07-08-2019 12:56 PM
gracias limas por tu rápida respuesta .
disculpa por no explicarlo bien , lo que deseo es cada cada cierto tiempo por ejemplo 500ms , guarde o almacene el valor de cada sensor, son dos sensores de sonido que lo utilizare para saber de que dirección viene una ambulancia(izq o der) por ejemplo ,
500ms --------1
1000ms-------1
1500ms-------0
lo almacene y compare 2 ❤️ == false
así que deseo obtener cada 500ms un valor dentro de 5 seg o 3 seg y se repita o reinicie por ejemplo,
500ms, 1000ms, 1500ms -----sumar 1--1--1 =3, ------comparar 3>=3 ,y volver a detectar y almacenar repetir el procedimiento.
si es mayor enciende foco si no no enciende. así que el sensor que detecte mas valores sabre que viene de tal dirección espero y me entiendas,
así es tienes razón en todo lo que dices , te entiendo no hace lo que deseo, y esta mal mi diseño.
que otra idea me recomendarías o otra estructura utilizar para poder almacenar valores del sensor y luego compararlas, gracias y saludos.
el 07-08-2019 01:07 PM
Te recomiendo cambiar los Enums por constantes numéricas para que así elimines el problema de que los valores estén mal relacionados. Por ejemplo: En vez de poner un "Uno" en el Enum y mandarlo al Shift Register, pon una constante numérica, un uno, de tipo U16. Haz lo mismo para el 2 y el 3. De esa manera eliminarás el desfase y podrás realizar las sumas correspondientes 😉
el 07-08-2019 01:50 PM
orale, asi es empieza de 1 , nunca me imagine con algo tan facil se resolviera ese problema , rayos!
y una ultima pregunta limas disculpa, como puedo almacenar los valores , ya vi mi error que el compound aritmetic solo almacena los valores una vez y luego empieza de nuevo , no guarda los 3 valores que deseo para luego sumarlos y compararlos, que procederia en ese caso.
se podria utilizar la estructura Condition Verdad?
el 07-08-2019 03:20 PM
Lo que se me ocurre que puedes hacer, es utilizar shift registers. El resultado de Compound Arithmetic lo mandas a un shift register. Y el shift register del lado izquierdo lo conectas al mismo Compound Arithmetic. De esa manera vas a ir almacenando y sumando los valores anteriores con los actuales. ¿Esa era tu duda?
Si logré ayudarte, no olvides marcar el comentario como solución 🙂
el 07-08-2019 06:25 PM
muchas gracias limas por tu rapida respuesta.
gracias a tu idea se me ocurrio , que en el mismo compound aritmetic agregar una variable mas que es la del mismo shift register del sensor, el cual me guarda los valores, y se repite el ciclo que como deseo y esta sensando tres valores cada 1500 ms,
te lo agradezco mucho que tenia batallando como 3 semanas muchas gracias a ti y a la comunidad.
saludos de mexico y mucho exito.
lml