05_ENTRADAS /SALIDAS DIGITALES

5.- ENTRADAS/SALIDAS DIGITALES Estos pines son los pines del 0 al 13 de Arduino y se llaman digitales porque sólo pueden manejar valores 0 o 1. Si quieres usar un pin digital, lo primero que tienes que hacer es configurar el modo de trabajo del pin. Ésto se hace siempre en la función setup(). Las instrucciones que se emplean para los pines digitales son: pinMode(pin,[INPUT,OUTPUT]) Configura el modo de trabajo de pin digital, donde "pin" es una variable con el valor correspondiente al número del pin a utilizar y se elige el modo de trabajo. Un pin digital tiene sólo dos modos, OUTPUT (salida) e INPUT (entrada). Si declaras un pin como OUTPUT, sólo podrás usarlo para activarlo, aplicando 5V en el pin, o para desactivarlo, aplicando 0V en el pin. Si configuras el pin como INPUT, sólo podrás usarlo para leer si hay 5V ó 0V en el pin: digitalWrite(pin,valor) 
 Se usa para activar o desactivar un pin digital. Entre paréntesis se debe indicar qué pin modificar, y qué valor darle. Ejemplo: digitalWrite(pin, HIGH); Ésto pondrá el pin en su estado HIGH, proporcionando 5V en él. Si escribes LOW apagarás el pin, dejando el pin a 0V. Ten en cuenta que hasta que se define el estado del pin como HIGH su valor por defecto será LOW. Si miras la placa Arduino, verás que los pines digitales 0 y 1 están marcados como RX y TX. Estos pines están reservados para la comunicación serie y no deben ser usados, ya que pondrán a Arduino en modo de espera hasta que se reciba una señal. digitalRead(pin);
 La instrucción digitalRead(pin) lee el estado de un pin y devuelve HIGH si está a 5V o LOW si hay 0V en él. Para poder usar el valor del estado para algún fin debes guardarlo en una variable:

1/7

05_ENTRADAS /SALIDAS DIGITALES

miVariable = digitalRead(pin); 
 Si quieres realizar una comparación puedes escribir el comando directamente en la sentencia: if (digitalRead(pin)==LOW){ sentencia1; sentencia2; … } Aunque LOW equivale siempre a 0V en una salida digital, en una entrada digital cualquier valor entre 0V y 1.5V se considerará LOW en el comando digitalRead(). Del mismo modo todos los valores entre 3.3V y 5v se considerarán como un valor HIGH. Programa de aplicación de pines configurados como salida digital. Programa02 Realiza una secuencia de encendido y apagado de conectados en los pines digitales 3-4-5, el circuito es el siguiente

led

2/7

05_ENTRADAS /SALIDAS DIGITALES

//prog02_secuencia_v1 //"Curso de Robotica Educativa" //CEP de ALBACETE // Manuel Hidalgo Diaz //Enero 2012 //Programa para realizar una secuencia luminosa con 3 diodos leds //Adjuntar etiqueta con numero de pin digital de Arduino #define ledVerde 3 #define ledAmarillo 4 #define ledRojo 5 //Declaracion de variables int retardo; //tiempo de encendido del led en milisegundos void setup() { //configuracion de los pines digitales como salida pinMode(ledVerde, OUTPUT); pinMode(ledAmarillo, OUTPUT); pinMode(ledRojo, OUTPUT); //inicialmente todos los leds apagados digitalWrite(ledVerde, LOW); digitalWrite(ledAmarillo, LOW); digitalWrite(ledRojo, LOW); //asignacion del tiempo de encendio del led retardo = 2500; } void loop() { //se enciende el led verde durante el tiempo asignado en retardo digitalWrite(ledVerde, HIGH); delay(retardo); //se apaga el led verde y se enciende el led amarillo //durante el tiempo asignado en retardo digitalWrite(ledVerde, LOW); digitalWrite(ledAmarillo, HIGH); delay(retardo); //se apaga el led amarillo y se enciende el led rojo //durante el tiempo asignado en retardo digitalWrite(ledAmarillo, LOW); digitalWrite(ledRojo, HIGH); delay(retardo); //se apaga el led rojo digitalWrite(ledRojo, LOW); }

3/7

05_ENTRADAS /SALIDAS DIGITALES

Programa 03 Programa que realiza una lectura digital por el pin 2 y enciende un led conectado al pin 3. Esquema del circuito:

4/7

05_ENTRADAS /SALIDAS DIGITALES

//"Curso de Robotica Educativa" //CEP de ALBACETE // Manuel Hidalgo Diaz //Enero 2012 //Aqui se utiliza el pin digital 3 en vez del pin digital 13 // La constante no cambia el valor de las variables const int buttonPin = 2; // the number of the pushbutton pin const int ledPin = 3; // the number of the LED pin // variables que cambia de valor: int buttonState = 0; // variable for reading the pushbutton status void setup() { // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); } void loop(){ // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. // if it is, the buttonState is HIGH: if (buttonState == HIGH) { // turn LED on: digitalWrite(ledPin, HIGH); } else { // turn LED off: digitalWrite(ledPin, LOW); } }

5/7

05_ENTRADAS /SALIDAS DIGITALES

Programa 04 Se utiliza el mismo circuito que el programa 03. El programa realiza una lectura digital del pin D2 y cada cuatro pulsaciones enciende el led conectado en el pin D3. /* State change detection (edge detection) */ // this constant won't change: const int buttonPin = 2; // the pin that the pushbutton is attached to const int ledPin = 3; // the pin that the LED is attached to // Variables will change: int buttonPushCounter = 0; // counter for the number of button presses int buttonState = 0; // current state of the button int lastButtonState = 0; // previous state of the button void setup() { // initialize the button pin as a input: pinMode(buttonPin, INPUT); // initialize the LED as an output: pinMode(ledPin, OUTPUT); // initialize serial communication: Serial.begin(9600); } void loop() { // read the pushbutton input pin: buttonState = digitalRead(buttonPin); // compare the buttonState to its previous state if (buttonState != lastButtonState) { // if the state has changed, increment the counter if (buttonState == HIGH) { // if the current state is HIGH then the button // wend from off to on: buttonPushCounter++; Serial.println("on"); Serial.print("number of button pushes: "); Serial.println(buttonPushCounter); } else { // if the current state is LOW then the button // wend from on to off: Serial.println("off"); } } // save the current state as the last state, for next time through the loop lastButtonState = buttonState;

6/7

05_ENTRADAS /SALIDAS DIGITALES

// turns on the LED every four button pushes by checking the modulo of the //button push counter. // the modulo function gives you the remainder of the division of two numbers: if (buttonPushCounter % 4 == 0) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }

7/7