Menú principal

lunes, 4 de abril de 2016

Recorrido de números en display - Arduino

Hoy haremos un ejercicio en Arduino pero de forma diferente ya que utilizaremos un "display". Para conseguirlo podeis o bien comprarlo o bien hacerlo casero (como en mi caso), para ello os dejo un link donde aprendí yo a hacerlo: link.

Una vez dicho esto, os explicaré en lo que consiste el ejercicio: el programa a realizar en arduino debe imprimir todos los números (del 1 al 9) en el display mencionado anteriormente.

En el programa utilizaremos una matriz (matrices) donde asignaremos los leds que se deben encender para que aparezca el número en el display.




NOTA: El display que he utilizado lleva la siguiente estructura: Las letras de color negro son donde están colocados los leds y los números de color blanco que están al lado de las letras son os pines donde he conectado cada led al arduino. Dependiendo de donde conectéis estos habrá que modificar en cierta parte el programa.





Podéis ver un vídeo del funcionamiento en el siguiente link: vídeo

PROGRAMA RESUELTO

int matriz[10][7]={
  {
    1,1,1,1,1,1,0      }//numero 0
  ,
  {
    0,1,1,0,0,0,0      }//1
  ,
  {
    1,1,0,1,1,0,1      }//2
  ,
  {
    1,1,1,1,0,0,1      }//3
  ,
  {
    0,1,1,0,0,1,1      }//4
  ,
  {
    1,0,1,1,0,1,1      }//5
  ,
  {
    1,0,1,1,1,1,1      }//6
  ,
  {
    1,1,1,0,0,0,0      }//7
  ,
  {
    1,1,1,1,1,1,1      }//8
  ,
  {
    1,1,1,1,0,1,1      }//9
};

void setup()
{

  for(int i=2; i<9; i++)//desde entrada 2 a la 9 
  {
    pinMode(i, OUTPUT);//declarar como salida
  }

}
void loop()
{

  for(int num=0; num<10; num++)//repetir 9 veces 
  {
    for(int i=0; i<7; i++)//i representa cada led
    {
      if(matriz[num][i]==1)//si en el numero[0] el led [2]==1 enciendele si no apagale
      {
        digitalWrite(i+2, HIGH);//i+2 porque he conectado el primer led en el pin 2
      }
      else 
      {
        digitalWrite(i+2, LOW);
      }
    }
    delay(1000);//entre numero y numero espera 1 segundo

  }
}

domingo, 3 de abril de 2016

Matrices - Arduino / C

Una matriz es un conjunto de elementos (números) ordenados en filas y columnas, es decir un vector multidimensional (podríamos verlo también como varios vectores del mismo tamaño).  Las matrices se definen por su tamaño, que normalmente suele se de dos dimensiones. A los elementos de las matrices se accede por subíndices (si la matriz es bidimensional necesitaremos dos subíndices, tridimensional tiene tres subíndices...)

El ejemplo mas típico de una matriz es una imagen, cada pixel va  a tener un valor que corresponde al color o nivel de gris y a esos valores podemos acceder por los subindices. por ejemplo en la imagen de a continuación si tratamos de visualizar el elemento imagen[0][3] sería el 44. Siempre el primer elemento son las filas y luego las columnas y siempre, como en los vectores, se empieza en 0

                                                     

Como podemos observar,  una dimensión seria de 8 filas y la segunda dimensión seria de 8 columnas.

La estructura de una matriz es:


int matriz[dimension1][diemnsion2];

En el caso del imagen:

int imagen[8][8]; //irá de 0 a 7


INICIALIZACIÓN DE UNA MATRIZ:

Las matrices se pueden inicializar al igual que un vector, para hacerlo se seguirá la siguiente estructura:

int matriz[dimension1][dimension2] = {{elemento1,elemento2,...}, {...}};

A continuación os muestro un programa donde empleamos una matriz, su primera dimensión es de 4 elementos y la segunda dimensión de 3.

#include <stdio.h>
int main()
{
    int i,j;
    int matriz[4][3] = {{1,0,8}, {1.4,2}, {2,7,4}, {3,9,6}};

    for (i = 0; i<4; i++)
    {
        for (j=0; j<3; j++)
        {
            printf("matriz[%d][%d] = ", i, j);
            printf("%d \t", matriz[i][j]);
        }
        printf("\n");
    }
}

La pantalla de salida será:


sábado, 26 de marzo de 2016

Pide y ordena números en C

El ejercicio a realizar consiste en que el programa pida al usuario el número de números que quiere ordenar, que les introduzca y finalmente que el programa muestre los números introducidos de menor a mayor.

Programa resuelto:

#include <stdio.h>

int main()
{
    int numElem;
    int aux;

    printf("El programa ordenara de menor a mayor\n");

    printf("¿Cuantos numeros quieres ordenar?\n");
    scanf("%d", &numElem);
    int num[numElem];
    
    int i;
    for(i=0; i<numElem; i++)
    {
        printf("Intro elemento %d: ", i+1);
        scanf("%d",&num[i]);
    }

    //ordenamos
    int mini, posmini;

    for(i=0; i<numElem-1; i++)
    {
        posmini=i;
        mini=num[i];
        int j;
        for(j=i+1; j<numElem; j++)
        {
            if(mini>num[j])
            {
                posmini=j;
                mini=num[j];
            }
        }
        aux=num[i];
        num[i]=mini;
        num[posmini]=aux;
    }

    //visualizamos

    for(i=0; i<numElem; i++)
    {
        printf("%d  ", num[i]);
    }
return 1;

}

Lanzamiento de la app Prgrameva

Hoy os traigo algo diferente, solamente quería informaros del lanzamiento de una aplicación desarrollada únicamente para permitir un acceso más cómodo y directo tanto a las entradas de mi blog como a mi canal de youtube y otras páginas de interés.

Os dejo la apk para que la podáis descargar (gratuitamente). De vez en cuando iré actualizando la app y por lo tanto también el Link de descarga. Si tenéis alguna sugerencia no dudéis en dejarmela en los comentarios.

Link de descarga: App Programeva

sábado, 12 de marzo de 2016

Pide nombre en C

En este ejercicio os enseñare un nuevo tipo de variable, char. Esta variable guarda caracteres como por ejemplo símbolos o letras. Lo peculiar que tiene este tipo de variable es que le tienes que asignar el numero de "espacios" que vas a utilizar, por ejemplo si quiero introducir el nombre Isabel pondré:

int main()
{

char nombre[6];

}

Y en memoria se verá así: 


Como podemos observar al final nos ha metido un caracter que siempre aparecerá al final de la variable char '\0'

Otra peculiaridad que tienen las variables tipo char es que en los scanf por una parte en vez de poner %d como en los int, ahora pondremos %s, y por otra parte no se pone el &, lo veréis en el siguiente ejercicio.
                                
El programa a realizar consiste en pedir el nombre al usuario y saludarle. Como no sabemos el número de caracteres que va introducir pondremos por ejemplo 20:

#include <stdio.h>

int main()
{
    char nombre[20];

    printf("Intro tu nombre: ");
    scanf("%s", nombre);

    printf("Tu nombre es: %s", nombre);

}


Odena números en C

El siguiente ejercicio consiste en pedir al usuario que introduzca cuantos números quiere ordenar y a continuación pedirle que les introduzca por teclado. El programa les visualizará ordenados de menor a mayor.

Programa resuelto:

#include <stdio.h>

int main()
{
    int numElem;
    int aux;

    printf("El programa ordenara de menor a mayor\n");

    printf("¿Cuantos numeros quieres ordenar ?\n");
    scanf("%d", &numElem);
    int num[numElem];

    int i;
    for(i=0; i<numElem; i++)
    {
        printf("Intro elemento %d: ", i+1);
        scanf("%d",&num[i]);
    }

    //ordenamos
    int mini, posmini;

    for(i=0; i<numElem-1; i++)
    {
        posmini=i;
        mini=num[i];
        int j;
        for(j=i+1; j<numElem; j++)
        {
            if(mini>num[j])
            {
                posmini=j;
                mini=num[j];
            }
        }
        aux=num[i];
        num[i]=mini;
        num[posmini]=aux;
    }

    //visualizamos

    for(i=0; i<numElem; i++)
    {
        printf("%d  ", num[i]);
    }
return 1;

}

Emisor / receptor infrarrojo controlado desde arduino

En esta práctica controlaremos un emisor y un receptor infrarrojo desde arduino. La práctica consiste en acercar el emisor al receptor y cuando este detecte la luz emitida por el emisor se encienda un led, ya que los rayos infrarrojos no son perceptibles por el ojo humano.

A continuación os dejo el programa y un vídeo en el que podéis apreciar el funcionamiento:

Videohttps://www.youtube.com/watch?v=2KfdGZI2arw

Programa:

const int analogInPin = A1; // Pin analogico A1 para la lectura del Fototransistor
const int OutPin = 13;      // Pin para el indicador led 

int sensorValue = 0;        // Inicializamos el valor del sensor a 0

void setup() 
{
  pinMode(OutPin, OUTPUT);
}

void loop()  
{
  // leemos el pin y asignamos el valor a la variable.  
  sensorValue = analogRead(analogInPin);           
  
  // Si el valor obtenido es mayor a 1022 se activa el LED  
  if(sensorValue > 1022)
  {
    digitalWrite(OutPin, HIGH);
  }
  else
  {
    digitalWrite(OutPin, LOW);
  }
                    
}