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