0% encontró este documento útil (0 votos)
6 vistas31 páginas

Ejercicios de Arduino: Control de LEDs y Pulsadores

El documento presenta varios ejercicios de programación en Arduino, donde se utilizan macros para leer el estado de pulsadores y controlar LEDs. Se incluyen funciones para encender, apagar y parpadear LEDs, así como para manejar múltiples pulsadores que incrementan o decrementan un contador que controla el estado de un display de 7 segmentos. Cada sección del código está diseñada para ilustrar diferentes conceptos de control de hardware mediante el uso de estructuras de control como switch y bucles.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
6 vistas31 páginas

Ejercicios de Arduino: Control de LEDs y Pulsadores

El documento presenta varios ejercicios de programación en Arduino, donde se utilizan macros para leer el estado de pulsadores y controlar LEDs. Se incluyen funciones para encender, apagar y parpadear LEDs, así como para manejar múltiples pulsadores que incrementan o decrementan un contador que controla el estado de un display de 7 segmentos. Cada sección del código está diseñada para ilustrar diferentes conceptos de control de hardware mediante el uso de estructuras de control como switch y bucles.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

ARDUINO

EJERCICIO 1

FUNCIONES BLINK Y APAGADO

#define P1() (PINC & (1 << 0)) //define un macro o etiqueta para P1
#define P2() (PINC & (1 << 1)) //define un macro o etiqueta para P2

void apagar() {
PORTB &= ~(1 << 0);
}

void blink() {
for (char j=1;j<7;j++){
PORTB |= (1 << 0);
delay(500);
PORTB &= ~(1 << 0);
delay(500);
}
}

void setup() {
// put your setup code here, to run once:
DDRC &= ~(1 << 0); // ENTRADA
PORTC |= (1 << 0); // PULL UP
PORTC |= (1 << 1); // PULL UP
DDRB |= (1 << 0); // ACT COMO SALIDA
PORTB |= (1 << 0); // ACTIVA EN PIN B0
}

void loop() {
if (!P1()) {
apagar();
}

if (!P2()) {
blink();
}
}
#define P1() (PINC & (1 << 0)) //define un macro o etiqueta para P1
#define P2() (PINC & (1 << 1)) //define un macro o etiqueta para P2

void setup() {
// put your setup code here, to run once:
DDRC &= ~(1 << 0); // ENTRADA
DDRC &= ~(1 << 1); // ENTRADA
//PORTC |= (1 << 0); // PULL UP
// PORTC |= (1 << 1); // PULL UP
DDRB |= (1 << 0)| (1 << 1); // ACT COMO SALIDA
PORTB |= ~(1 << 0) | ~(1 << 1); // ACTIVA EN PIN B0
}

void loop() {
int k =2;
switch (2)
{
case 1:
if (!P1() | !P2()) {
PORTB |= ~(1 << 0) | ~(1 << 1); // ACTIVA EN PIN B0

}
break;
}

}
#define P1() (PINC & (1 << 0)) // Macro para leer el estado del pulsador
1
#define P2() (PINC & (1 << 1)) // Macro para leer el estado del pulsador
2

#define LED_PIN_1 0 // Pin para el LED 1


#define LED_PIN_2 1 // Pin para el LED 2

void apagarLeds() {
PORTB &= ~((1 << LED_PIN_1) | (1 << LED_PIN_2)); // Apagar ambos LEDs
}

void encenderLed1() {
for (int i = 0; i < 3; i++) {
PORTB |= (1 << LED_PIN_1); // Encender LED 1 tres veces
delay(500);
PORTB &= ~(1 << LED_PIN_1); // Apagar LED 1
delay(500);
}
}

void encenderLed2() {
for (int i = 0; i < 3; i++) {
PORTB |= (1 << LED_PIN_2); // Encender LED 2 tres veces
delay(500);
PORTB &= ~(1 << LED_PIN_2); // Apagar LED 2
delay(500);
}
}

void parpadearLeds() {
for (int i = 0; i < 6; i++) {
PORTB |= ((1 << LED_PIN_1) | (1 << LED_PIN_2)); // Invertir estado de
los LEDs
delay(500);
PORTB &= (~(1 << LED_PIN_1) | ~(1 << LED_PIN_2));
delay(500);
}
}

void setup() {
// Configurar pines como entrada o salida
DDRC &= ~((1 << 0) | (1 << 1)); // Pulsadores como entradas
PORTC |= ((1 << 0) | (1 << 1)); // Activar pull-up en pines de
pulsadores
DDRB |= ((1 << LED_PIN_1) | (1 << LED_PIN_2)); // Leds como salidas
apagarLeds(); // Apagar LEDs inicialmente
}

void loop() {
if (!P1() && !P2()) { // Si ambos pulsadores están presionados
parpadearLeds(); // PORTB |= ((1 << LED_PIN_1) | (1 <<
LED_PIN_2)); // Encender ambos LEDs
} else if (!P1()) { // Si solo el pulsador 1 está presionado
apagarLeds(); // Apagar ambos LEDs
encenderLed1(); // Encender LED 1 tres veces
} else if (!P2()) { // Si solo el pulsador 2 está presionado
apagarLeds(); // Apagar ambos LEDs
encenderLed2(); // Encender LED 2 tres veces
} else { // Si ningún pulsador está presionado
apagarLeds(); // Apagar ambos LEDs
}
}

#define P1() (PINC & (1 << 0)) // Macro para leer el estado del pulsador
1
#define P2() (PINC & (1 << 1)) // Macro para leer el estado del pulsador
2

#define LED_PIN_1 0 // Pin para el LED 1


#define LED_PIN_2 1 // Pin para el LED 2

void apagarLeds() {
PORTB &= ~((1 << LED_PIN_1) | (1 << LED_PIN_2)); // Apagar ambos LEDs
}

void encenderLeds() {
PORTB |= ((1 << LED_PIN_1) | (1 << LED_PIN_2)); // Encender ambos LEDs
}

void encenderLed1() {
for (int i = 0; i < 3; i++) {
PORTB |= (1 << LED_PIN_1); // Encender LED 1 tres veces
delay(500);
PORTB &= ~(1 << LED_PIN_1); // Apagar LED 1
delay(500);
}
}

void encenderLed2() {
for (int i = 0; i < 3; i++) {
PORTB |= (1 << LED_PIN_2); // Encender LED 2 tres veces
delay(500);
PORTB &= ~(1 << LED_PIN_2); // Apagar LED 2
delay(500);
}
}

void parpadearLeds() {
for (int i = 0; i < 6; i++) {
PORTB ^= ((1 << LED_PIN_1) | (1 << LED_PIN_2)); // Invertir estado de
los LEDs
delay(500);
}
}

void setup() {
// Configurar pines como entrada o salida
DDRC &= ~((1 << 0) | (1 << 1)); // Pulsadores como entradas
PORTC |= ((1 << 0) | (1 << 1)); // Activar pull-up en pines de
pulsadores
DDRB |= ((1 << LED_PIN_1) | (1 << LED_PIN_2)); // Leds como salidas
encenderLeds(); // Encender LEDs inicialmente
}

void loop() {
if (!P1() && !P2()) { // Si ambos pulsadores están presionados
parpadearLeds(); // Parpadear ambos LEDs
apagarLeds(); // Apagar LEDs
} else if (!P1()) { // Si solo el pulsador 1 está presionado
apagarLeds(); // Apagar ambos LEDs
encenderLed1(); // Encender LED 1 tres veces
} else if (!P2()) { // Si solo el pulsador 2 está presionado
apagarLeds(); // Apagar ambos LEDs
encenderLed2(); // Encender LED 2 tres veces
} else { // Si ningún pulsador está presionado
// No hacer nada
}
}
/Ejemplo2
#define p1() (PINC & (1<<0))
#define p2() (PINC & (1<<1))
#define t1 300
int k=0; //variable k
//Ejercicio2
void setup() {//IniConfig
DDRC &=(1<<0) |~(1<<1);
DDRD=0b11111111 ;
PORTD=0;
}//FinConfig
void loop() {//Inilazo
if(p1()){
while(p1());
k++;
if(k>3)k=0;
}
switch(k){

case 0: PORTD=0B00000000; break;


case 1: PORTD=0B00000010; break;
case 2: PORTD=0B00000110; break;
case 3: PORTD=0B00001110; break;
}
}

#define P1() (PINC & (1 << 0)) //define un macro o etiqueta para P1
#define P2() (PINC & (1 << 1)) //define un macro o etiqueta para P2
#define P3() (PINC & (1 << 2)) //define un macro o etiqueta para P2
int k=0 ;

void setup() {
// put your setup code here, to run once:
DDRC &= ~(1 << 0); // ENTRADA
DDRC &= ~(1 << 1); // ENTRADA
DDRC &= ~(1 << 2); // ENTRADA
DDRD |= 0B11111111; // ACT COMO SALIDA
PORTD=0;
// PORTB |= ~(1 << 0) | ~(1 << 1); // ACTIVA EN PIN B0
}

void loop() {
if(P1()){
while(P1());
k++;
if(k>7)k=0;
}
switch (k)
{
case 0: PORTD=0B00000000; break; // ACTIVA EN PIN B0
case 1: PORTD=0B00000010; break; // ACTIVA EN PIN B0
case 2: PORTD=0B00001110; break; // ACTIVA EN PIN B0
case 3: PORTD=0B00011110; break; // ACTIVA EN PIN B0
case 4: PORTD=0B00111100; break; // ACTIVA EN PIN B0
case 5: PORTD=0B01111100; break; // ACTIVA EN PIN B0
case 6: PORTD=0B11111100; break; // ACTIVA EN PIN B0
case 7: PORTD=0B11111100; break; // ACTIVA EN PIN B0

REBOTE PROFE ARANO, CASE PARA CADA SEGMENTO DE DISPLAY

#define P1() (PINB & (1 << 0)) //define un macro o


etiqueta para P1
#define P2() (PINB & (1 << 1)) //define un macro o
etiqueta para P2
#define P3() (PINB & (1 << 2)) //define un macro o
etiqueta para P2
int k=0 ;
void setup() {
// put your setup code here, to run once:
DDRB &= ~(1 << 0); // ENTRADA
DDRB &= ~(1 << 1); // ENTRADA
DDRB &= ~(1 << 2); // ENTRADA
DDRD |= 0B11111111; // ACT COMO SALIDA
PORTD=0;
// PORTB |= ~(1 << 0) | ~(1 << 1); // ACTIVA EN
PIN B0
}

void loop() {
if(P1()){
while(P1());
k++;
if(k>8)k=0;
}
switch (k)
{
case 0: PORTD=0B00000000; break; // ACTIVA
EN PIN B0
case 1: PORTD=0B00000010; break; // ACTIVA
EN PIN B0
case 2: PORTD=0B00000110; break; // ACTIVA
EN PIN B0
case 3: PORTD=0B00001110; break; // ACTIVA
EN PIN B0
case 4: PORTD=0B00011110; break; // ACTIVA
EN PIN B0
case 5: PORTD=0B00111110; break; // ACTIVA
EN PIN B0
case 6: PORTD=0B01111110; break; // ACTIVA
EN PIN B0
case 7: PORTD=0B11111110; break; // ACTIVA
EN PIN B0
case 8: PORTD=0B11111110; break; // ACTIVA
EN PIN B0

}
}

Aplicacion de CASE con tres pulsadores que incrementan y decrementan leds

#define P1() (PINB & (1 << 0)) //define un macro o


etiqueta para P1
#define P2() (PINB & (1 << 1)) //define un macro o
etiqueta para P2
#define P3() (PINB & (1 << 2)) //define un macro o
etiqueta para P2
int k=0 ;

void setup() {
// put your setup code here, to run once:
DDRB &= ~(1 << 0); // ENTRADA
DDRB &= ~(1 << 1); // ENTRADA
DDRB &= ~(1 << 2); // ENTRADA
DDRD |= 0B11111111; // ACT COMO SALIDA
PORTD=0;
// PORTB |= ~(1 << 0) | ~(1 << 1); // ACTIVA EN
PIN B0
}
void loop() {
if(P1()){
while(P1());
k++;
if(k>8)k=0;
}

if(P2()){
while(P2());
k--;
if(k<0)k=8;
}

if(P3()){
while(P3());
k=0;
}

switch (k)
{
case 0: PORTD=0B00000000; break; // ACTIVA
EN PIN B0
case 1: PORTD=0B00000010; break; // ACTIVA
EN PIN B0
case 2: PORTD=0B00000110; break; // ACTIVA
EN PIN B0
case 3: PORTD=0B00001110; break; // ACTIVA
EN PIN B0
case 4: PORTD=0B00011110; break; // ACTIVA
EN PIN B0
case 5: PORTD=0B00111110; break; // ACTIVA
EN PIN B0
case 6: PORTD=0B01111110; break; // ACTIVA
EN PIN B0
case 7: PORTD=0B11111110; break; // ACTIVA
EN PIN B0
case 8: PORTD=0B11111110; break; // ACTIVA
EN PIN B0

}
}

Incremento y decremento con pulsador para display de 7 segmentos de 0a 9

#define P1() (PINB & (1 << 0)) // define un macro o


etiqueta para P1
#define P2() (PINB & (1 << 1)) // define un macro o
etiqueta para P2

const char digito[] = {0x3F, 0x06, 0x5B, 0x4F,


0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // Corrección
del valor del 9
char k = 0;

void ascendente() {
if (P1()) {
while(P1());
k++;
if (k > 9) k = 0; // Limitar el rango de k
}
}

void descendente() {
if (P2()) {
while(P2());
k--;
if (k < 0) k = 9; // Limitar el rango de k
}
}

void setup() {
DDRD = 0xFF; // Configurar PORTD como salida
para el display de 7 segmentos
PORTD = 0; // Inicializar PORTD a 0
DDRB &= ~(1 << 0); // Configurar PB0 como
entrada para el pulsador 1
DDRB &= ~(1 << 1); // Configurar PB1 como
entrada para el pulsador 2
//[Link](9600); // Inicializar la
comunicación serial
}

void loop() {
ascendente();
descendente();
PORTD = digito[k]; // Mostrar el valor en el
display de 7 segmentos
}

Incremento y decremento automático

#define P1() (PINB & (1 << 0)) // define un macro o


etiqueta para P1
#define P2() (PINB & (1 << 1)) // define un macro o
etiqueta para P2
const char digito[] = {0x3F, 0x06, 0x5B, 0x4F,
0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // Corrección
del valor del 9
char k = 0;

void ascendente() {
if (P1()) {
while(P1());
while (k <9){// Limitar el rango de k
k++;
delay(500); // Ajustar el retraso
según sea necesario
PORTD = digito[k];
}
k = 9;
}
}

void descendente() {
if (P2()) {
while(P2());
while(k>0){
k--;
delay(500);
PORTD = digito[k];
}
k = 0; // Limitar el rango de k
}
}

void setup() {
DDRD = 0xFF; // Configurar PORTD como salida
para el display de 7 segmentos
PORTD = 0; // Inicializar PORTD a 0
DDRB &= ~(1 << 0); // Configurar PB0 como
entrada para el pulsador 1
DDRB &= ~(1 << 1); // Configurar PB1 como
entrada para el pulsador 2
//[Link](9600); // Inicializar la
comunicación serial
}

void loop() {
ascendente();
descendente();
PORTD = digito[k]; // Mostrar el valor en el
display de 7 segmentos
}

CODIGO PARA EL LDR

#define P1() (PINB & (1 << 0)) // define un macro o


etiqueta para P1
#define P2() (PINB & (1 << 1)) // define un macro o
etiqueta para P2

const char digito[] = {0x3F, 0x06, 0x5B, 0x4F,


0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // Corrección
del valor del 9
char k = 0;
void ascendente() {
if (P1()) {
while(P1());
k++;
if (k > 9) k = 0; // Limitar el rango de k
}
}

void descendente() {
if (P2()) {
while(P2());
k--;
if (k < 0) k = 9; // Limitar el rango de k
}
}

void setup() {
DDRD = 0xFF; // Configurar PORTD como salida
para el display de 7 segmentos
PORTD = 0; // Inicializar PORTD a 0
DDRB &= ~(1 << 0); // Configurar PB0 como
entrada para el pulsador 1
DDRB &= ~(1 << 1); // Configurar PB1 como
entrada para el pulsador 2
DDRB |= (1 << 2); // Configurar PB2 como
salida para el LED
//[Link](9600); // Inicializar la
comunicación serial
ADC_init(); // Inicializar el ADC
}
void loop() {
int adc = ADC_GetData(0); // Leer el valor del
ADC en el canal 0

// Imprimir el valor del LDR en el monitor


serial
// [Link]("Valor LDR: ");
//[Link](adc);

if (adc <= 500) {


ascendente();
} else if (adc > 512) {
descendente();
}

PORTD = digito[k]; // Mostrar el valor en el


display de 7 segmentos

if (k > 4 && k < 9) {


PORTB |= (1 << 2); // Encender el LED en
PB2
} else {
PORTB &= ~(1 << 2); // Apagar el LED en PB2
}

delay(500); // Agregar un delay para evitar


cambios rápidos
}

void ADC_init() {
// Ajuste de salida a la derecha
ADMUX &= ~(1 << ADLAR);
// Referencia de voltaje AVCC
ADMUX |= (1 << REFS0);
ADMUX &= ~(1 << REFS1);

// Prescaler a 128
ADCSRA |= (1 << ADPS0);
ADCSRA |= (1 << ADPS1);
ADCSRA |= (1 << ADPS2);

// Encender el ADC
ADCSRA |= (1 << ADEN);
}

int ADC_GetData(int canal) {


// Seleccionar canal
ADMUX &= ~0x0F;
ADMUX |= canal;

// Iniciar la conversión
ADCSRA |= (1 << ADSC);

// Esperar a que la conversión termine


while (!(ADCSRA & (1 << ADIF)));

// Limpiar el flag ADIF


ADCSRA |= (1 << ADIF);

return ADC;
}
Este ejercicio de pap estoy modificando

#define P1() (PINB & (1 << 0)) // define un macro o


etiqueta para P1
#define P2() (PINB & (1 << 1)) // define un macro o
etiqueta para P2

// Pines de control del motor


const int IN1 = 2; // Pin digital 2
const int IN2 = 3; // Pin digital 3
const int IN3 = 4; // Pin digital 4
const int IN4 = 5; // Pin digital 5

// Secuencia de pasos para mover el motor bipolar


hacia la derecha
const int stepSequence[4][4] = {
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1}
};

void der_vueltaC() {
// Mueve el motor hacia adelante continuamente
for (int i = 0; i < 4; i++) {
digitalWrite(IN1, stepSequence[i][0]);
digitalWrite(IN2, stepSequence[i][1]);
digitalWrite(IN3, stepSequence[i][2]);
digitalWrite(IN4, stepSequence[i][3]);
delay(100); // Ajusta el delay para controlar
la velocidad del motor
}
}

void setup() {
DDRD = 0xFF; // Configurar PORTD como salida para
el display de 7 segmentos
PORTD = 0; // Inicializar PORTD a 0
DDRB &= ~(1 << 0); // Configurar PB0 como entrada
para el pulsador 1
DDRB &= ~(1 << 1); // Configurar PB1 como entrada
para el pulsador 2

// Configurar los pines de control del motor como


salidas
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}

void loop() {
der_vueltaC(); // Llama a la función que mueve el
motor continuamente hacia la derecha
}

{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}

Este solo da antihorario

#define P1() (PINB & (1 << 0)) // define un macro o


etiqueta para P1
#define P2() (PINB & (1 << 1)) // define un macro o
etiqueta para P2

int IN1 = 2; // Pin digital 2


int IN2 = 3; // Pin digital 3
int IN3 = 4; // Pin digital 4
int IN4 = 5; // Pin digital 5

int demora;

int paso[4][4] = {
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1}
};

void setup() {
DDRD = 0xFF; // Configurar PORTD como salida para
el display de 7 segmentos
PORTD = 0; // Inicializar PORTD a 0
DDRB &= ~(1 << 0); // Configurar PB0 como entrada
para el pulsador 1
DDRB &= ~(1 << 1); // Configurar PB1 como entrada
para el pulsador 2
}

void loop() {
if (P1()){
izq_vueltaC();
}

if (P2()){
der_vueltaC();
}
}
void der_vueltaC() {
for (int j = 0; j < 12; j++) {
// Mueve el motor hacia adelante
continuamente
for (int i = 3; i >=0; i--) {
digitalWrite(IN1, paso[i][0]);
digitalWrite(IN2, paso[i][1]);
digitalWrite(IN3, paso[i][2]);
digitalWrite(IN4, paso[i][3]);
delay(100); // Ajusta el delay para
controlar la velocidad del motor

}
}
}
void izq_vueltaC() { // Llama a la función que
mueve el motor continuamente hacia la derecha
for (int j = 0; j <12; j++) {
// Mueve el motor hacia adelante
continuamente
for (int i = 0; i <4; i++) {
digitalWrite(IN1, paso[i][0]);
digitalWrite(IN2, paso[i][1]);
digitalWrite(IN3, paso[i][2]);
digitalWrite(IN4, paso[i][3]);
delay(100); // Ajusta el delay para
controlar la velocidad del motor
}

}
PORTD=0;
//delay(2000);
}

Prueba Arduino del video

#define P2() (PINB & (1 << 1)) // define un macro o


etiqueta para P2
int IN1 = 2; // Pin digital 2
int IN2 = 3; // Pin digital 3
int IN3 = 4; // Pin digital 4
int IN4 = 5; // Pin digital 5
int demora = 50;

void setup() {
DDRD = 0xFF; // Configurar PORTD como salida para
el display de 7 segmentos
PORTD = 0; // Inicializar PORTD a 0
DDRB &= ~(1 << 0); // Configurar PB0 como entrada
para el pulsador 1
DDRB &= ~(1 << 1); // Configurar PB1 como entrada
para el pulsador 2
}

void loop() {

if (P2()){
der_vueltaC();
}
}
void der_vueltaC() {
for (int i = 0; i < 13; i++) // 512*4 = 2048 pasos
{
digitalWrite(IN1, HIGH); // paso 1
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(demora);

digitalWrite(IN1, LOW); // paso 2


digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(demora);

digitalWrite(IN1, LOW); // paso 3


digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(demora);

digitalWrite(IN1, LOW); // paso 4


digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(demora);
}

digitalWrite(IN1, LOW); // detiene por 5 seg.


digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(5000);

Prueba que no da

#define P2() (PINB & (1 << 1)) // define un macro o


etiqueta para P2
int IN1 = 2; // Pin digital 2
int IN2 = 3; // Pin digital 3
int IN3 = 4; // Pin digital 4
int IN4 = 5; // Pin digital 5
int demora = 50;

void setup() {
DDRD = 0xFF; // Configurar PORTD como salida para
el display de 7 segmentos
PORTD = 0; // Inicializar PORTD a 0
DDRB &= ~(1 << 0); // Configurar PB0 como entrada
para el pulsador 1
DDRB &= ~(1 << 1); // Configurar PB1 como entrada
para el pulsador 2
}

void loop() {

if (P2()){
der_vueltaC();
}
}
void der_vueltaC() {
for (int i = 0; i < 13; i++) // 512*4 = 2048 pasos
{

digitalWrite(IN1, LOW); // paso 4


digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(demora);

digitalWrite(IN1, LOW); // paso 3


digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(demora);

digitalWrite(IN1, LOW); // paso 2


digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(demora);

digitalWrite(IN1, HIGH); // paso 1


digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(demora);

digitalWrite(IN1, LOW); // detiene por 5 seg.


digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(5000);

Profe Arano secuencia de un motor bipolar

#define t 1000
void setup() {
DDRD = 0xFF; // Configurar PORTD como salida
PORTD = 0; // Inicializar PORTD a 0

void loop() {

PORTD=0b00000001;delay(t);
PORTD=0b00001000;delay(t);
PORTD=0b00000010;delay(t);
PORTD=0b00000100;delay(t);
PORTD=0;delay(2000);

}
Hasta aquí

PORTD=0b00001010;delay(t);
PORTD=0b00001001;delay(t);
PORTD=0b00000101;delay(t);
PORTD=0b00000110;delay(t);
Otra sec

PORTD=0b00001000;delay(t);
PORTD=0b00001100;delay(t);
PORTD=0b00000100;delay(t);
PORTD=0b00000110;delay(t);
PORTD=0b00000010;delay(t);
PORTD=0b00000011;delay(t);
PORTD=0b00000001;delay(t);
PORTD=0b10000001;delay(t);

pap (checking)

#define P1() (PINB & (1 << 0)) // define un macro o


etiqueta para P1
#define P2() (PINB & (1 << 1)) // define un macro o
etiqueta para P2
#define P3() (PINB & (1 << 2)) // define un macro o
etiqueta para P2
#define P4() (PINB & (1 << 3)) // define un macro o
etiqueta para P2
#define t 30

void setup() {
DDRD = 0xFF; // Configurar PORTD como salida para
el display de 7 segmentos
PORTD = 0; // Inicializar PORTD a 0
DDRB &= ~(1 << 0); // Configurar PB0 como entrada
para el pulsador 1
DDRB &= ~(1 << 1); // Configurar PB1 como entrada
para el pulsador 2
DDRB &= ~(1 << 2); // Configurar PB0 como entrada
para el pulsador 1
DDRB &= ~(1 << 3); // Configurar PB1 como entrada
para el pulsador 2
}

void loop() {
if (P1()){
izq_vueltaC();
}

if (P2()){
der_vueltaC();
}
if (P3()){
giro180();
}

if (P4()){
giro90();
}

}
void izq_vueltaC() {
for (int i = 0; i < 12; i++) {
PORTD=0b00000001;delay(t);
PORTD=0b00001000;delay(t);
PORTD=0b00000100;delay(t);
PORTD=0b00000010;delay(t);

}
PORTD=0;
delay(2000);
}

void der_vueltaC() {
for (int i = 0; i < 24; i++) {
PORTD=0b00000010;delay(t);
PORTD=0b00000100;delay(t);
PORTD=0b00001000;delay(t);
PORTD=0b00000001;delay(t);

}
PORTD=0;
delay(2000);
}
void giro180()
{
for (int i = 0; i < 6; i++) {
PORTD=0b00000010;delay(t);
PORTD=0b00000100;delay(t);
PORTD=0b00001000;delay(t);
PORTD=0b00000001;delay(t);

}
}
void giro90()
{
for (int i = 0; i < 1; i++) {
PORTD=0b00000010;delay(t);
PORTD=0b00000100;delay(t);
PORTD=0b00001000;delay(t);
PORTD=0b00000001;delay(t);

}
}

Practica carol

// Definición de macro para verificar el estado de


P1 (asumiendo que es un botón o interruptor activo
bajo)
#define P1() ((PINB & (1 << 0)))

void apagar() {
// Función para hacer parpadear un LED conectado
al pin 0 de PORTD
for (char j = 0; j < 6; j++) { // El índice 'j'
debe iniciar en 0 para 6 iteraciones
PORTD=0b11111111; // Enciende el pin 0 de
PORTD
delay(500); // Espera 500 milisegundos
PORTD=0; // Apaga el pin 0 de PORTD
delay(500); // Espera 500 milisegundos
}
}

void setup() {
// Configuración inicial del microcontrolador
DDRD=0b11111111; // Configura el pin 0 de DDRD
como salida (para controlar un LED)
DDRB &= ~(1 << 0); // Configura el pin 0 de DDRB
como entrada (para leer un botón)
PORTD=0b11111111;// Asegura que el pin 0 de PORTD
esté inicialmente apagado
}

void loop() {
// Bucle principal
if (P1()) { // Verifica si el botón o
interruptor conectado a PINB0 está presionado
apagar(); // Llama a la función para hacer
parpadear el LED
}
}

También podría gustarte