BASTÃO SINALIZADOR

Ola pessoal. Nesta atividade vamos aprender a programar um bastão sinalizador. Este instrumento pode ser muito útil para emitir sinais luminosos que possam ser visto a distância. Com ele podemos exibir setas, sinais, letras, números e até palavras. Logo a baixo estão 4 imagens que ilustram a aparência final do bastão.



Figura 1 - Bastão sinalizador; ao lado o programador do arduino pro mini;


Figura 2 - Bastão com alguns leds ligados; quando balançado no ar uma imagem é projetada;


Figura 3 - Botão seletor; É possível selecionar 4 funções diferentes, que exibem diferentes imagens; Ao lado o arduino pro mini que controla o circuito;


Fugura 4 - Detalhe do cabo; A fonte de alimentação de energia ( uma bateria de 9V) fica dentro do cabo;

O sketch a seguir, possibilita que 4 animações diferentes sejam exibidas belo bastão. Destro do mesmo há um interruptor (conectado a porta analógica A6) que é acionado pela força centrifuga gerada no movimento do bastão. Quando este interruptor é acionado, a sequencia de piscadas seleciona é disparada. O botão seletor (Figura 3) permite a seleção das opções disponíveis. O mesmo está conectado a porta A7. Quando os botões mencionados a cima  são acionados, o valor das portas  analogígicas ( que retornam 1024)  caem para zero. quando uma opção é selecionada, o led correspondente ao número da opção pisca uma vez. 
Pessoal loga a baixo está o sketch do bastão sinalizador:

int ligado = 1;
int espaco = 18;

int triguer = A6;
int botao = A7;
int contador = 0;
int estado;
int funcao = 0;

void setup() {

  for (int i = 2; i <= 18; i++) {  // inicia uma sequencia de exibição e teste dos leds;
    pinMode(i, OUTPUT);
  }
  // apresentação inicial:
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, HIGH);
    delay(20);
  }
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, LOW);
    delay(20);
  }
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, HIGH);
    delay(20);
  }
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, LOW);
    delay(20);
  }
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, HIGH);
    delay(20);
  }
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, LOW);
    delay(20);
  }
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, HIGH);
  }
  delay(100);
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, LOW);
  }
  delay(100);
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, HIGH);
  }
  delay(100);
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, LOW);
  }
  delay(100);
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, HIGH);
  }
  delay(100);
  for (int i = 2; i <= 18; i++) {
    digitalWrite(i, LOW);
  }
  delay(100);
                          // fim da apresentação;
}

void loop() {

  // Inicio do programa principal; ************************************

  seletor ();            // função que verifica o estado do potão seletor;

  while (funcao == 1) { // exibe uma seta;

    seletor ();

    estado = analogRead(triguer);

    if (estado < 500) { // dispara a sequencia de piscadas quando o bastão é balançado;
      seta1 ();
    }
  }
  while (funcao == 2) { // exibe um traço;

    seletor ();

    estado = analogRead(triguer);

    if (estado < 500) {
      seta2 ();
    }
  }
  while (funcao == 3) { // exibe um desenho de linhas;

    seletor ();

    estado = analogRead(triguer);

    if (estado < 500) {
      ondas1 ();
    }
  }
  while (funcao == 4) { // exibe um desenho de linhas 2;

    seletor ();

    estado = analogRead(triguer);

    if (estado < 500) { // dispara a sequencia de piscadas;
      ondas2 ();
    }
  }
}

// Fim do programa principal; Inicio das funções; ********************

void seletor () {                 // esta função verifica se o botão seletor está pressionado, e aumanta uma unidade na variável FUNÇÃO quando isso ocorre;
  contador = analogRead(botao); 
  if ( contador < 500) {
    funcao++;
    if (funcao > 4 ) { // impede que a variável FUNÇÃO ultrapasse um valor máximo;
      funcao = 0;
    }
    digitalWrite(funcao + 1, HIGH); // faz o led correspondente ao número da função ligar e desligar;
    delay(1000);
    digitalWrite(funcao + 1, LOW);
  }
}

void seta1 () {                     // função da seta;
  for (int j = 0; j <= 17; j++) {
    //corpo da ceta
    for (int i = 8; i <= 12; i++) {
      digitalWrite(i, HIGH);
    }
    delay(ligado);
    for (int i = 2; i <= 17; i++) {
      digitalWrite(i, LOW);
    }
    delay(ligado);
  }
  //ponta da ceta 1
  for (int i = 2; i <= 17; i++) {
    digitalWrite(i, HIGH);
  }
  delay(ligado);
  for (int i = 2; i <= 17; i++) {
    digitalWrite(i, LOW);
  }
  delay(ligado);
  //ponta da ceta 2
  for (int i = 3; i <= 16; i++) {
    digitalWrite(i, HIGH);
  }
  delay(ligado);
  for (int i = 2; i <= 17; i++) {
    digitalWrite(i, LOW);
  }
  delay(ligado);
  //ponta da ceta 3
  for (int i = 4; i <= 15; i++) {
    digitalWrite(i, HIGH);
  }
  delay(ligado);
  for (int i = 2; i <= 17; i++) {
    digitalWrite(i, LOW);
  }
  delay(ligado);
  //ponta da ceta 4
  for (int i = 5; i <= 14; i++) {
    digitalWrite(i, HIGH);
  }
  delay(ligado);
  for (int i = 2; i <= 17; i++) {
    digitalWrite(i, LOW);
  }
  delay(ligado);
  //ponta da ceta 5
  for (int i = 6; i <= 13; i++) {
    digitalWrite(i, HIGH);
  }
  delay(ligado);
  for (int i = 2; i <= 17; i++) {
    digitalWrite(i, LOW);
  }
  delay(ligado);
  //ponta da ceta 6
  for (int i = 7; i <= 12; i++) {
    digitalWrite(i, HIGH);
  }
  delay(ligado);
  for (int i = 2; i <= 17; i++) {
    digitalWrite(i, LOW);
  }
  delay(ligado);
  //ponta da ceta 7
  for (int i = 8; i <= 11; i++) {
    digitalWrite(i, HIGH);
  }
  delay(ligado);
  for (int i = 2; i <= 17; i++) {
    digitalWrite(i, LOW);
  }
  delay(ligado);
  //ponta da ceta 8
  for (int i = 9; i <= 10; i++) {
    digitalWrite(i, HIGH);
  }
  delay(ligado);
  for (int i = 2; i <= 17; i++) {
    digitalWrite(i, LOW);
  }
  delay(espaco);
}
void seta2 () {       // função da seta2;

  //ponta da ceta 8
  for (int i = 7; i <= 13; i++) {
    digitalWrite(i, HIGH);
  }
  delay(ligado);
  for (int i = 2; i <= 17; i++) {
    digitalWrite(i, LOW);
  }
  delay(ligado);
}
void ondas1 (){                   // função da onda1
  for( int i = 2; i <= 18; i++){
    digitalWrite(i,HIGH);
    digitalWrite(20 - i,HIGH);
    delay(ligado);
    for(int j = 2; j<= 18; j++){
      digitalWrite(j,LOW);
    }
  }
}
void ondas2 (){                   // função da onda2;
  for( int i = 2; i <= 18; i++){
    digitalWrite(i,HIGH);
    digitalWrite(20 - i,HIGH);
    delay(ligado);
  }
    for(int j = 2; j<= 18; j++){
      digitalWrite(j,LOW);
   
  }
}

Nenhum comentário:

Postar um comentário