quinta-feira, 2 de julho de 2015

Sobre a Intervenção em Glaura

A música de fundo escolhida para tocar durante a intervenção foi Threnody - Goldmund.
Link para download: Threnody - Goldmund

Segue abaixo o código utilizado em nossa intervenção na Clareira. Ele faz com que 30 fios de leds pisquem em forma de cascata de maneira não uniforme, sendo que cada botão (input) deve acionar três fios (output). O arduíno requisitado deve ser o MEGA, com 53 entradas. Serão 10 entradas para os inputs (pinos 0 a 9) e 30 para os outputs (pinos 22 a 52). Para reproduzir a intervenção, posicione as extremidades dos fios nestes pinos citados.

#define LEDQTD 30
#define BOTAOQTD 10

int ledPino[LEDQTD];

int botaoPino[BOTAOQTD];
boolean botaoEstado[BOTAOQTD];
int botaoTimer[BOTAOQTD]; // momento em que o botao foi pressionado
int botaoUltimoMillis[BOTAOQTD]; // ultimo momento em que o botao estava desligado


void setup() {

  for (int i = 0; i < 10; i++) {
    // preenche os que serao usados para os pinos dos botao
    botaoPino[i] = 2 + i;

    // preenche o estado do botao
    botaoEstado[i] = false;

    // preenche o estado do botao
    botaoTimer[i] = 0;
    botaoUltimoMillis[i] = 0;

    // inicia o pino do botao
    pinMode(botaoPino[i], INPUT);
  }

  for (int i = 0; i < LEDQTD; i++) {
    // preenche os pinos onde os leds estao ligados
    ledPino[i] = 22 + i;

    // inicializa o pino do led
    pinMode(ledPino[i], OUTPUT);
  }

}

void loop() {

  // esse parte le todos os botoes e salva o momento em que ele foi desligado e ligado
  for (int i = 0; i < BOTAOQTD; i++) {
    if (digitalRead(botaoPino[i])) {
      botaoTimer[i] = millis();
    } else {
      botaoUltimoMillis[i] = millis();
    }
  }

  // essa parte define o comportamento do botao
  // botao 01
  int intervalo = botaoTimer[0] - botaoUltimoMillis[0];
  if (intervalo > 0) {
    //
    if (intervalo < 130) {
      digitalWrite(ledPino[2], LOW);
      digitalWrite(ledPino[0], HIGH);
    } else if (intervalo <= 260) {
      digitalWrite(ledPin[0], LOW);
    } else if (intervalo <=390) {
       digitalWrite(ledPin[0], HIGH);
    } else if (intervalo <= 420) {
      digitalWrite(ledPin[0], LOW);
      digitalWrite(ledPin[1], HIGH);
    } else if (intervalo <=550) {
      digitalWrite(ledPin[1], LOW);
      digitalWrite(ledPin[2], HIGH);
    } else if (intervalo <=680) {
      digitalWrite(ledPin[2], LOW);
    } else if (intervalo <=810) {
      digitalWrite(ledPin[2], HIGH);
    } else if (intervalo <= 940) {
      digitalWrite(ledPin[2], LOW);
      digitalWrite(ledPin[1], HIGH);
    } else if (intervalo <=1070) {
      botaoUltimoMillis[0] = millis();
    }
    //
  } else {
    digitalWrite(ledPino[0], LOW);
    digitalWrite(ledPino[1], LOW);
    digitalWrite(ledPino[2], LOW);
  }



  // essa parte define o comportamento do botao
  // botao 02
  intervalo = botaoTimer[1] - botaoUltimoMillis[1];
  if (intervalo > 0) {
    //
    if (intervalo < 30) {
      digitalWrite(ledPino[5], LOW);
      digitalWrite(ledPino[3], HIGH);
    } else if (intervalo <= 60) {
      digitalWrite(ledPino[3], LOW);
      digitalWrite(ledPino[4], HIGH);
    } else if (intervalo <= 90) {
      digitalWrite(ledPino[4], LOW);
      digitalWrite(ledPino[5], HIGH);
    } else if (intervalo <= 120) {
      botaoUltimoMillis[1] = millis();
    }
    //
  } else {
    digitalWrite(ledPino[3], LOW);
    digitalWrite(ledPino[4], LOW);
    digitalWrite(ledPino[5], LOW);
  }


  // botao 03
  intervalo = botaoTimer[2] - botaoUltimoMillis[2];
  if (intervalo > 0) {
    //
    if (intervalo < 100) {
      digitalWrite(ledPino[8], LOW);
      digitalWrite(ledPino[6], HIGH);
    } else if (intervalo <= 200) {
      digitalWrite(ledPino[6], LOW);
      digitalWrite(ledPino[7], HIGH);
    } else if (intervalo <= 500) {
      digitalWrite(ledPino[7], LOW);
      digitalWrite(ledPino[8], HIGH);
    } else if (intervalo <= 700) {
      botaoUltimoMillis[2] = millis();
    }
    //
  } else {
    digitalWrite(ledPino[6], LOW);
    digitalWrite(ledPino[7], LOW);
    digitalWrite(ledPino[8], LOW);
  }

  // botao 04
  intervalo = botaoTimer[3] - botaoUltimoMillis[3];
  if (intervalo > 0) {
    //
    if (intervalo < 30) {
      digitalWrite(ledPino[11], LOW);
      digitalWrite(ledPino[9], HIGH);
    } else if (intervalo <= 60) {
      digitalWrite(ledPino[9], LOW);
      digitalWrite(ledPino[10], HIGH);
    } else if (intervalo <= 90) {
      digitalWrite(ledPino[10], LOW);
      digitalWrite(ledPino[11], HIGH);
    } else if (intervalo <= 120) {
      botaoUltimoMillis[3] = millis();
    }
    //
  } else {
    digitalWrite(ledPino[9], LOW);
    digitalWrite(ledPino[10], LOW);
    digitalWrite(ledPino[11], LOW);
  }

  // botao 05
  intervalo = botaoTimer[4] - botaoUltimoMillis[4];
  if (intervalo > 0) {
    //
    if (intervalo < 50) {
      digitalWrite(ledPino[14], LOW);
      digitalWrite(ledPino[12], HIGH);
    } else if (intervalo <= 100) {
      digitalWrite(ledPino[12], LOW);
      digitalWrite(ledPino[13], HIGH);
    } else if (intervalo <= 150) {
      digitalWrite(ledPino[13], LOW);
      digitalWrite(ledPino[14], HIGH);
    } else if (intervalo <= 200) {
      botaoUltimoMillis[4] = millis();
    }
    //
  } else {
    digitalWrite(ledPino[12], LOW);
    digitalWrite(ledPino[13], LOW);
    digitalWrite(ledPino[14], LOW);
  }

  // botao 06
  intervalo = botaoTimer[5] - botaoUltimoMillis[5];
  if (intervalo > 0) {
    //
    if (intervalo < 100) {
      digitalWrite(ledPino[17], LOW);
      digitalWrite(ledPino[15], HIGH);
    } else if (intervalo <=200) {
      digitalWrite(ledPino[15], LOW);
      digitalWrite(ledPino[16], HIGH);
    } else if (intervalo <= 400) {
      digitalWrite(ledPino[16], LOW);
      digitalWrite(ledPino[17], HIGH);
    } else if (intervalo <=500) {
      botaoUltimoMillis[5] = millis();
    }
    //
  } else {
    digitalWrite(ledPino[15], LOW);
    digitalWrite(ledPino[16], LOW);
    digitalWrite(ledPino[17], LOW);
  }

  // botao 07
  intervalo = botaoTimer[6] - botaoUltimoMillis[6];
  if (intervalo > 0) {
    //
    if (intervalo < 50) {
      digitalWrite(ledPino[20], LOW);
      digitalWrite(ledPino[18], HIGH);
    } else if (intervalo <= 200) {
      digitalWrite(ledPino[18], LOW);
      digitalWrite(ledPino[19], HIGH);
    } else if (intervalo <=250) {
      digitalWrite(ledPino[19], LOW);
      digitalWrite(ledPino[20], HIGH);
    } else if (intervalo <=300) {
      botaoUltimoMillis[6] = millis();
    }
    //
  } else {
    digitalWrite(ledPino[18], LOW);
    digitalWrite(ledPino[19], LOW);
    digitalWrite(ledPino[20], LOW);
  }

  // botao 08
  intervalo = botaoTimer[7] - botaoUltimoMillis[7];
  if (intervalo > 0) {
    //
    if (intervalo < 70) {
      digitalWrite(ledPino[23], LOW);
      digitalWrite(ledPino[21], HIGH);
    } else if (intervalo < 140) {
      digitalWrite(ledPino[21], LOW);
      digitalWrite(ledPino[22], HIGH);
    } else if (intervalo < 210) {
      digitalWrite(ledPino[22], LOW);
      digitalWrite(ledPino[23], HIGH);
    } else if (intervalo < 280) {
      botaoUltimoMillis[7] = millis();
    }
    //
  } else {
    digitalWrite(ledPino[21], LOW);
    digitalWrite(ledPino[22], LOW);
    digitalWrite(ledPino[23], LOW);
  }

  // botao 09
  intervalo = botaoTimer[8] - botaoUltimoMillis[8];
  if (intervalo > 0) {
    //
    if (intervalo < 60) {
      digitalWrite(ledPino[26], LOW);
      digitalWrite(ledPino[24], HIGH);
    } else if (intervalo < 60) {
      digitalWrite(ledPino[24], LOW);
      digitalWrite(ledPino[25], HIGH);
    } else if (intervalo < 90) {
      digitalWrite(ledPino[25], LOW);
      digitalWrite(ledPino[26], HIGH);
    } else if (intervalo < 180) {
      botaoUltimoMillis[8] = millis();
    }
    //
  } else {
    digitalWrite(ledPino[24], LOW);
    digitalWrite(ledPino[25], LOW);
    digitalWrite(ledPino[26], LOW);
  }

  // botao 10
  intervalo = botaoTimer[9] - botaoUltimoMillis[9];
  if (intervalo > 0) {
    //
    if (intervalo < 40) {
      digitalWrite(ledPino[29], LOW);
      digitalWrite(ledPino[27], HIGH);
    } else if (intervalo < 160) {
      digitalWrite(ledPino[27], LOW);
      digitalWrite(ledPino[28], HIGH);
    } else if (intervalo < 240) {
      digitalWrite(ledPino[28], LOW);
      digitalWrite(ledPino[29], HIGH);
    } else if (intervalo < 280) {
      botaoUltimoMillis[9] = millis();
    }
    //
  } else {
    digitalWrite(ledPino[27], LOW);
    digitalWrite(ledPino[28], LOW);
    digitalWrite(ledPino[29], LOW);
  }

}