Академический Документы
Профессиональный Документы
Культура Документы
2
1.- Parpadeo de un LED en el pin 10:
Sin variables: void setup() { pinMode(10,OUTPUT); } void loop() { digitalWrite(10,HIGH); delay(300); digitalWrite(10,LOW); delay(1500); }
// // // //
Se enva un nivel lgico 1 (5V), al pin 10 Retardo de 300 ms Se enva un nivel lgico 0 (0V), al pin 10 Retardo de 1500 ms
Nota.- En el primer diagrama digitalWrite(10,HIGH) enciende al LED y en el segundo diagrama apaga al LED.
Con variables: int led = 10; int retardo1 = 300; int retardo2 = 1500; void setup() { pinMode(led,OUTPUT); } void loop() { digitalWrite(led,HIGH); delay(retardo1); digitalWrite(led,LOW); delay(retardo2); }
3
2.- Parpadeo de un LED en el pin 10, usando el monitor serial:
int led = 10; int retardo1 = 300; int retardo2 = 1500; void setup() { pinMode(led,OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(led,HIGH); Serial.println("ON"); delay(retardo1); digitalWrite(led,LOW); Serial.println("OFF"); delay(retardo2); }
El diagrama en Proteus:
Nota.-
del
monitor
serie,
se
inicia
desde
el
men
En Proteus, para simular la PC con conexin serial, se usa el objeto VIRTUAL TERMINAL.
4
2b) Se envan datos (valores) a la PC
int led = 10; int retardo = 1000; int estado = 1; void setup() { pinMode(led,OUTPUT); Serial.begin(9600); } void loop() { Serial.print(estado); digitalWrite(led,estado); delay(retardo); estado=!estado; }
El diagrama en Proteus:
5
2c) Se reciben datos (caracteres) de la PC
int led = 10; char caracter; void setup() { pinMode(led,OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available()>0) { caracter = toupper(Serial.read()); Serial.println(caracter); // Eco if(caracter=='E') { digitalWrite(led,HIGH); Serial.println("Encendido"); } if (caracter=='A') { digitalWrite(led,LOW); Serial.println("Apagado"); } } }
El diagrama en Proteus:
6
3.- Se enciende el LED del pin 10 con pulsador del pin 6 y se apaga con pulsador del pin 7:
int Sw6 = 6; int Sw7 = 7; int Led = 10; void setup() { pinMode(Sw6,INPUT); digitalWrite(Sw6,HIGH); pinMode(Sw7,INPUT); digitalWrite(Sw7,HIGH); pinMode(Led,OUTPUT); digitalWrite(Led,LOW); } void loop() { if(digitalRead(Sw6)==0) digitalWrite(Led,HIGH); if(digitalRead(Sw7)==0) digitalWrite(Led,LOW); }
// // // // // //
pin 6 como entrada Activa resistor interno 20k pin 7 como entrada Activa resistor interno 20k pin 10 como salida valor inicial del pin 10
7
TAREA.Modificar el anterior programa, de tal manera que mientras se presione simultneamente los pulsadores conectados a los pines 6 y 7 de la placa Arduino UNO, parpadee el LED cada 100 ms.
SOLUCIN.-
int Sw6 = 6; int Sw7 = 7; int Led = 10; void setup() { pinMode(Sw6,INPUT_PULLUP); // pin 6 como entrada y se activa resistor interno 20k pinMode(Sw7,INPUT_PULLUP); // pin 7 como entrada y se activa resistor interno 20k pinMode(Led,OUTPUT); digitalWrite(Led,LOW); } void loop() { if(digitalRead(Sw6)==0 && digitalRead(Sw7)==1) digitalWrite(Led,HIGH); if(digitalRead(Sw7)==0 && digitalRead(Sw6)==1) digitalWrite(Led,LOW); if(digitalRead(Sw6)==0 && digitalRead(Sw7)==0) { digitalWrite(Led,HIGH); delay(100); digitalWrite(Led,LOW); delay(100); } } // pin 10 como salida // valor inicial del pin 10
8
4.- Se enciende y apaga el LED del pin 10 con el pulsador en pin 6: 4a) Se conmuta al pulsar y se usa la funcin delay()
int Sw6 = 6; int Led = 10; void setup() { pinMode(Sw6,INPUT_PULLUP); // pin 6 entrada y pullup ON pinMode(Led,OUTPUT); // pin 10 salida digitalWrite(Led,LOW); // valor inicial del Led: Apagado } void loop() { if(digitalRead(Sw6)==0) { delay(20); if(digitalRead(Led)==0) digitalWrite(Led,HIGH); else digitalWrite(Led,LOW); while(digitalRead(Sw6)==0) {} delay(20); } }
9
4b) Se conmuta al soltar y se usa la funcin delay() int Sw6 = 6; int Led = 10; void setup() { pinMode(Sw6,INPUT_PULLUP); // pin 6 entrada y pullup ON pinMode(Led,OUTPUT); // pin 10 salida digitalWrite(Led,LOW); // valor inicial del Led: Apagado } void loop() { if(digitalRead(Sw6)==0) { delay(20); while(digitalRead(Sw6)==0) {} if(digitalRead(Led)==0) digitalWrite(Led,HIGH); else digitalWrite(Led,LOW); delay(20); } }
int Sw6 = 6; int Led = 10; void setup() { pinMode(Sw6,INPUT_PULLUP); // pin 6 entrada y pullup ON pinMode(Led,OUTPUT); // pin 10 salida digitalWrite(Led,LOW); // valor inicial del Led: Apagado } void loop() { if(!digitalRead(Sw6)) { delay(20); digitalWrite(Led,!digitalRead(Led)); while(digitalRead(Sw6)==0) {} delay(20); } }
10
4d) Se conmuta al soltar, se usa la funcin delay() y el operador booleano ! int Sw6 = 6; int Led = 10; void setup() { pinMode(Sw6,INPUT_PULLUP); // pin 6 entrada y pullup ON pinMode(Led,OUTPUT); // pin 10 salida digitalWrite(Led,LOW); // valor inicial del Led: Apagado } void loop() { if(!digitalRead(Sw6)) { delay(20); while(!digitalRead(Sw6)) {} digitalWrite(Led,!digitalRead(Led)); delay(20); } }
5.- Se incrementa un contador con el pulsador en pin 6, tomando una muestra cada ms: 5a) Se incrementa al presionar el pulsador
11
int sw6 = 6; int Led = 10; int contador = 0; void setup() { Serial.begin(9600); pinMode(sw6,INPUT_PULLUP); } void loop() { int db_cnt; for (db_cnt = 0; db_cnt <= 10; db_cnt++) { delay(1); if (digitalRead(sw6)== 1) db_cnt = 0; // restart count } // hasta contador++; Serial.println(contador); for (db_cnt = 0; db_cnt <= 10; db_cnt++) { delay(1); if (digitalRead(sw6)== 0) db_cnt = 0; } // hasta } 5b) Se incrementa al soltar el pulsador int sw6 = 6; int Led = 10; int contador = 0; void setup() { Serial.begin(9600); pinMode(sw6,INPUT); digitalWrite(sw6,HIGH); }
// contador rebote // se espera a que sw6=0 (pulsado) // retardo de 1 ms // si hay rebote (sw6=1) // contador rebote a cero que sw6 est en 0, durante 10 lecturas sucesivas // se incrementa contador // se muestra en pantalla // se espera a que sw6=1 (soltado) // retardo de 1 ms // si hay rebote (sw6=0) // contador rebote a cero que sw6 est en 1, durante 10 lecturas sucesivas
void loop() { int db_cnt; // contador rebote for (db_cnt = 0; db_cnt <= 10; db_cnt++) { delay(1); if (digitalRead(sw6)== 1) db_cnt = 0; // restart count } // hasta for (db_cnt = 0; db_cnt <= 10; db_cnt++) { delay(1); if (digitalRead(sw6)== 0)
// se espera a que sw6=0 (pulsado) // retardo de 1 ms // si hay rebote (sw6=1) // contador rebote a cero que sw6 est en 0, durante 10 lecturas sucesivas // se espera a que sw6=1 (soltado) // retardo de 1 ms // si hay rebote (sw6=0)
12
db_cnt = 0; } contador++; Serial.println(contador); } // contador rebote a cero // hasta que sw6 est en 1, durante 10 lecturas sucesivas // se incrementa contador // se muestra en pantalla
MDULO BLUETOOTH
Instalar el driver del conversor USB/USART (disponible como archivo ejecutable en http://www.ftdichip.com/Drivers/VCP.htm); luego, conectar el conversor a un puerto USB de la PC. Verificar en el Administrador de Dispositivos, en Puertos (COM y LPT), el nmero del puerto virtual COM del conversor, por ejemplo: El driver del conversor USB/USART, tambin https://www.sugarsync.com/pf/D8070664_871_712817605. se lo puede descargar de
A continuacin, conectar el mdulo bluetooth HC-06 al conversor USB/USART y sin emparejarlo con el mdulo bluetooth de la PC, proceder a verificar los comandos AT, usando el software de comunicacin serial Tera Term (descargar en sus versiones para instalar y portable de http://ttssh2.sourceforge.jp/ https://www.sugarsync.com/pf/D8070664_871_712849502).
13
CONEXIN COMPUTADORA CONVERSOR USB/USART Y MDULO BLUETOOTH
COMANDOS AT Los parmetros por defecto del mdulo bluetooth HC-06 son: Baud rate:9600N81, ID: linvor, Password:1234 AT+BAUD4 AT+NAMElinvor AT+PIN1234 1.- Prueba de comunicacin: Enviar: AT Respuesta: OK
1---------1200 2---------2400 3---------4800 4---------9600 (Por Defecto) 5---------19200 6---------38400 7---------57600 8---------115200 9---------230400 A---------460800 B---------921600 C---------1382400 3.- Cambiar el nombre del mdulo bluetooth: Enviar: AT+NAMEnombre Respuesta: OKnombre
nombre est limitado a 20 caracteres 4.- Cambiar la contrasea de emparejamiento del mdulo bluetooth: Enviar: AT+PINxxxx Respuesta: OKsetpin
14
Nota.- No existe el modelo del mdulo bluetooth en Proteus v7.1 // Conexin PC y ARDUINO+BLUETOOTH int Led = 10; int i=0; char caracter; void setup() { pinMode(Led,OUTPUT); Serial.begin(9600); } void loop() { // Mientras el puerto serie del mdulo bluetooth est disponible while (Serial.available()) { // Guardamos en la variable dato el carcter (mayscula), ledo por el modulo bluetooth caracter= toupper(Serial.read()); Serial.println(caracter); // Eco // Comprobamos el carcter switch(caracter) { // Si recibimos una 'E' encendemos el led 10 y enviamos para mostrar // en Teraterm Led encendido
15
case 'E': { digitalWrite(Led,HIGH); Serial.println("Led encendido"); break; } // Si recibimos una 'A' apagamos el led 10 y enviamos para mostrar // en Teraterm Led apagado case 'A': { digitalWrite(Led,LOW); Serial.println("Led apagado"); break; } // Si recibimos una 'I' encendemos y apagamos el led siete veces // y mostramos en Teraterm Led intermitente case 'I': { for (i=0; i <= 7; i++) { digitalWrite(Led,HIGH); delay(300); digitalWrite(Led,LOW); delay(300); } Serial.println("Led intermitente"); break; } } } } Nota.- Con la funcin Serial.println(caracter); se produce el Eco en la ventana del Tera Term.
16
7.- Contador ascendente y descendente con dos pulsadores. Pantalla LCD 16x2: Librera: http://arduino.cc/es/Reference/LiquidCrystal
//////////////////////////////////////////////////////////////////////////////////////////// /// En este ejemplo leemos dos pulsadores para aumentar y disminuir una variable. /// En todo momento, visualizaremos en el LCD, el estado de los pulsadores, como el valor /// de la variable. //////////////////////////////////////////////////////////////////////////////////////////// int contador=0; // Variable que sw1 aumenta y sw2 disminuye
int pin_sw1=6; long int tiempo_inicial_1=0; // guarda el contenido de millis() en la lectura de sw1 boolean Lectura_pin_sw1_realizada=false; // Variable para saber si ya se ha ledo sw1 int pin_sw2=7; long int tiempo_inicial_2=0; // guarda el contenido de millis() en la lectura de sw2 boolean Lectura_pin_sw2_realizada=false; // Variable para saber si ya se ha ledo sw2 int estado_sw1=1; int estado_sw2=1; // almacena el estado del pulsador 1. Pulsado-->0 // almacena el estado del pulsador 2. Pulsado-->0 Sin pulsar-->1. Sin pulsar-->1.
#include <LiquidCrystal.h> //incluimos la librera LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//inicializamos los pines void setup() { pinMode(pin_sw1,INPUT_PULLUP); // configurado como entrada y Pullup ON pinMode(pin_sw2, INPUT_PULLUP);// configurado como entrada y Pullup ON lcd.begin(16,2); lcd.clear(); // Funcin que borra todo el el LCD. lcd.setCursor(1,0); // cursor en la columna 1 - fila 0. lcd.print("SW1=");
17
lcd.setCursor(9,0);; lcd.print("SW2="); lcd.setCursor(1,1); lcd.print("Variable="); // cursor en la columna 9 - fila 0. // cursor en la columna 1 - fila 1.
} void loop() { ///Leemos el pulsador 1 if(digitalRead(pin_sw1)==0 && Lectura_pin_sw1_realizada==false) { Lectura_pin_sw1_realizada=true; tiempo_inicial_1=millis(); estado_sw1=0; } if(millis()-tiempo_inicial_1 > 20 && Lectura_pin_sw1_realizada==true) { tiempo_inicial_1=0; Lectura_pin_sw1_realizada=false; if(digitalRead(pin_sw1)==HIGH) { contador++; estado_sw1=1; } } ///Leemos el pulsador 2 if(digitalRead(pin_sw2)==0 && Lectura_pin_sw2_realizada==false) { Lectura_pin_sw2_realizada=true; tiempo_inicial_2=millis(); estado_sw2=0; } if(millis()-tiempo_inicial_2 > 20 && Lectura_pin_sw2_realizada==true) { tiempo_inicial_2=0; Lectura_pin_sw2_realizada=false; if(digitalRead(pin_sw2)==HIGH) { contador--; estado_sw2=1; } } Actualizar_LCD(); // Funcin que muestra informacin por el LCD. } void Actualizar_LCD() { lcd.setCursor(5,0); lcd.print(estado_sw1); lcd.setCursor(13,0);; lcd.print(estado_sw2); lcd.setCursor(10,1); lcd.print(contador); lcd.print(" "); }
// cursor en la posicin columna 5 - fila 0. // se muestra el valor de una variable entera. // cursor en la posicin columna 13 - fila 0. // se muestra el valor de una variable entera. // cursor en la posicin columna 10 - fila 1. // se muestra la variable contador. // espacios en blanco.
18
8.- Men con funcin y modo. Se usa librera Bounce, para rebote de contactos:
19
#include <Bounce.h> #include <LiquidCrystal.h> int led = 10; int sw6_funcion = 6; int sw7_modo = 7;
boolean ledValue=LOW; Bounce entrada6 = Bounce(sw6_funcion,20); Bounce entrada7 = Bounce(sw7_modo,20); int funcion = 0; int modo = 0; // funcin // modo
// tiempo de 20 ms // tiempo de 20 ms
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //inicializamos los pines void setup() { pinMode(sw6_funcion,INPUT_PULLUP); pinMode(sw7_modo,INPUT_PULLUP); pinMode(led,OUTPUT); lcd.begin(16,2); lcd.clear(); }
// configuramos como entrada el pin del pulsador 6. // configuramos como entrada el pin del pulsador 7. // Funcin que borra todo el el LCD.
20
void loop() { ///Leemos el pulsador 6 if(entrada6.update()) { if(entrada6.read() == LOW) { funcion++; if(funcion > 3) funcion = 0; } } ///Leemos el pulsador 7 if(entrada7.update()) { if(entrada7.read() == LOW) { modo++; { if(modo > 1) { modo = 0; } } } } if (funcion == 0) { modo = 0; lcd.setCursor(1,0); lcd.print(" MENU lcd.setCursor(1,1); lcd.print(" }
"); ");
if (funcion == 1) { switch(modo) { case 0: lcd.setCursor(1,0); lcd.print(" LED ON OFF lcd.setCursor(1,1); lcd.print(" break; case 1: fun_1(); funcion = 0; break; } } if (funcion == 2) { switch(modo) { case 0: lcd.setCursor(1,0); lcd.print(" FUNCION_2 lcd.setCursor(1,1); lcd.print(" break; case 1: fun_2();
"); ");
"); ");
21
funcion = 0; break; } } if (funcion == 3) { switch(modo) { case 0: lcd.setCursor(1,0); lcd.print(" FUNCION_3 lcd.setCursor(1,1); lcd.print(" break; case 1: fun_3(); funcion = 0; break; } } } void fun_1() { int i = 0; for(i=0; i<=4; i++) { lcd.setCursor(8,1); lcd.print(i); digitalWrite(led,HIGH); delay(250); digitalWrite(led,LOW); delay(250); } } void fun_2() { lcd.setCursor(1,0); lcd.print(" CODIGO fun_2() "); delay(2000); } void fun_3() { lcd.setCursor(1,0); lcd.print(" CODIGO fun_3() "); delay(2000); }
"); ");