Arduino intermedio: Entradas y salidas (1 / 9 paso)

Paso 1: Abrir y cerrar sin Delay()

Hasta ahora que hemos estado usando la función delay() para poner en pausa el sketch de Arduino momentáneamente así un poco de tiempo puede pasar entre dos comandos de Arduino. En el bosquejo de parpadeo de LED, utilizamos delay() para establecer la cantidad de tiempo que se encendió el Arduino y la cantidad de tiempo que fue dado vuelta apagado:

digitalWrite (ledPin, HIGH); //turn LED en
Delay(1000); / / espera de 1000 milisegundos (1 segundo)
digitalWrite (ledPin, LOW); //turn LED apagado
Delay (1000); //wait un segundo

A veces usar delay() no es una buena opción porque el Arduino no puede realizar ninguna tarea secundaria mientras ocurre la demora. Imagina que queríamos parpadear un LED y detectar una pulsación en el mismo tiempo usando delay():

Loop() {}

digitalWrite (ledPin, HIGH);
Delay(1000);
digitalWrite (ledPin, LOW);
Delay(1000);
buttonState booleano = digitalRead(7);

}

En el código anterior, estamos sólo midiendo el botón una vez cada dos segundos, así que puede tomar hasta dos segundos antes de que se detecta una pulsación y prensas muy breves pueden no siempre Haz detectados en todos.

Millis() nos da control sobre cuando eventos suceden sin poner pausa en el bosquejo. Cada vez que llamamos millis() en un sketch de Arduino, devuelve el número de milisegundos desde el Arduino se activó.

Ejecute el siguiente código para ver cómo funciona millis():

Aquí es cómo utilizar millis() a parpadear un LED sin utilizar delay().

El bosquejo anterior presenta algunas novedades:

sin firmar largo es otro tipo de datos (hasta ahora hemos visto int y boolean). Sin firmar largo es igual que int, pero más grande, voy a explicar... Cada tipo de datos requiere una cierta cantidad de espacio en la memoria de Arduino, y la cantidad de espacio que libera el Arduino para una variable dada dicta el min y max valores que la variable puede almacenar. Por ejemplo, el int puede ir desde-32,768 hasta 32.767, si has intentado hacer algo como esto:

myVariable int = 100.000;

Termina con un error muy extraño en tu código. Esto puede parecer como un rango arbitrario, pero viene del hecho de que int requiere 16 bits de espacio en la memoria de Arduino, y con 16 bits de binario puede almacenar números desde 0 hasta (2 ^ 16 - 1) = 65535. Pero la gente decidió que int debe ser capaz de almacenar números negativos también, así que uno de los bits en el número de 16 bits se utiliza para almacenar el signo (positivo o negativo) y los 15 bits restantes almacenar el valor: 2 ^ 15 = 32768. Incluyendo 0, terminamos con la gama-32,768 a 32.767. Otro tipo de datos llamado un insigne int no almacena el signo, por lo que obtiene el intervalo de 0 a 65535 que calculé antes, pero no puede almacenar un número negativo en un insigne int.

Cuando necesitamos utilizar números mayores que 65535 o menos-32768, utilizamos un tipo de datos llamado largo. Durante mucho tiempo se asigna 32 bits de espacio en la memoria de Arduino. 2 ^ 32 = 4,294,967,296, este centro alrededor de cero para obtener una gama de:-2,147,483,648 a 2,147,483,647. Sin firmar largo tiene, como unsigned int siempre es positivo, así que van desde 0 hasta 4,294,967,295.

Hay ningún tipo de datos más grande para almacenar números de largo, así que si usted necesita almacenar un número mayor de 4,294,967,295, tendrás que subir con una manera diferente de almacenar (tal vez los primeros 9 bits en un número y los nueve últimos en otro?). Esta limitación tiene algunas consecuencias interesantes para la función millis(). Millis devuelve sin firmar longs, y continuamente está contando en milisegundos, millis() realmente volverá atrás a cero una vez se alcanza:

4,294,967,295 ms

= 4.294, 967seconds

= días 49.71

Si usas millis() y usted planea guardar que proyecto correr durante largos períodos de tiempo sin nunca apagar o reiniciar, deben ser conscientes de ello.

Un comentario más acerca de tipos de datos: podríamos haber sido con de largo o sin firmar largo todo este tiempo cuando declaramos números pin u otras variables en los dibujos de ejemplo hasta ahora, pero en general es una buena idea para utilizar los datos más pequeños tipo posibles para una variable, de esa manera usted tiene un montón de espacio en la memoria de Arduino para otras cosas. En Arduino, longs se utilizan raramente, pero millis() es un buen ejemplo de cuando vienen prácticos.

Volviendo al bosquejo, la idea general es almacenar la última vez que se enciende el LED de encendido o apagado y comparar con la hora devuelta por millis(). Una vez que la diferencia entre esos dos veces mayor que un intervalo, sabes que es tiempo para cambiar el LED nuevo. Para ello he configurado algunas nuevas variables de almacenamiento de información:

int ledState = bajo; //current estado del LED
timeOfLastLedEvent largo sin signo = 0; //the última vez actualizó el LED
intervalON int = 1000; //how mucho queremos que el LED permanezca
int intervalOFF = 500; //how mucho queremos que el LED permanezca apagado

En el loop() hay un montón de lógica que comprueba ver si da tiempo ha pasado y si es así, cambia el LED, actualiza la variable "timeOfLastLedEvent" y cambia el estado almacenado de lo LED. La lógica se repite dos veces, una vez que para el caso de que el LED es alta y una vez para el caso de que el LED es bajo, te repito el caso baja a continuación:

Si (currentMillis - timeOfLastLedEvent > intervalOFF) {//and suficiente tiempo ha pasado

digitalWrite (ledPin, HIGH); //turn en
ledState = alto; //store su estado actual
timeOfLastLedEvent = currentMillis; //update el tiempo de este nuevo evento

}

currentMillis es un sin firmar largo que representa la hora que se actualiza cada vez que comienza la función loop() de Arduino. (currentMillis - timeOfLastLedEvent) da el seno del tiempo estado de LED ultima fue cambiado, comparamos esto contra el intervalOFF para ver si es momento de apagar el LED, si no es el Arduino mantendrá la actualización currentMillis y verificar de nuevo hasta el momento.

Artículos Relacionados

Luces activadas por la entrada y salida

Luces activadas por la entrada y salida

Este proyecto es un prototipo. He construido un proyecto que utiliza dos sensores ultrasónicos para monitor de entrada y salida de una persona a través de un pasillo o una puerta. el sentido de dos sensores ultrasónicos para cambios en la distancia.
Entrada y salida nudo y lazo pulsera

Entrada y salida nudo y lazo pulsera

este tutorial le mostrará cómo hacer un brazalete de paracord de estilo "entrada y salida". Hasta que me imagino que esto no es realmente el comienzo... vaya al paso 1 para el comienzo mostrar cómo se hace la parte interior.
Arduino Due entrada guitarra de ADC y DAC salida mezclador

Arduino Due entrada guitarra de ADC y DAC salida mezclador

esta es la secuela a mi instructable que ofrece un circuito de entrada de señales generadas por una guitarra en el arduino due ADC.[Actualizado el 26 de enero de 2014 - el esquema ha cambiado... ver notas a continuación.]Este instructivo describe el
Arduino: Envío de salida Digital

Arduino: Envío de salida Digital

En esta lección usted será conectar un Arduino con un solo LED y una resistencia de 560 Ohm entonces código y cargar el firmware que escribe secuencial comandos para hacer el parpadeo del LED de encendido/apagado. Se trata de 'Hola, mundo' de Arduino
Realmente simple interruptor audio (2 entradas, 1 salida)

Realmente simple interruptor audio (2 entradas, 1 salida)

este es un proyecto desarrollado durante el "Taller de Inventos" (AKA agosto construcción de noche), patrocinado por Instructables y Jameco, que algunos de los componentes de este instructable.Es un caso que tiene una entrada de audio y dos sali
Vernier sensores y Arduino (o Teensy) para registro de datos

Vernier sensores y Arduino (o Teensy) para registro de datos

veamos cómo recopilar datos de sensores educativos Vernier con una Junta de desarrollo de microcontrolador Arduino-compatible.Si sólo necesita una sonda con un equipo de interfaz y quieres que todo funcione, probablemente debe comprar un Vernier Go!
Wii Nunchuck como controlador de propósito general a través de la placa Arduino

Wii Nunchuck como controlador de propósito general a través de la placa Arduino

Fondo:He hecho un uno mismo-equilibrio monopatín eléctrico que se dirige con un Wii Nunchuck usando el joystick de pulgar en la parte superior o por inclinación izquierda o derecha, dependiendo de cuál de los dos botones en el extremo están siendo pr
Fundamentos de Arduino 101

Fundamentos de Arduino 101

El propósito de este instructable es introducir el bosquejo escrito fundamentos a los recién llegados al mundo de Arduino. Se pretende ser una guía de principiantes que incluye explicación detallada de las declaraciones básicas y funciones. La mayorí
El olor del éxito

El olor del éxito

el olor del éxito es un objeto conectado de Internet que emite un soplo de perfume cada vez que te un retweet.Hackear un apagado el estante ambientador automático, conectado a un Arduino y programado para ser controlada a través de procesamiento. El
Cómo conectar un Sensor de entrada de Audio y salida

Cómo conectar un Sensor de entrada de Audio y salida

un sensor es uno de un componente básico para la captura de medio físico. Usted puede conseguir el cambio de luz con la fotocélula CDS, usted puede medir el espacio con un sensor de distancia y puede captar su movimiento con un acelerómetro.Ya hay va
Cómo conectar un pulsador con entrada de Audio y salida de

Cómo conectar un pulsador con entrada de Audio y salida de

un botón es uno de un componente básico para la captura de su acción. Dinámicamente puede presionar un botón para hacer algo.Ya hay varias forma de usar los botones en sus proyectos (e.g. hacking ratón y teclado o Arduino, gainer, MCK). Esta forma al
Entradas extras para Arduino con un teclado

Entradas extras para Arduino con un teclado

El Arduino es quizás la cosa más fresca en la tierra. Hay muchos tipos, el Uno, la Mega, el Pro, Pro Mini, etc. etc..Pero una cosa que a menudo puede ser un problema es que sólo tienes un número limitado de entradas y salidas. Hay muchas soluciones p
Plugduino - controlador de salida de 120 voltios basados en Arduino

Plugduino - controlador de salida de 120 voltios basados en Arduino

dar su Arduino 120 voltios patada en los pantalones!Arduino es una gran herramienta para todo aquel interesado en aprender programación de microcontrolador, pero después de parpadear un LED, ¿cuál es siguiente? Este proyecto permite su Arduino aparat
Cómo conectar un Fader con entrada de Audio y salida de

Cómo conectar un Fader con entrada de Audio y salida de

un fader es un componente básico para la mesa de mezclas. Puede controlar dinámicamente su origen con el movimiento de un fader.Ya hay varias forma de usar los botones en sus proyectos (e.g. hacking ratón y teclado o Arduino, gainer, MCK). Esta forma