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