Paso 4: Firmware
Paso 1 se encuentra en su propia función definida por el usuario. Lee en el pin analógico conectado el potenciómetro. Esto resultará en una lectura entre 0-682 (Recuerde que estamos a 3, 3V, no 5). A continuación queremos devolver un valor de 0-11, que representan a los 11 segmentos en nuestro termómetro, al programa principal. Para ello se realiza un número entero en la entrada con el tamaño de un segmento, 62 (682/11 = 62). El uso de división de entero, que utiliza sólo números enteros, no es un error, que permite la función devolver un número entero sin dar el paso extra de redondear el resultado con otra línea de código.
Una vez salida del segmento que la olla está indicando que el código necesita correlacionar ese número a la secuencia binaria que se encenderá el LED correspondiente. Los valores decimales que convierten a las secuencias binarias adecuadas para controlar el 595 se almacenan en una matriz donde su posición en el array convenientemente es la misma que la salida de la olla.
El paso final es hacer los comandos de 595. La orden de operaciones es desactivar la clavija de enganche, prevenir los LED cambien mientras se escriben los nuevos comandos, utilice el cambio de comando para enviar las cadenas binarias mediante el pin de datos, que utiliza el pin de reloj para distinguir pedacitos, y finalmente reactivar la clavija de enganche para los nuevos datos de salida a través de todos los pernos al mismo tiempo.
2 prueba de LED con 74HC595 //by Bwrussell 2013 / / / * * este programa es software libre; Usted puede redistribuirlo y/o modificar * bajo los términos de la GNU General Public License publicada por * la Free Software Foundation; sea versión 2 de la licencia, o * (a su opción) cualquier versión posterior. ** Este programa es distribuido con la esperanza de que sea útil, * pero sin ninguna garantía; ni siquiera la garantía implícita de * comerciabilidad o aptitud para un propósito PARTICULAR. Ver la * GNU General Public License para más detalles. * / //74HC595-Arduino definiciones de pines de interfaz //Pin conectado al ST_CP de 74HC595 int latchPin = 8; PIN conectado a SH_CP de 74HC595 int clockPin = 12; PIN conectado a DS de 74HC595 int dataPin = 11; PIN conectado al pin de barrido de la olla #define potPin A5 //arrays que mantienen los Estados LED para cada posición de la olla, uno para cada 595 int ledStatesA [] = {1,2,6,14,30,62,126,254,254,254,254,254}; int ledStatesB [] = {0,0,0,0,0,0,0,0,1,3,7,15}; Variable Defs int knobPosition; void setup() {//Start serie para debuging propósitos Serial.begin(9600); //set pins a la salida porque se abordan en el bucle principal pinMode (latchPin, salida); pinMode (clockPin, salida); pinMode (dataPin, salida);} void loop() {knobPosition = potRead(); digitalWrite (latchPin, 0); //send datos para el segundo 595 shiftOut (8-11) (dataPin, clockPin, ledStatesB[knobPosition]); //cosend datos a la primera 595 (0-7) shiftOut (dataPin, clockPin, ledStatesA[knobPosition]); //return la clavija de enganche de alta señal de chip eso él //no más tiempo necesita para escuchar la información digitalWrite (latchPin , 1); } anular shiftOut (int myDataPin, int myClockPin, byte myDataOut) {/ / Esto desplaza 8 bits a MSB primero, //on el flanco ascendente del reloj, //clock huelga //internal baja función configuración int i = 0; int pinState; pinMode (myClockPin, salida); pinMode (myDataPin, salida); //clear todo por si acaso a cambio de //prepare inscribirse en poco cambio digitalWrite (myDataPin, 0); digitalWrite (myClockPin, 0); para (me = 7; i > = 0; i--) {digitalWrite (myClockPin , 0); Si (myDataOut & (1 << i)) {pinState = 1;} else {pinState = 0;} //Sets el perno a alta o baja dependiendo de pinState digitalWrite (myDataPin, pinState); registro de cambios de brocas en carrera ascendente del reloj pin digitalWrite (myClockPin, 1); cero el pin de datos después de turno para evitar sangrado por digitalWrite (myDataPin, 0); } //stop cambio digitalWrite (myClockPin, 0); } / / Función para la lectura y segmanting la olla entrada int potRead () {int potRaw = 0; //read en la posición de la olla crudos, con un promedio de más de 5 muestras para (int i = 0; me < 5; i ++) {potRaw = potRaw + analogRead(potPin);} potRaw = potRaw/5; //segment los datos en bruto en 12 segmants igual, devuelve un valor 0-11 int potPosition = potRaw / 60; //Use 60 para 3.3V, 93 de 5V a través de la //send pot el segmento actual al bucle principal retorno potPosition;}
El código fuente está disponible en el archivo .zip (no subir el .ino) y un archivo de texto plano.
Sólo un conector rápido: en algunas de las pruebas iniciales utiliza la aplicación de ArduinoDroid bastante nueva para Android. Es bastante impresionante por lo que es. Permite escribir código de Arduino, con códigos de color y compilar, como en cualquier lugar, en la hora del almuerzo en el trabajo. Con un cable USB adecuado también puede poder y subir a una placa Arduino. Hay algunas otras características que no he utilizado todavía como control de Bluetooth y tal pero para una máquina en movimiento o trabajo de campo esta aplicación es fenomenal. Yo muy recomendable especialmente ya que es totalmente libre (ad apoyado) y sin restricciones. Si lo desea puede pagar un honorario nominal para quitar los anuncios y apoyar el desarrollo. No sé quién es el desarrollador pero rock.