traigo unas prácticas con arduino de nivel básico para los que se quieran iniciar en este campo.
todo va simulado en Proteus con su código en c, los archivos .pde de los sketchs y un video demostrando el funcionamiento de cada ejemplo.
Sin más empezamos
Ejercicio 1 Blink
/*
* Intermitente
*
* Ejemplo básico con Arduino. Encendido y apagado de un led
* con una cadencia de 1 sg. usando el PIN 13 como salida
* no es necesario usar una resistencia para el led
* la salida 13 de Arduino la lleva incorporada.
*
* http://www.arduino.cc/en/Tutorial/Blink
*/
//Práctica de Luisdlahuerta
int ledPin = 13; // Definición de la salida en el PIN 13
void setup() //Configuración
{
pinMode(ledPin, OUTPUT); // designa la salida digital al PIN 13
}
void loop() // bucle de funcionamiento
{
digitalWrite(ledPin, HIGH); // activa el LED
delay(1000); // espera 1 seg. (tiempo encendido)
digitalWrite(ledPin, LOW); // desactiva el LED
delay(1000); // espera 1 seg. (tiempo apagado)
}
Simulación en proteus y código en c pinchando aqui
Ejercicio 2 Blink con Botón
//blink con botón
//Práctica de Luisdlahuerta
int ledPin=13; // elijo el pin13 para el led
int inPin=5; // elijo el pin d5 para entrada del botón
int val=0; //declaro la variable para leer el estado del botón
void setup() {
pinMode(ledPin,OUTPUT); //declaro el led como salida
pinMode(inPin,INPUT); //declaro el pin del boton como entrada
}
void loop() {
val=digitalRead(inPin); //Lee el valor de entrada del botón
if(val==HIGH){ //Chequea si el valor leido en el botón es
//alto "1"(boton presionado)
digitalWrite(ledPin,LOW); //pone el led en off
}else{
digitalWrite(ledPin,LOW); //apaga el led
delay(100); //retardo 100ms
digitalWrite(ledPin,HIGH);//enciende el led
delay(100); //retardo 100ms
}
}
Simulación en proteus y código en c pinchando aqui
Ejercicio 3 Encendido y apagado de 3 leds
//Encendido y apagado de 3 led
//Práctica de Luisdlahuerta
int ledPin1=6; //Defino las salidas de los leds
int ledPin2=7;
int ledPin3=8;
void setup() { //configuro las salidas para los leds
pinMode(ledPin1,OUTPUT); //definidos como salidas
pinMode(ledPin2,OUTPUT);
pinMode(ledPin3,OUTPUT);
digitalWrite(ledPin1,LOW);//Apago los leds
digitalWrite(ledPin2,LOW);
digitalWrite(ledPin3,LOW);
}
void loop() { //Bucle de funcionamiento
digitalWrite(ledPin1,HIGH);//Enciende y apago los leds cada 100ms
delay(100);
digitalWrite(ledPin1,LOW);
delay(100);
digitalWrite(ledPin2,HIGH);//Enciende y apago los leds cada 100ms
delay(100);
digitalWrite(ledPin2,LOW);
delay(100);
digitalWrite(ledPin3,HIGH);//Enciende y apago los leds cada 100ms
delay(100);
digitalWrite(ledPin3,LOW);
delay(100);
}
Simulación en proteus y código en c pinchando aqui
Ejercicio 4 Lectura del estado de un botón
//Lectura del estado de un botón
// detecta si el boton se esta pulsando o no y enciende un led
//Práctica de Luisdlahuerta
int ledPin=13; //Pin del led
int inPin=10; //Pin del boton
int value=0; //establezco el valor del pulsador en cero
void setup() {
pinMode(ledPin,OUTPUT); //establezco el pin del led como salida
pinMode(inPin,INPUT); //establezco el pin del boton como entrada digital
}
void loop() {
value = digitalRead(inPin); //lee el valor del botón en la entrada digital
digitalWrite(ledPin, value);
}
Simulación en proteus y código en c pinchando aqui
Ejercicio 5 Lectura de la entrada analógica de un potenciometro
//potenciométro lectura de señal analógica
//enciende y apaga un LED conectado al pin digital #13;
// La cantidad de tiempo que el LED parpadeará depende del
//valor obtenido mediante analogRead(). En este caso al pin A0
//Práctica de Luisdlahuerta
int potPin=0; //Defino el pin A0 como entrada analógica para el potenciómetro
int ledPin=13; //defino el pin D13 para el led indicador
int val=0; //variable para almacenar la lectura del potenciómetro
void setup() {
pinMode(ledPin,OUTPUT); //Declaro el led como salida
}
void loop() {
val=analogRead(potPin); //Lee el valor del potenciómetro
digitalWrite(ledPin,HIGH); //Enciende el led
delay(val); //Detiene el programa por un tiempo igual a la lectura del potenciómetro
digitalWrite(ledPin,LOW); //Apaga el led
delay(val); //Detiene el programa por un tiempo igual a la lectura del potenciómetro
}
Simulación en proteus y código en c pinchando aqui
Ejercicio 6 El coche fantástico 1
/*El coche fantástico 1
*/
//Práctica de Luisdlahuerta
int pin2 = 2; // PIN-es de los LED
int pin3 = 3;
int pin4 = 4;
int pin5 = 5;
int pin6 = 6;
int pin7 = 7;
int timer = 100; // Temporizador
void setup(){
pinMode(pin2, OUTPUT); // Configuración de los PIN-es como salida
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
}
void loop() {
digitalWrite(pin2, HIGH); // Enciende y apaga secuencialmente LED-s
delay(timer);
digitalWrite(pin2, LOW);
delay(timer);
digitalWrite(pin3, HIGH);
delay(timer);
digitalWrite(pin3, LOW);
delay(timer);
digitalWrite(pin4, HIGH);
delay(timer);
digitalWrite(pin4, LOW);
delay(timer);
digitalWrite(pin5, HIGH);
delay(timer);
digitalWrite(pin5, LOW);
delay(timer);
digitalWrite(pin6, HIGH);
delay(timer);
digitalWrite(pin6, LOW);
delay(timer);
digitalWrite(pin7, HIGH);
delay(timer);
digitalWrite(pin7, LOW);
delay(timer);
digitalWrite(pin6, HIGH);
delay(timer);
digitalWrite(pin6, LOW);
delay(timer);
digitalWrite(pin5, HIGH);
delay(timer);
digitalWrite(pin5, LOW);
delay(timer);
digitalWrite(pin4, HIGH);
delay(timer);
digitalWrite(pin4, LOW);
delay(timer);
digitalWrite(pin3, HIGH);
delay(timer);
digitalWrite(pin3, LOW);
delay(timer);
}
Simulación en proteus y código en c pinchando aqui
Ejercicio 7 coche fantástico 2 con ciclo for
//el coche fantastico 2 reduciendo las lineas de codigo con un ciclo FOR
//Práctica de Luisdlahuerta
int pinArray[]={2,3,4,5,6,7}; //se define el array de pines, y ahorramos codigo
int count=0; //variable contador
int timer=100; //temporizador con un valor de 100ms
void setup() {
for(count=0;count<6;count++){ //Sentencia For cuenta parriba
pinMode(pinArray[count],OUTPUT); //configuramos todos los pines de los leds como salida
}
}
void loop() {
for(count=0;count<6;count++){ //recorrido de ida, cuenta parriba con For
digitalWrite(pinArray[count],HIGH); //Ponemos los led en High, alto
delay(timer);
digitalWrite(pinArray[count],LOW); //Apagamos los leds
delay(timer);
}
for(count=5;count>=0;count--){ //recorrido de vuelta, pabajo los leds con for
digitalWrite(pinArray[count],HIGH); //Encendemos los leds
delay(timer);
digitalWrite(pinArray[count],LOW); //Apagamos los leds
delay(timer);
}
}
Simulación en proteus y código en c pnchando aqui
Ejercicio 8 coche fantástico 3 efecto visual
//El coche fantástico 3
int pinArray[]={2,3,4,5,6,7}; //pines del array
int count=0; //Contador
int timer=30; //temporizador
void setup(){
for(count=0;count<6;count++){ //Incremeto
pinMode(pinArray[count],OUTPUT); //Configuramos todos los pines de una vez
}
}
void loop(){ //bucle
for(count=0;count<5;count++){ //enciende los leds creando una estela visual
digitalWrite(pinArray[count],HIGH);
delay(timer);
digitalWrite(pinArray[count+1],HIGH);
delay(timer);
digitalWrite(pinArray[count],LOW);
delay(timer*2);
}
for(count=5;count>0;count--){
digitalWrite(pinArray[count],HIGH);
delay(timer);
digitalWrite(pinArray[count-1],HIGH);
delay(timer);
digitalWrite(pinArray[count],LOW);
delay(timer*2);
}
}
Simulación en proteus y código en c pinchando aqui
Ejercicio 9 Estrella fugaz
//Práctica de Luisdlahuerta
int pinArray[]={2,3,4,5,6,7,8,9,10,11,12}; //declaracion de pines mediante un array
int controlLed=13; //Led de control
int waitNextLed=100; //tiempo antes de encender el siquiente led
//Número de les que permanecen encendidos antes de empezar a apagarlos para formar la cola
int tailLength=4; //Numero de leds conectados(tamaño del array)
int lineSize=11;
void setup(){
int i;
pinMode(controlLed,OUTPUT); //configuramos los pines como salida digital
for(i=0;i<lineSize;i++){
pinMode(pinArray[i],OUTPUT);
}
}
void loop()
{ //bucle
int i;
int tailCounter = tailLength; //Se establece la longitud de la cola en un contador
digitalWrite(controlLed, HIGH); //Se enciende el led de control para indicar el incio del loop
for (i=0; i<lineSize; i++) //For de incremento
{
digitalWrite(pinArray[i], HIGH); //Se encienden consecutivamente los leds
delay(waitNextLed); //esta variable de tiempo controla la velocidad a la que se mueve la estrella
if (tailCounter == 0) //aqui cuidado!! puse ; sin querer y no daba con la falla XD
{
digitalWrite(pinArray[i-tailLength],LOW); //Se apagan los leds en funcion de la longitud de la cola
}
else
if (tailCounter > 0)
tailCounter--;
}
for (i=(lineSize-tailLength); i<lineSize; i++)
{
digitalWrite(pinArray[i],LOW); //se apagan los leds
delay(waitNextLed);
}
}
Simulación en proteus y código en c pinchando aqui
Ejercicio 10 Cuenta pulsador
//Contar las veces que se pulsa un botón
//el botón va a estar en el pin digital 7 y a la vez que contamos
//encendemos un led conectado al pin digital 13
//Práctica de Luisdlahuerta
int led=13;
int boton=7;
int valor=0;
int contador=0;
int estadoanteriorboton=0;
void setup(){
Serial.begin(9600); //configuración de los baudios de transmisión para el puerto com
pinMode(led,OUTPUT); //inicializa como salida el pin digital 13 (led)
pinMode(boton,INPUT); //inicializa como entrada el pin digital 7 (boton)
}
void loop(){ //bucle
valor=digitalRead(boton); //lee el valor de la entrada digital del boton en pin d7
digitalWrite(led,valor);
if(valor!=estadoanteriorboton){
if(valor==1){
contador++;
Serial.print(contador);
Serial.write(10);
Serial.write(13);
}
}
estadoanteriorboton=valor;
}
Simulación en proteus y código en c pinchando aqui
Ejercicio 11 Contador modificado
Código
/* Main.ino file generated by New Project wizard
*
* Created: Thu Sep 5 2013
* Processor: ATmega328P
* Compiler: Arduino AVR
*/
//Contador modificado
//Práctica de Luisdlahuerta
//es muy parecido al anterior sketch pero ahora al pulsar el boton introducimos un "=" en el pin d7
//por lo tanto para que se encienda la salida del pin d13 hay que escribir en ella un valor leido negado
//"!valor!
int led=13;
int boton=7;
int valor=0;
int contador=0;
int estadoanteriorboton=0;
void setup(){
Serial.begin(9600); //configuro la velocidad de los baudios de transmisión
pinMode(led,OUTPUT); //inicializo como salida el pin digital 13
pinMode(boton,INPUT); //inicializo como entrada digital el pin 7
digitalWrite(boton,HIGH); //habilito la resistencia interna pull-up del pin d7
}
void loop(){
valor=digitalRead(boton); //leo el valor de la entrada d7, el boton
digitalWrite(led,!valor); //Escribimos en la salida el valor leido negado
if(valor!=estadoanteriorboton){
if(valor==1){
contador++;
Serial.print("Has pulsado ");
Serial.print(contador);
Serial.print(" Veces ");
Serial.write(10);
Serial.write(13);
}
}
estadoanteriorboton=valor;
}
Simulación en Proteus y código en c pinchando aqui
Ejercicio 12 Contador de cero a 10 con pulsador
/* Main.ino file generated by New Project wizard
*
* Created: Thu Sep 5 2013
* Processor: ATmega328P
* Compiler: Arduino AVR
*/
//Contador de 0 a 10 ejercicio 12
//Práctica de Luisdlahuerta
//cuando el valor del contador llegue a 10 se pondrá en cero de nuevo
int led=13;
int boton=7;
int valor=0;
int contador=0;
int estadoanteriorboton=0;
void setup(){
Serial.begin(9600); //Configuro los baudios de transmision del puerto com
pinMode(led,OUTPUT); //inicializa el pin 13 como salida digital
pinMode(boton,INPUT); //inicializa el pin 7 como entrada digital
}
void loop(){
valor=digitalRead(boton); //lee el valor del boton en pin d7
digitalWrite(led,valor);
if(valor!=estadoanteriorboton){
if(valor==1){
contador++;
Serial.print("Has pulsado ");
Serial.print(contador);
Serial.print(" veces");
Serial.write(10);
Serial.write(13);
if(contador==10){ //limito la cuenta a un valor de 10 para la variable contador
contador=0;
}
}
}
estadoanteriorboton=valor;
}
Simulación en Proteus y código en c pinchando aqui
seguimos mañana que ya es tarde
Saludos
Muchas gracias Luis por los ejemplos subidos!
ResponderEliminarEstoy recién arrancando con Arduino.
Saludos!!
Muchas gracias por tu comentario, me alegro que disfrutes con arduino, es un entorno con muchas posibilidades e infinidad de librerías.
EliminarTengo mucho lio, de ahí mi tardanza en responder.
Saludos
Me han gustado mucho los ejemplos subidos
Eliminarmuy bueno gracias amigo estos ejemplos son muy prácticos para uno que recién esta aprendiendo en Arduino, así familiarizarse con este entorno variado y complejo =)
ResponderEliminarSi, la verdad es que arduino y la electrónica digital mola mucho. Lo complicado para mi es la programación, pero poco a poco lo voy sacando.
ResponderEliminarGracias por comentar. Saludos
Tendrias un codigo de como hcrear o simular un calendario?
ResponderEliminarSALIUDOS, ME GUSTARIA SABER SI PUEDO ACTIVAR UN RELE, CON ALGUNA SEÑAL OTORGADA POR EL COMPUTADOR ATRAVEZ DE USB. LA IDEA ES INCREMENTAR UNAS LINEAS DE COMANDO EN UN PROGRAMA PARA QUE ENVIE LA SEÑAL DIGITAL AL ARDUINO Y ESTE CIERRE UN RELE.
ResponderEliminarhola,
Eliminarte recomiendo que leas y aprendas antes de preguntar ,saludos .
Hola ,
ResponderEliminaryo provengo de pic y ensamblador;
intento aprender cosas nuevas y he de decir que escribir tareas en C,o sea lenguaje placa arduino o atmel procesador,lo encuentro mas tedioso y con mas líneas de código que en ensamblador,
y por lo que leo por foros ,¿ como puede una persona montar un robot, si ni siquiera sabe leer el código de colores de las resistencias?.
saludos
Realmente no es necesario saberse los códigos de colores de las resistencias para saber programación en C, aunque lo suyo es tener nociones básicas de electrónica, y saber lo que quieres hacer con tu PIC, ATMEL,CYPRESS... o el micro que uses. Yo disfruto con mis proyectos de electrónica y con las soluciones que consigo con ellos.
ResponderEliminarSaludos.
Este comentario ha sido eliminado por el autor.
ResponderEliminardisculpa si vas a seguir subiendo los otros ejercicios gracias
ResponderEliminarmuy buenas tus programaciones y funcionan,sabrias codificar un pulsador para que encienda la estrella fugaz cuando pulsas??tienes alguna programacion para teclado 4x4?? he visto algunas por internet pero no me funcionan ninguna
ResponderEliminarBuenas amigo, soy un estudiante nivel bachillerato en el cual estudia electronica y necesito un favor, podrias pasar el codigo de tocar tonos desde puerto serial seria de mucha ayuda que tenga excelente dia !
ResponderEliminarEnhorabuena Luis, con ejemplos así es mas fácil comprender la programación. Saludos
ResponderEliminarViva Willyrex
ResponderEliminar