práctica
Ejercicios de
Arduino
Introducción a la programación en:
Prof. Daniel Tedesco
Proyecto
LEDS - AMONG US
Ejercicio -3
Variables
¿Qué es una variable?
Es un tipo de dato que nos permite guardar información, en el entorno de programación y en una parte de la ram de la placa Arduino
Programar consiste básicamente en decirle a tu Arduino y a los actuadores que este controla desde sus puertos (o “shields”) lo que tiene que hacer (o esperamos que haga, todos los programadores saben que estas son cosas frecuentemente diferentes).
Un programa (o “sketch” en la jerga Arduino) consigue este objetivo fundamentalmente mediante el procesamiento más o menos complejo de datos y la transmisión de estos datos procesados a los actuadores. Lo que llamamos variables es simplemente una manera de codificar o representar estos datos dentro del sketch para facilitar su manipulación de cara a su transmisión hacia o desde los actuadores/sensores.
Desde un punto de vista práctico, podemos considerar las variables como los cajones de un escritorio, cada uno tiene una etiqueta describiendo el contenido y dentro de él se encuentra el valor de la variable (el contenido del cajón). Hay tantos tipos de variables como de datos: números de todo tipo representados de diferentes maneras (enteros, reales, binarios, decimales, hexadecimales, etc.), textos (de un solo o varios caracteres o líneas), matrices (arrays), constantes, etc.
Tipos de variables Arduino
Para saber más: aquí
Variable int y unsigned int
//int es una variable para un dato entero, igual a un número tanto positivos como negativos
//int va desde los -32,768 to 32,767
//Si agregamos la variablable unisgned int, duplicamos las posibilidades del valor
Estos valores están limitados por las características del hardware Arduino que es de 16 bits o 2 bytes
Strings
En C++ un String es un tipo de datos que es usado para guardar cadenas de caracteres.
Ejemplo:
String ejemplo1 = "Hola ";
String ejemplo2 = "Mundo!";
String resultado;
void setup() {
resultado = ejemplo1+ejemplo2;
Serial.begin(9600);
Serial.print("El resultado de la concatenacion es: ");
Serial.println(resultado);
}
void loop() {
// put your main code here, to run repeatedly:
}
Ejemplos de variables
Arrays
Un array o arreglo es un conjunto de datos que pueden indexarse y recuperarse. Es decir, es un conjunto de variables en al cuales puedo guardar datos
Ejemplos de variables
Arrays
Ejemplos:
int edades[5];//cantidad de casilleros o tamaño de la variable
float peso [10]; // guardo los valores de peso de 10 personas
int edades1 [] = {12, 56 ,60};// el sistema interpreta que existen 3 casilleros
int edades2[10]={12, 56, 60};// el sistema guarda 10 espacios pero solo utiliza 3
int dinero_en_cuenta[10] ={50,-12,30};//el sistema puede registrar números negativos
char mensaje[30] = "hola bienvenidos";// se pueden armar arryas de texto
Variables locales y globales
Ejemplos
// C++ code
//
String ejemplo1 = "Hola ";
String ejemplo2 = "Mundo!"; // variables globales(fuera de las funciones)
String resultado;
void setup() {
int ejemplo1= "Chau "//variable local(dentro de la función)
resultado = ejemplo1+ejemplo2;
Serial.begin(9600);
Serial.print("El resultado de la concatenacion es: ");
Serial.println(resultado);
}
void loop() {
// put your main code here, to run repeatedly:
}
Variables globales: Fuera de la función
Variables locales: Dentro de una función
Ejemplos de arrays
int dinero_en_cuenta[10] ={50,-12,30};
void setup (){
Serial.begin(9600);
delay(100);
Serial.println (String(dinero en cuenta[0]));// en el monitor serie se imprimre la posicion 0=50
}
void loop (){
}
int dinero_en_cuenta[10] ={50,-12,30};
void setup (){
Serial.begin(9600);
delay(100);
diero_en_cuenta[0] = 10;// cambio el valor de la posición 0,por 10
Serial.println (String(dinero en cuenta[0]));// en el monitor serie se imprimre la posicion 0=10
}
void loop (){
}
Ejercicio -2
Operadores y condicionales
Definiciones
Un operador es un elemento de programa que se aplica a uno o varios operandos en una expresión o instrucción. Un operador es un símbolo que indica al compilador que se lleve a cabo ciertas manipulaciones matemáticas o lógicas
Los operadores aritméticos que se incluyen en el entorno de programación son suma, resta, multiplicación, división, módulo y asignación. Estos devuelven la suma, diferencia, producto, cociente o resto (respectivamente) de dos operandos
Las operadores compuestos combinan una operación aritmética con una variable asignada. Estas son comúnmente utilizadas en los bucles tal como se describe más adelante. Estas asignaciones compuestas pueden ser:
++, –
+= , -= , *= , /=
Definiciones
Operadores de comparación. Las comparaciones de una variable o constante con otra se utilizan con frecuencia en las estructuras condicionales del tipo if, while, etc.. para testear si una condición es verdadera.
==, !=, <, >, <=, >=
Los operadores lógicos o booleanos son usualmente una forma de comparar dos expresiones y devuelve un VERDADERO o FALSO dependiendo del operador. Existen tres operadores lógicos, AND (&&), OR (||) y NOT (!), que a menudo se utilizan en estamentos de tipo if
Ejercicios -1
Función "if/else"
"If"
IF es un condicional, que ejecuta una orden si ocurre previamente una condición o estado
Ejemplo:
IF - SI(si se cumple el paréntesis) {entonces se ejecuta el corchete}
Ejemplo2:
IF - SI(si se cumple el paréntesis) {entonces se ejecuta el corchete}
else -sino{ocurre otra cosa}
Trabajando con pulsadores
ejercicio -1.1
Programa if/else
// C++ code//pulsar y mantener pulsado
//
void setup()
{
pinMode(2, INPUT);//configuro el pin 2 como entrada, para leer cuando el pulsador este presionado
pinMode(13, OUTPUT);//configuro el pin 13 y monitoreo el led onboard
}
void loop(){
int estadoboton = digitalRead(2);//leo el estado del pin 2, guardo el resultado en una variable
if(estadoboton == 1){//si lo que pasa en el parentesis se cumple, se ejecuta el corchete
delay(1000);//probar primeramente sin delay
digitalWrite(13, HIGH);
}
else{
delay(1000);
digitalWrite(13, LOW);
}
}
ejercicio -1.2
or || ejercicio -1.2
and && ejercicio -1.3
otras variaciones
> Mayor que
< Menor que
>= Mayor o igual
!= Desigual (cambiar en el código anterior)
ejercicio -1.4
Imprimir en monitor serie
Ejercicios 0
Bucles
BUCLE FOR
¿Qué es el ciclo FOR?
Es una estructura de control que sirve para repetir ciertas instrucciones un número determinado de veces. Las instrucciones que se repiten son las que el usuario decide, y el número de veces que se repiten también lo determina el usuario.
Fuente: https://www.wexterhome.com/curso-arduino/el-bucle-for/
/*
* SINTAXIS DEL BUCLE FOR
* for(expresión de inicio, condición, incremento/decremento){
* instrucciones;
* }
*/
Ejercicio 0.1 Encender leds sin bucle
código sin bucle
const int LED1 = 10;
const int LED2 = 11;
const int LED3 = 12;
void setup() {
// put your setup code here, to run once:
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED1, HIGH);
delay(500);
digitalWrite(LED1, LOW);
delay(500);
digitalWrite(LED2, HIGH);
delay(500);
digitalWrite(LED2, LOW);
delay(500);
digitalWrite(LED3, HIGH);
delay(500);
digitalWrite(LED3, LOW);
delay(500);
}
código con bucle for
const int LED1 = 10;
const int LED2 = 11;
const int LED3 = 12;
void setup() {
// put your setup code here, to run once:
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
for(int i = 10; i<13; i++){
digitalWrite(i, HIGH);
delay(500);
digitalWrite(i, LOW);
delay(500);
}
}
Ejercicio 1
Encender leds
Ejercicio 1.1
Realizar las siguientes pruebas en TinkerCAD
Ejercicio 1.1
Tabla de resistencias: Varía las resistencias de tus leds según la tabla
Ejercicio 1.1
Interpretación de las resistencias
Ejercicio 1.1
Calculadora de resistencias (Click en la imagen)
Ejercicio 1.2
Diagrama
programa
/*Actividad:
Realizá el programa y luego completá los siguientes desafíos:
¿Cómo cambiamos la intensidad el led?
¿Cómo variamos el tiempo de encendido?
¿Cómo logramos que el led quede encendido continuamente?*/
byte led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop(){
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
}
Ejercicio desafío: LED con potenciómetro
Diagrama
/*Variación de la intensidad del LED con potenciómetro.
Seguir las conexiones y una vez energizado, variar la
del potenciómetro para cambiar la intensidad del LED
Prof. Daniel Tedesco */
int led = 3;
int pot = A0;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
analogWrite(led, analogRead(pot)/4);
}
Código
Ejercicio 2
Encender dos leds en forma desigual
diagrama
programa
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
digitalWrite(12, HIGH);
delay(1000);
digitalWrite(12, LOW);
delay(1000);
}
Ejercicio 2.1
Encender dos leds en forma paralela
diagrama
programa
void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
digitalWrite(12, HIGH);
delay(1000);
digitalWrite(13, LOW);
digitalWrite(12, LOW);
delay(1000);
}
Ejercicio 2.2
Velador
¿Cómo funciona un pulsador?
diagrama
programa
// C++ code
//
int pulsador = 3;
int led = 2;
int estado = LOW;
void setup()
{
pinMode(pulsador, INPUT);
pinMode(led, OUTPUT);
}
void loop()
{
while (digitalRead(pulsador) == LOW){
}
estado = digitalRead(led);
digitalWrite(led, !estado);
while (digitalRead(pulsador) == HIGH){
}
}
Ejercicio desafío
Encender led RGB
Código
int led_rojo = 6;//elegimos pines PWM ~
int led_azul = 5;
int led_verde = 3; // Dividimos el led RGB en 3 variables, 1 por cada pin o color
void setup()
{
pinMode(led_rojo, OUTPUT);
pinMode(led_verde, OUTPUT);
pinMode(led_azul, OUTPUT);//Asignamos los pineso variables como salida
}
void loop()
{
analogWrite(led_rojo, 255);//Aplicamos 255 a los 3 pines para formar el color "Blanco"
analogWrite(led_verde,255);
analogWrite(led_azul, 255);
delay(5000);//dejamos un delay mayor para le color blanco
analogWrite(led_rojo, 255);//Asignamos 255 a un color y 0 a otros
analogWrite(led_verde,0);
analogWrite(led_azul, 0);
delay(2000);
analogWrite(led_rojo, 0);
analogWrite(led_verde,255);
analogWrite(led_azul, 0);
delay(2000);
analogWrite(led_rojo, 0);
analogWrite(led_verde,0);
analogWrite(led_azul, 255);
delay(2000);
}
Actividad adicional
1. Seleccionar colores en https://htmlcolorcodes.com/es/ o Photoshop
2. Seleccionar en código decimal RGB
3. Reproducirlo con Arduino
Ejercicio 3
sEMáFOROS
EJERCICIO 3.1 - SEMÁFORO BÁSICO
DIAGRAMA
CóDIGO
int rojo = 8;
int amarillo = 9;
int verde = 10;
void setup() {
pinMode(rojo, OUTPUT);
pinMode(amarillo, OUTPUT);
pinMode(verde, OUTPUT);
}
void loop() {
digitalWrite(rojo, HIGH);
delay(3000);
digitalWrite(rojo, LOW);
digitalWrite(amarillo, HIGH);
delay(1000);
digitalWrite(amarillo, LOW);
digitalWrite(verde, HIGH);
delay(2000);
digitalWrite(verde, LOW);
digitalWrite(amarillo, HIGH);
delay(1000);
digitalWrite(amarillo, LOW);
}
EJERCICIO 3.2 SEMáFORO PEDESTRE Y AUTOMóVILíSTICO
Código
// C++ code
//
#define REDCARS 13
#define YELLOWCARS 12
#define GREENCARS 11
#define GREENPEDESTRIANS 10
#define REDPEDESTRIANS 9
#define SIGNAL 3
#define BUTTON 6
void setup()
{
pinMode(REDCARS,OUTPUT);
pinMode(YELLOWCARS,OUTPUT);
pinMode(GREENCARS,OUTPUT);
pinMode(REDPEDESTRIANS,OUTPUT);
pinMode(GREENPEDESTRIANS,OUTPUT);
pinMode(SIGNAL,OUTPUT);
pinMode(BUTTON,INPUT_PULLUP);
digitalWrite(REDCARS,LOW);
digitalWrite(YELLOWCARS,LOW);
digitalWrite(GREENCARS,HIGH);
digitalWrite(REDPEDESTRIANS,HIGH);
digitalWrite(GREENPEDESTRIANS,LOW);
digitalWrite(SIGNAL,LOW);
}
void loop()
{
if(digitalRead(BUTTON)==LOW)
{
digitalWrite(SIGNAL,HIGH);
delay(1000);
digitalWrite(YELLOWCARS,HIGH);
digitalWrite(GREENCARS,LOW);
delay(1000);
digitalWrite(YELLOWCARS,LOW);
digitalWrite(REDCARS, HIGH);
digitalWrite(SIGNAL,LOW);
digitalWrite(REDPEDESTRIANS,LOW);
digitalWrite(GREENPEDESTRIANS,HIGH);
delay(3000);
for(int i = 0;i<3;i++)
{
digitalWrite(GREENPEDESTRIANS,LOW);
delay(1000);
digitalWrite(GREENPEDESTRIANS,HIGH);
delay(1000);
}
digitalWrite(GREENPEDESTRIANS,LOW);
digitalWrite(REDPEDESTRIANS,HIGH);
digitalWrite(REDCARS, LOW);
digitalWrite(GREENCARS,HIGH);
}
}
Ejercicio desafío
Código
#include <Servo.h>
Servo barrera;
int echo = 2; // Pin del sensor de ultrasonido
int trig = 3; // Pin del sensor de ultrasonido
long duracion, distancia;
int buzzer = 4; // Pin del buzzer
int led1 = 5; // Pin del primer LED
int led2 = 6; // Pin del segundo LED
void setup() {
pinMode(trig, OUTPUT); // Configura el pin del sensor de ultrasonido como salida
pinMode(echo, INPUT); // Configura el pin del sensor de ultrasonido como entrada
pinMode(buzzer, OUTPUT); // Configura el pin del buzzer como salida
pinMode(led1, OUTPUT); // Configura el pin del primer LED como salida
pinMode(led2, OUTPUT); // Configura el pin del segundo LED como salida
barrera.attach(9); // Configura el pin del servo como salida
barrera.write(90); // Inicializa el servo en 90 grados
}
void loop() {
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duracion = pulseIn(echo, HIGH);
distancia = duracion * 0.034 / 2;
if (distancia < 5) {
barrera.write(0); // Mueve el servo a 0 grados
digitalWrite(buzzer, HIGH); // Activa el sonido del buzzer
digitalWrite(led1, HIGH); // Enciende el primer LED
digitalWrite(led2, LOW); // Apaga el segundo LED
delay(500); // Espera medio segundo
digitalWrite(led1, LOW); // Apaga el primer LED
digitalWrite(led2, HIGH); // Enciende el segundo LED
delay(500); // Espera medio segundo
} else {
barrera.write(90); // Mueve el servo a 90 grados
digitalWrite(buzzer, LOW); // Desactiva el sonido del buzzer
digitalWrite(led1, LOW); // Apaga el primer LED
digitalWrite(led2, LOW); // Apaga el segundo LED
}
}
Ejercicio 5
Among us
Modelo 3d
Descargá el modelo 3D
para imprimir aquí
diagrama
programa
// C++ code
int led = 13;
int lecturasensor;
void setup(){
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop(){
lecturasensor = analogRead(A0);
Serial.println(lecturasensor);
if (lecturasensor < 600) {
digitalWrite(led, LOW);
}
else {
digitalWrite (led, HIGH);}
}
Alternativa LED RGB
ALTERNATIVA LED RGB - Código
/*
Vamos a configurar las diferentes salidas de nuestro arduino lograr diferentes colores utilizando la tecnica de adición
*/
//INICIO VARIABLES
int ledRojo = 9;
int ledVerde = 10;
int ledAzul = 11;
int ledTest = 13;
int rojo = 0;
int verde = 0;
int azul = 0;
int todos = 0;
/*FIN VARIABLES*/
void setup() {
//INICIO SETUP SALIDAS
pinMode(ledRojo, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledAzul, OUTPUT);
pinMode(ledTest, OUTPUT);
analogWrite(ledRojo, 0);
analogWrite(ledVerde, 0);
analogWrite(ledAzul, 0);
digitalWrite(ledTest, LOW);
//Saludo Inicial con bucle for
for(int i=0;i<3;i++){
digitalWrite(ledTest, HIGH);
delay(500);
digitalWrite(ledTest, LOW);
delay(500);
}
}
void loop() {
//INICIO ENCENDER COLORES
for (rojo = 0; rojo <= 255; rojo++) {
analogWrite(ledRojo, rojo); //Escribe un valor entre 0 y 255 en un pin analógico (~). Se puede usar para encender
delay(10); // un LED con luminosidad variable o accionar un motor a diferentes velocidades
}
for (rojo = 255; rojo >= 0; rojo--) { // en este caso, usando "rojo--" en vez de incrementar, decrementa el valor de la variable
analogWrite(ledRojo, rojo); // de control "rojo" en 1
delay(10);
}
for (verde = 0; verde <= 255; verde++) {
analogWrite(ledVerde, verde);
delay(10);
}
for (verde = 255; verde >= 0; verde--) {
analogWrite(ledVerde, verde);
delay(10);
}
for (azul = 0; azul <= 255; azul++) {
analogWrite(ledAzul, azul);
delay(10);
}
for (azul = 255; azul >= 0; azul--) {
analogWrite(ledAzul, azul);
delay(10);
}
analogWrite(ledRojo, 255); //
analogWrite(ledVerde, 0);
analogWrite(ledAzul, 0);
for (verde = 0; verde <= 255; verde++) {
analogWrite(ledVerde, verde);
delay(10);
}
for (azul = 0; azul <= 255; azul++) {
analogWrite(ledAzul, azul);
delay(10);
}
for (verde = 255; verde >= 0; verde--) {
analogWrite(ledVerde, verde);
delay(10);
}
for (rojo = 255; rojo >= 0; rojo--) {
analogWrite(ledRojo, rojo);
delay(10);
}
for (azul = 255; azul >= 0; azul--) {
analogWrite(ledAzul, azul);
delay(10);
}
delay(50);
for (todos = 0; todos <= 255; todos++) {
analogWrite(ledRojo, todos);
analogWrite(ledVerde, todos);
analogWrite(ledAzul, todos);
delay(10);
}
for (todos = 255; todos >= 0; todos--) {
analogWrite(ledRojo, todos);
analogWrite(ledVerde, todos);
analogWrite(ledAzul, todos);
delay(10);
}
}
Actividad complementaria
Conectar motor paso a paso
Programa 2
/*
Programa que realiza un giro completo del motor 28BYJ-48 en conjunto con el controlador
basado en ULN2003, detiene 5 segundos y luego comienza nuevamente. La secuencia es la de
paso completo simple (wave drive) energizando de a una bobina por vez utilizando una
matriz para su definicion.
Alimentar Arduino con fuente de alimentacion externa de 6 a 12 Vdc.
*/
int IN1 = 8; // pin digital 8 de Arduino a IN1 de modulo controlador
int IN2 = 9; // pin digital 9 de Arduino a IN2 de modulo controlador
int IN3 = 10; // pin digital 10 de Arduino a IN3 de modulo controlador
int IN4 = 11; // pin digital 11 de Arduino a IN4 de modulo controlador
int demora = 20; // demora entre pasos, no debe ser menor a 10 ms.
// paso completo simple
int paso [4][4] = // matriz (array bidimensional) con la secuencia de pasos
{
{1, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 1, 0},
{0, 0, 0, 1}
};
void setup() {
pinMode(IN1, OUTPUT); // todos los pines como salida
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
for (int i = 0; i < 512; i++) // 512*4 = 2048 pasos
{
for (int i = 0; i < 4; i++) // bucle recorre la matriz de a una fila por vez
{ // para obtener los valores logicos a aplicar
digitalWrite(IN1, paso[i][0]); // a IN1, IN2, IN3 e IN4
digitalWrite(IN2, paso[i][1]);
digitalWrite(IN3, paso[i][2]);
digitalWrite(IN4, paso[i][3]);
delay(demora);
}
}
digitalWrite(IN1, LOW); // detiene por 5 seg.
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(5000);
}
Programa 3
/*
Programa que realiza un giro completo del motor 28BYJ-48 en conjunto con el controlador
basado en ULN2003, detiene 5 segundos y luego comienza nuevamente. La secuencia es la de
paso completo con dos bobinas para una maximo torque utilizando una matriz para su
definicion.
Alimentar Arduino con fuente de alimentacion externa de 6 a 12 Vdc.
*/
int IN1 = 8; // pin digital 8 de Arduino a IN1 de modulo controlador
int IN2 = 9; // pin digital 9 de Arduino a IN2 de modulo controlador
int IN3 = 10; // pin digital 10 de Arduino a IN3 de modulo controlador
int IN4 = 11; // pin digital 11 de Arduino a IN4 de modulo controlador
int demora = 20; // demora entre pasos, no debe ser menor a 10 ms.
// paso completo con maximo torque
int paso [4][4] = // matriz (array bidimensional) con la secuencia de pasos
{
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1}
};
void setup() {
pinMode(IN1, OUTPUT); // todos los pines como salida
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
for (int i = 0; i < 512; i++) // 512*4 = 2048 pasos
{
for (int i = 0; i < 4; i++) // bucle recorre la matriz de a una fila por vez
{ // para obtener los valores logicos a aplicar
digitalWrite(IN1, paso[i][0]); // a IN1, IN2, IN3 e IN4
digitalWrite(IN2, paso[i][1]);
digitalWrite(IN3, paso[i][2]);
digitalWrite(IN4, paso[i][3]);
delay(demora);
}
}
digitalWrite(IN1, LOW); // detiene por 5 seg.
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(5000);
}
Programa 4
/*
Programa que realiza un giro completo del motor 28BYJ-48 en conjunto con el controlador
basado en ULN2003, detiene 5 segundos y luego comienza nuevamente. La secuencia es la de
medio paso para maxima precision y torque medio utilizando una matriz para su
definicion.
Alimentar Arduino con fuente de alimentacion externa de 6 a 12 Vdc.
*/
int IN1 = 8; // pin digital 8 de Arduino a IN1 de modulo controlador
int IN2 = 9; // pin digital 9 de Arduino a IN2 de modulo controlador
int IN3 = 10; // pin digital 10 de Arduino a IN3 de modulo controlador
int IN4 = 11; // pin digital 11 de Arduino a IN4 de modulo controlador
int demora = 20; // demora entre pasos, no debe ser menor a 10 ms.
// medio paso
int paso [8][4] = // matriz (array bidimensional) con la secuencia de pasos
{
{1, 0, 0, 0},
{1, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 1, 1},
{0, 0, 0, 1},
{1, 0, 0, 1}
};
void setup() {
pinMode(IN1, OUTPUT); // todos los pines como salida
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
for (int i = 0; i < 512; i++) // 512*8 = 4096 pasos
{
for (int i = 0; i < 8; i++) // bucle recorre la matriz de a una fila por vez
{ // para obtener los valores logicos a aplicar
digitalWrite(IN1, paso[i][0]); // a IN1, IN2, IN3 e IN4
digitalWrite(IN2, paso[i][1]);
digitalWrite(IN3, paso[i][2]);
digitalWrite(IN4, paso[i][3]);
delay(demora);
}
}
digitalWrite(IN1, LOW); // detiene por 5 seg.
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(5000);
}
Proyecto Among US Bistrica
By profdanieltedesco
Proyecto Among US Bistrica
Proyecto 5to. B
- 444