Tengo una placa propia basada en Leonardo con atmel32u4. Uso un display led de 3 digites 7 segment con la librería SevSeg. Esta placa incluye también un convertidor AD de 18 bites MCP3424 con la librería MCP342X. Cuando la conversión está en curso, el display se queda blanco parpadeando, porque durante este tiempo no refresca el programa al display. Cómo podría incluir a la librería MCP342X que durante el tiempo de espera refresca al display?
Gracias de antemano por todas las respuestas.
Hola gatul,
Gracias por contestar. Resulta tengo la solución. Por suerte se puede usar a las funciones una por una en la librería MCP342X. Así que primero mando una petición al AD, luego en un while espero el resultado, incorporado al bucle el refresco de la pantalla.
El código:
Donde esta la expresión que le envía algo a los Display 7 segmentos.
Cuando publiques un código, publicalo completo no parcial.
Nosotros necesitamos ver toda la idea no la que consideras tu responsable del problema. Si lo fuera seguramente encontrarías la solución y no es el caso.
No edites el post incial publica en una nueva respuesta de tu parte.
Aca sevseg mostrará un entero
sevseg.setNumber(var, 1);
no veo en tu código parcial esto. Por lo tanto es logico que se quede parpadeando.
while(!valueCh1 > 0);
Como crees que funciona esto?
! una variable que supongo es double o float no tiene la respuesta que esperas.
Si lo que esperas es que valueCh1 sea > 0 pon eso nada mas.
Hola Surbyte,
Si tienes un mal día, lo siento.
El código cargado es una solución a la question que hecho. En cuanto alguien es programador, puede ver la idea y eso es suficiente. El código es muy largo, está lleno con cosas que no tienen que ver nada con esta problema. Para tu información un AD convertidor de 18bits tiene una salida long. Y creeme, funciona perfectamente.
Gracias por tu respuesta.
el compilador asigna 0 para valueCh1 >= 1 y 1 cuando valueCh1 = 0. Dado que ! (not) es una operación lógica, todo valor distinto de 0 se considera true y al negarlo da false, lo que es lo mismo que 0.
O sea, no está evaluando
!(valueCh1 > 0)
(que imagino era tu intención) sino
!(valueCh1) > 0
Aclarado el punto, es lo mismo hacer
while(valueCh1 == 0);
que no se presta a confusiones.
Saludos
PD: Para ser sincero, te funciona porque es C de Arduino, en otros lenguajes te hubiese generado un error
Tienes toda la razón. Para mi también era raro. Lógicamente pensé que necesito que salga del bucle cuando el valor es distinto del 0. Pero con (valueCh1 >0) consigo al revés. Por eso lo negé y está. Yo tampco esperaba que funcione, pero es lo que hay. Sé muy bien que es una solución fea, pero por jugar vale la pena.