Señales Digitales

¿como es una señal digital y como configuramos nuestro pines de nuestro Arduino para dicha señal ?






Señales digitales from Felipe Romano

Programas vistos durante la clase

Realizamos el Hola Mundo con el arduino pero utilizando un led y ya no el led integrado en nuestro arduino

El valor de la resistencia fue de 220ohms, recuerden que los diodos leds tienen polaridad, entonces deben ubicar el ánodo (+, polo positivo)  y cátodo (-, polo negativo) de su led.


El led siempre debe tener una resistencia para controlar la corriente que pasa a través de ellos, ya que si ustedes buscan la hoja de especificaciones de su componente (Datasheet) le indicara cual es la corriente máxima y mínima que soporta su leds, para que no se queme, así como cual es la caída de tensión en el led, que normalmente es de 1.8v a 2.2v dependiendo del tipo de led que estén usando. Normalmente los led soportan una corriente máxima de 20mA y una mínima para que encienda de 10mA. Por lo tanto vamos a controlar que pasen 15mA. por ley de ohm calculamos esa resistencia, por ejemplo sabemos que cada señal de nuestro arduino nos entrega 5v y la caida de voltaje que tiene el led es de 2.2v. Despejando la resistencia de V=RI nos quedaría R=V/I, sustituyendo los valores seria R=(5v-2.2v)/15mA = 186.66ohms, pero la resistencia comercial mas cercana a ese valor seria 220ohms.

Por lo tanto vamos meter nuestro led a dos nodos distintos en nuestra protoboard como se muestra en la imagen, una vez identificado el ánodo conectaremos en serie la resistencia, de ahí pondremos un alambre de nuestra señal del arduino al otro extremo de la resistencia. Para cerrar el circuito y el led encienda correctamente el cátodo de nuestro led ira a la linea de tierra (GND).
  




void setup() {
  // initialize digital pin 5 as an output.
  pinMode(5, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(5, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(5, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

---------------------------------------------------------------------------------------------------------------


El siguiente ejercicio que hicimos fue encender y apagar 3 leds de forma consecutiva.

La siguiente imagen muestra la forma en como se conectaran los leds, que es igual al ejemplo anterior solo que se hacen e veces y se alimentan con diferentes señales (pines) de nuestro arduino



int led1=2; // varaible tipo entero con valor de 5
int led2=3; // varaible tipo entero
int led3=4; // varaible tipo entero
int led4=5; // varaible tipo entero


void setup() { // bloque normalmente para la configuracion de los pines y la comunicacion del arduino 
  /* La configuracion  pinMode la podemos hacer de diferentes maneras por ejemplo al querer encender un led
  es una señal que saldra del arduino por lo tanto lo que estara dentro de los parentesis 
  sera pinMode(El pin que se configurará, el modo del pin ya sea señal de entrada o salida)*/

  pinMode(led1,OUTPUT); // pinMode declara el modo de configuracion del pin
  pinMode(led2,1); // 5 es el numero de pin que se encuentra conectado
  pinMode(led3,true); // OUTPUT es el modo que significa salida
  pinMode(led4,OUTPUT);
}
void loop() { //comienza el bucle principal del programa
  digitalWrite(led1,HIGH); //enciende led del pin 2
  delay(200);        // espera 200ms
  digitalWrite(led1,LOW);  // apaga led del pin 2
  delay(200);        // espera 200ms
  digitalWrite(led2,1); //enciende led del pin 3
  delay(200);        // espera 200ms
  digitalWrite(led2,0);  // apaga led del pin  3
  delay(200);        // espera 200ms
  digitalWrite(led3,true); //enciende led del pin 4
  delay(200);        // espera 200ms
  digitalWrite(led3,false);  // apaga led del pin 4
  delay(200);        // espera 200ms
  digitalWrite(led4,HIGH); //enciende led del pin 5
  delay(200);        // espera 200ms
  digitalWrite(led4,LOW);  // apaga led del pin 5
  delay(200);        // espera 200ms
}

----------------------------------------------------------------------------------------------------------------------

Como pudieron observar el codigo anterior indicamos al arduino que hiciera una tarea muy repetitiva
en varias lineas de codigo, pero con las estructuras de programación que vimos durante la primera clase, podemos reducir esa cantidad de lineas en unas cuantas.

Haciendo el ejemplo anterior pero ahora con una estructura "for"


int tiempo=200;
int n;

void setup() { //comienza la configuracion
  for (n=2;n<=5;n++) {      // el bloque de for se repetira hasta que se cumpla la condicion (n<=5)
    pinMode (n, OUTPUT);   // la instruccion declara el modo del pin, comienza con "n=2"  con una señal de salida
  }                        //  "n" se incrementara  hasta que tenga el valor de 8
}

void loop() {
  for (n=2 ;n<=5; n++) {
    digitalWrite (n, HIGH);   // enciende el led del pin que contenga el valor de "n"
    delay (tiempo);           // espera 200ms antes de pasar a la siguente instruccion
    digitalWrite (n, LOW);    // apaga el lud del pin que contenga el valor de "n"
    delay (tiempo);           // espera 200ms antes de pasar a la siguente instruccion
  }
}

-----------------------------------------------------------------------------------------------------------------

Con estructura while

int n=2;
int tiempo=350;

void setup() {
   for (n=5;n<9;n++) {      // el bloque de for se repetira hasta que se cumpla la condicion (n<9)
    pinMode (n, OUTPUT);   // la instruccion declara el modo del pin, comienza con "n=5"  con una señal de salida
  }                        //  "n" se incrementara  hasta que tenga el valor de 8

}

void loop() {
  n=2; // a n le asignamos el valor de 2
  while(n<=5){ // el siguiente bloque se repetira hasta que n sea mayor a 5
    digitalWrite (n, HIGH);   // enciende el led del pin que contenga el valor de "n"
    delay (tiempo);           // espera 200ms antes de pasar a la siguente instruccion
    digitalWrite (n, LOW);    // apaga el lud del pin que contenga el valor de "n"
    delay (tiempo);           // espera 200ms antes de pasar a la siguente instruccion
    n++; // n se incrementa en 1
  }

}

------------------------------------------------------------------------------------------------------------

El siguiente ejemplo fue para mostrar como crear funciones. Estas se crean cuando tienes que hacer una tarea repetitiva en diferentes partes de tu código.

int n;

void encender(int tiempo){ // creamos la funcion encender
  for (n=2;n<=5;n++) {
    digitalWrite (n, HIGH);   // enciende el led del pin que contenga el valor de "n"
    delay (tiempo);           // esperara el tiempo que recibira cuando sea llamado la funcion
    digitalWrite (n, LOW);    // apaga el lud del pin que contenga el valor de "n"
    delay (tiempo);        
  }

}


void setup() {
   for (n=2;n<=5;n++) {    
    pinMode (n, OUTPUT);
  }                      

}

void loop() {
 encender(100); // llamos a la funcion encender y le mandamos 100ms, que se le asignaran a tiempo
 encender(200); // llamos a la funcion encender y le mandamos 200ms, que se le asignaran a tiempo
 encender(300); // llamos a la funcion encender y le mandamos 300ms, que se le asignaran a tiempo
}

--------------------------------------------------------------------------------------------------------------------

otro ejemplo de funciones NO visto en clase

void setup() {
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);

}

void loop() {
  flash_led(2,500);
  flash_led(5,1000);
  flash_led(4,200);
  flash_led(3,200);
}

void flash_led(byte led, int espera){ // funcion flash_led, la cual pide el led que se va a encender y el tiempo que va a permanecer encendido y apagado
  digitalWrite(led,HIGH);
  delay(espera);
  digitalWrite(led,LOW);
  delay(espera);

}

---------------------------------------------------------------------------------------------------------------------

Otro ejemplo con funciones, en este código desee llegar cuando les hable de llamar una función, dentro de otra función, es un ejemplo de un semáforo que dura 1s antes de cambiar de luz roja a verde

int semaforo[] = {2, 3, 4};  // una variable array que seran los pines a utilizar

void setup() {
  for (int i = 0; i < 3; i++) { // se comienza desde 0 y termina en 2
    pinMode(semaforo[i], OUTPUT); // la variable semaforo contiene 3 elementos adentro de el
                                  // cuando i tenga el valor de 0, va configurar el pin 2
  }                               // como una salida, cuando i sea 1, el pin 3 se configurara
}

void apagar() {   // funcion que apaga los leds
  for (int i = 0; i < 3; i++) {
    digitalWrite(semaforo[i], false);
  }
}

void rutinaSemaforo(int tiempo) { // funcion rutinaSemaforo que recive el valor de tiempo cuando es llamada
  for (int i = 0; i < 3; i++) {
    apagar(); // se llama la funcion apagar y apaga todos los leds
    digitalWrite(semaforo[i], true); // enciende el led i
    delay(tiempo); // hace una pausa
  }

}

void loop() {
  rutinaSemaforo(1000); // se llama la funcion y se le asigna 1000 al tiempo

}

------------------------------------------------------------------------------------------------------------------------

Se propuso durante la clase un ejercicio

Realizar programa que te envie un msj SOS en morse por medio de un LED
los tiempo de duracion de el LED en mantenerse encendido y apagado son


Realizarlo con una funcion(tiempo).

//s(...) primer punto
encendido (200);
apagado   (200);
//segundo punto
encendido (200);
apagado   (200);
// tercer punto
encendido (200);
apagado   (200);
//O (---) primera raya
encendido (500);
apagado   (500);
//sgunda raya
encendido (500);
apagado   (500);
//tercera raya
encendido (500);
apagado   (500);
//s(...) primer punto
encendido (200);
apagado   (200);
//segundo punto
encendido (200);
apagado   (200);
// tercer punto
encendido (200);
apagado   (200);

--------------------------------------------------------------------------------------------------------------------

AHORA VEAMOS LAS SEÑALES DE ENTRADA (PUSHBUTTON)


Para el siguiente ejemplo necesitamos conectar un led y un pushbutton la resistencia sera de 10k ohms


El led se va a encender cada vez que presionemos el botón 

int estado=0;
void setup() {
  pinMode(3,INPUT);
  pinMode(4,OUTPUT);

}

void loop() {
  estado=digitalRead(3);
  if( estado==1)    // si el boton esta precionado entonces...
    digitalWrite(4,HIGH);  // enciende el led, del pin 4
    else                   // de lo contrario
    digitalWrite(4,LOW);   // apaga el led

}

-----------------------------------------------------------------------------------------------------------

TAREA 2

Usando un botón que NO se tenga que mantener pulsado para que un led permanezca encendido, Presionando nuevamente el mismo botón el led se apagara.

*** Como mandar mi tarea, revisa la pestaña de extra


-------------------------------------------------------------------------------------------------------------------



Juego, el siguiente circuito contara de 5 leds, estos leds se irán encendiendo y apagando de forma secuencial y cuando el led de en medio se encienda, el jugador apretar un botón, si acierta , un mensaje por el serial monitor , acertaste y la velocidad se incrementara.

int tiempo=1000;
int i=0;
void setup() {
  for(i=2;i<=6;i++){ //LEDS
    pinMode(i,OUTPUT);
    }
  pinMode(7, INPUT);//BOTON
  Serial.begin(9600);
}

void loop() {
  for(i=2;i<=6;i++){
    digitalWrite(i,HIGH);
    delay(tiempo);
    comprobar();
    digitalWrite(i,LOW);
    delay(tiempo);
  }

}

void comprobar(){
   if (digitalRead(7)==1 && i==4){
    Serial.println("Acertaste");
    tiempo=tiempo-150;
  }
}



--------------------------------------------------------------------------------------------------------------
Utilizar el led de 7 seg.


int ledA=0;
int ledB=1;
int ledC=2;
int ledD=3;
int ledE=4;
int ledF=5;
int ledG=6;
int ledH=7;

void cero(){
  digitalWrite(ledA,HIGH);
  digitalWrite(ledB,HIGH);
  digitalWrite(ledC,HIGH);
  digitalWrite(ledD,HIGH);
  digitalWrite(ledE,HIGH);
  digitalWrite(ledF,HIGH);
  digitalWrite(ledG,LOW);
}
void uno(){
  digitalWrite(ledA,LOW);
  digitalWrite(ledB,HIGH);
  digitalWrite(ledC,HIGH);
  digitalWrite(ledD,LOW);
  digitalWrite(ledE,LOW);
  digitalWrite(ledF,LOW);
  digitalWrite(ledG,LOW);
}
void dos(){
  digitalWrite(ledA,HIGH);
  digitalWrite(ledB,HIGH);
  digitalWrite(ledC,LOW);
  digitalWrite(ledD,HIGH);
  digitalWrite(ledE,HIGH);
  digitalWrite(ledF,LOW);
  digitalWrite(ledG,HIGH);
}
void tres(){
  digitalWrite(ledA,HIGH);
  digitalWrite(ledB,HIGH);
  digitalWrite(ledC,HIGH);
  digitalWrite(ledD,HIGH);
  digitalWrite(ledE,LOW);
  digitalWrite(ledF,LOW);
  digitalWrite(ledG,HIGH);
}
void cuatro(){
  digitalWrite(ledA,LOW);
  digitalWrite(ledB,HIGH);
  digitalWrite(ledC,HIGH);
  digitalWrite(ledD,LOW);
  digitalWrite(ledE,LOW);
  digitalWrite(ledF,HIGH);
  digitalWrite(ledG,HIGH);
}
void cinco(){
  digitalWrite(ledA,HIGH);
  digitalWrite(ledB,LOW);
  digitalWrite(ledC,HIGH);
  digitalWrite(ledD,HIGH);
  digitalWrite(ledE,LOW);
  digitalWrite(ledF,HIGH);
  digitalWrite(ledG,HIGH);
}
void seis(){
  digitalWrite(ledA,HIGH);
  digitalWrite(ledB,LOW);
  digitalWrite(ledC,HIGH);
  digitalWrite(ledD,HIGH);
  digitalWrite(ledE,HIGH);
  digitalWrite(ledF,HIGH);
  digitalWrite(ledG,HIGH);
}
void siete(){
  digitalWrite(ledA,HIGH);
  digitalWrite(ledB,HIGH);
  digitalWrite(ledC,HIGH);
  digitalWrite(ledD,LOW);
  digitalWrite(ledE,LOW);
  digitalWrite(ledF,LOW);
  digitalWrite(ledG,LOW);
}
void ocho(){
  digitalWrite(ledA,HIGH);
  digitalWrite(ledB,HIGH);
  digitalWrite(ledC,HIGH);
  digitalWrite(ledD,HIGH);
  digitalWrite(ledE,HIGH);
  digitalWrite(ledF,HIGH);
  digitalWrite(ledG,HIGH);
}
void nueve(){
  digitalWrite(ledA,HIGH);
  digitalWrite(ledB,HIGH);
  digitalWrite(ledC,HIGH);
  digitalWrite(ledD,HIGH);
  digitalWrite(ledE,LOW);
  digitalWrite(ledF,HIGH);
  digitalWrite(ledG,HIGH);
}
void setup() {
  int i;
  for(i=0;i<8;i++)
  pinMode(i,OUTPUT);

}

void loop() {
  cero();
  delay(500);

  uno();
  delay(500);

  dos();
  delay(500);

  tres();
  delay(500);

  cuatro();
  delay(500);

  cinco();
  delay(500);

  seis();
  delay(500);

  siete();
  delay(500);

  ocho();
  delay(500);

  nueve();
  delay(500);

}




-------------------------------------------------------------------------------------------------
Tarea 3

Mediante 4 botones hacer las combinaciones necesarias para encender los números del 0 -9
en los casos de exclusión mostrar una X.

B3 B2 B1 B0 S
0 0 0 0 0
0 0 0 1 1
0 0 1 0 2
0 0 1 1 3
0 1 0 0 4
0 1 0 1 5
0 1 1 0 6
0 1 1 1 7
1 0 0 0 8
1 0 0 1 9
1 0 1 0 X
1 0 1 1 X
1 1 0 0 X
1 1 0 1 X
1 1 1 0 X
1 1 1 1 X




-------------------------------------------------------------------------------------------------------------------------




El mismo código para usar el 7 segmentos pero con registros de puertos.

int arregloD[]={
// FEDCBA00
  B11111100,//0
  B00011000,//1
  B01101100,//2
  B00111100,//3
  B10011000,//4
  B10110100,//5
  B11110100,//6
  B00011100,//7
  B11111100,//8
  B10011100,//9
  };
int arregloB[]={
  B00000000,//0
  B00000000,//1
  B00000001,//2
  B00000001,//3
  B00000001,//4
  B00000001,//5
  B00000001,//6
  B00000000,//7
  B00000001,//8
  B00000001,//9
};

  int i;
 
void setup() {
 DDRD=B11111100;
 DDRB=B00000001;
}

void loop() {
  for(i=0;i<10;i++){
    PORTD=arregloD[i];
    PORTB=arregloB[i];
    delay  (500);
  }
}

__________________________________________________________________________

Hasta aqui termino la parte de señales digitales , ve a la parte de señales analogicas.



No hay comentarios:

Publicar un comentario