Hola, acabo de iniciarme con arduino en un proyecto en el que quiero hacer un reloj y a su vez utilizar un(varios) integrado bcd to decimal decoder. El cual tiene 4 entradas y 10 salidas, si en las entradas le doy 0001 activa la salida 1, 0010 la 2, ...
Partimos de la base que no tengo ni idea de programar, todo es nuevo para mi. Por ahora mas menos voy entendiendo los programas que he estado viendo para conseguir realizar el proyecto.
Explico como llevo el proyecto por encima y planteo donde estoy atascado.
Para saber la hora, fecha y temperatura utilizo un ds3231, he conseguido, con mucho calentamiento de coco, poder modificar la hora con pulsadores y me apoyo de una pantalla lcd 16, 2 para mostrar los resultados.
Integrado similar al que voy a utilizar, aun no tengo claro cual pero el funcionamiento es el mismo., eso creo.
También he separado en variables las decenas y unidades de horas, minutos, etc. Por ejemplo supongamos que son las 23h, he separado en una variable el 2 y en otra el 3.
Ahora viene mi problema.
Ahora debo de hacer el programa que controla los integrados.
Como he comentado he separado en variables los datos que necesito entregar al integrado pero aun en decimal.
Como no tengo ni idea todas las pruebas que he hecho además de salirme mal me dan valores no esperados en el puerto serie.
He probado con array pero como tampoco tengo claro el uso de las variables... pues eso.
int miarray[]{0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001};
int DecHor = 3;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print(miarray[DecHor]);
}
Esto es lo que he probado pero en el puerto serie yo esperaba un "0011" y no, me da(si no recuerdo mal, porque ya he hecho varias cosas y no recuerdo exactamente) un 68. Por ejemplo si en Serial.print añado BIN, si que me da el valor en binario pero de ese 68.
Tambien he probado con bitRead(DecHor, 0). Y me debería dar un 1 pero me da los mismos resultados que con el array y sino no me daba el esperado.
Todo esto lo hago pensando que podre cambiar el estado de varias salidas simplificando con ese valor binario.
Se que puedo utilizar la función if pero me parece una barbaridad.
if(DecHor == 0){
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if(DecHor == 1){
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
}
...
Después de todo el tostón, si me he explicado correctamente, a ver si me puede ayudar alguien. Seguro que se puede hacer algo mas eficiente y menos código de programa. Todo lo que he hecho ha sido sin tener la mas mínima idea, lo que he planteado a sido lo que en un principio creía tenia que hacer.
También añadir que he buscado por la red pero no he encontrado nada o no he sabido buscar.
Gracias, un saludo.