LusoRobótica - Robótica em Português

Robótica => Projectos de robótica => Projectos Concluídos => Tópico iniciado por: OxyGen em 12 de Maio de 2010, 21:23

Título: Carregar para contar
Enviado por: OxyGen em 12 de Maio de 2010, 21:23
Bem, já vou no meu terceiro projecto hoje...

Este consiste em carregar num botão e mostrar num display de 7 segmentos o contador. Foi programado através de interrupções... Eis o video:

Push To Count - Carregar para Contar (http://www.youtube.com/watch?v=n9Ua7qLjuwM#)

E o Código:
Código: [Seleccione]
// 0 -> 13,12,11,9,8,7
// 1 -> 11,9
// 2 -> 13,12,9,8,6
// 3 -> 12,11,9,8,6
// 4 -> 11,9,7,6
// 5 -> 12,11,8,7,6
// 6 -> 13,12,11,8,7,6
// 7 -> 11,9,8
// 8 -> 13,12,11,9,8,7,6
// 9 -> 12,11,9,8,7,6

int zero[]={13,12,11,10,9,8,7};
int um[]={11,9};
int dois[]={13,12,9,8,6};
int tres[]={12,11,9,8,6};
int quatro[]={11,9,7,6};
int cinco[]={12,11,8,7,6};
int seis[]={13,12,11,8,7,6};
int sete[]={11,9,8};
int oito[]={13,12,11,9,8,7,6};
int nove[]={12,11,9,8,7,6};
int todos[]={13,12,11,10,9,8,7,6};

int cont = 0;

void setup()
{
 for(int i=0; i<sizeof(todos);i++)
{
  pinMode(todos[i], OUTPUT);
}
  for(int i=0; i<sizeof(zero);i++)
  {
    digitalWrite(zero[i],HIGH);
    digitalWrite(10,LOW);
    digitalWrite(6,LOW);
  }

}
void loop()
{
  attachInterrupt(0,mostrar,FALLING);
  delay(1500);
}

void limpar()
{
  for(int i=0; i<sizeof(todos);i++)
  {
    digitalWrite(todos[i], LOW);
  }
}

void mostrar()
{
  cont++;
  switch(cont)
  {
    case 1:
    {
      limpar();
      for(int i=0; i<sizeof(um);i++)
      {
       
        digitalWrite(um[i],HIGH);
        digitalWrite(10,LOW);
        digitalWrite(12,LOW);
        digitalWrite(13,LOW);
    }
        break;
    }
    case 2:
    {
      limpar();
      for(int i=0; i<sizeof(dois);i++)
      {
        digitalWrite(dois[i],HIGH);
        digitalWrite(11,LOW);
        digitalWrite(10,LOW);
      }
        break;
      }
    case 3:
    {
       limpar();
       for(int i=0; i<sizeof(tres);i++)
       {
         digitalWrite(tres[i],HIGH);
         digitalWrite(13,LOW);
         digitalWrite(10,LOW);
         digitalWrite(7,LOW);
         digitalWrite(13,LOW);
       }
       break;
    }
   
    case 4:
  {
    limpar();
    for(int i =0; i<sizeof(quatro);i++)
    {
      digitalWrite(quatro[i],HIGH);
      digitalWrite(13,LOW);
      digitalWrite(10,LOW);
      digitalWrite(12,LOW);
      digitalWrite(10,LOW);
      digitalWrite(8,LOW);
    }
    break;
  }

    case 5:
  {
    limpar();
    for(int i=0; i<sizeof(cinco);i++)
    {
      digitalWrite(cinco[i],HIGH);
      digitalWrite(13,LOW);
      digitalWrite(9,LOW);
      digitalWrite(10,LOW);
    }
    break;
  }
  case 6:
  {
    limpar();
    for(int i=0; i<sizeof(seis);i++)
    {
      digitalWrite(seis[i],HIGH);
      digitalWrite(9,LOW);
      digitalWrite(10,LOW);
    }
    break;
  }
  case 7:
  {
    limpar();
    for(int i=0; i<sizeof(sete);i++)
    {
      digitalWrite(sete[i],HIGH);
      digitalWrite(13,LOW);
      digitalWrite(12,LOW);
    }
    break;
  }
  case 8:
  {
    limpar();
    for(int i=0; i<sizeof(oito);i++)
    {
      digitalWrite(oito[i],HIGH);
      digitalWrite(10,LOW);
    }
    break;
  }
  case 9:
  {
        limpar();
    for(int i=0; i<sizeof(nove);i++)
    {
      digitalWrite(nove[i],HIGH);
      digitalWrite(13,LOW);
      digitalWrite(10,LOW);
    }
    break;
  }
 
  default:
  {
        limpar();
    for(int i=0; i<sizeof(zero);i++)
    {
      digitalWrite(zero[i],HIGH);
      digitalWrite(10,HIGH);
      digitalWrite(6,LOW);
    }
    cont=0;
    break;
  }
 
  }
}

Título: Re: Carregar para contar
Enviado por: TigPT em 12 de Maio de 2010, 21:59
Muito bom... Parabéns! Bastante interessante para todos os que pretendem aprender a utilizar mecanismo de interrupções.