Falci
12/5/2015 - 10:48 PM

Useless box.ino

// Useless box
// Fernando Falci <falci at falci dot me>

#include <Servo.h> 
 
Servo servo;  
const int PIN_SERVO = 8;
const int PIN_BTN = 7;

const int POS_FECHADO = 100;
const int POS_ABRE_A_TAMPA = 70;
const int POS_ABERTO = 65;
const int POS_MEIO_CAMINHO = 50;
const int POS_TOCAR_BTN = 42;
const int POS_MUDAR_BTN = 34;

const int MOVE_LENTO = 10;
const int MOVE_NORMAL = 5;
const int MOVE_RAPIDO = 2;

int count = 0;

void setup() { 
  pinMode(PIN_BTN, INPUT);
  servo.attach(PIN_SERVO);  // attaches the servo on pin 9 to the servo object 
  servo.write( POS_FECHADO ); 
} 
 
 
void loop() {  
  
  while(digitalRead(PIN_BTN) != HIGH){ }  
  executaAcao();
  

} 

void executaAcao(){
  count++;
  switch(count){
    case 1:
    case 2:
    case 3:  acao1(); break;
    case 4: 
    case 5:  acao2(); break;
    case 6: 
    case 7: 
    case 8: 
    case 9:  acao3(); break;
    case 10: acao4(); break;
    case 11: 
    case 12: acao5(); break;
    case 13: acao6(); break;
    case 14: acao7(); break;
    case 15: acao8(); break;
    case 16: acao9(); break;
    case 25: 
      count = 0;
      executaAcao();
      break;
    
    default: aleatorio();
  }
  
  loop();
}

void aleatorio(){
  int acao = random(1, 9);
  
  switch(acao){
    case 1: acao1(); break;
    case 2: acao2(); break;
    case 3: acao3(); break;
    case 4: acao4(); break;
    case 5: acao5(); break;
    case 6: acao6(); break;
    case 7: acao7(); break;
    case 8: acao8(); break;
    case 9: acao9(); break;
  }   
    
}

// Move bem lento
void acao1(){
  move(POS_FECHADO, POS_MUDAR_BTN, MOVE_LENTO);
  delayApertar();
  move(POS_MUDAR_BTN, POS_FECHADO, MOVE_LENTO);
}

// Espera um pouco no começo, depois desliga e volta; velocidade normal
void acao2(){
  delay(2500);
  move(POS_FECHADO, POS_MUDAR_BTN, MOVE_NORMAL);
  delayApertar();
  move(POS_MUDAR_BTN, POS_FECHADO, MOVE_NORMAL);
}

// Move bem rapido
void acao3() {
  move(POS_FECHADO, POS_MUDAR_BTN, MOVE_RAPIDO);
  delayApertar();
  move(POS_MUDAR_BTN, POS_FECHADO, MOVE_RAPIDO);  
}

// Move rapido; Toca o btn mas nao muda e volta;
// depois faz igual acao3
void acao4() {
  move(POS_FECHADO, POS_TOCAR_BTN, MOVE_RAPIDO);
  delay(200);
  move(POS_TOCAR_BTN, POS_FECHADO, MOVE_RAPIDO);  
  delay(2000);
  acao3();
}

// Move normal; Para no meio do caminho; Move rapido e termina;
void acao5() {
  move(POS_FECHADO, POS_MEIO_CAMINHO, MOVE_NORMAL);
  delay(1000);
  move(POS_MEIO_CAMINHO, POS_MUDAR_BTN, );
  delayApertar();
  move(POS_MUDAR_BTN, POS_FECHADO, MOVE_NORMAL);  
}

// Move rapido; Fica alternando entre meio caminho a aberto;
// termina com acao3()
void acao6() {
  move(POS_FECHADO, POS_MEIO_CAMINHO, MOVE_NORMAL);
  
  for(int i=0; i<=3; i++){
    delay(100);
    move(POS_MEIO_CAMINHO, POS_ABERTO, MOVE_RAPIDO);
    delay(100);
    move(POS_ABERTO, POS_MEIO_CAMINHO, MOVE_RAPIDO);
  }
  
  delay(100);
  move(POS_MEIO_CAMINHO, POS_ABERTO, MOVE_RAPIDO);
  delay(100);
  move(POS_ABERTO, POS_MUDAR_BTN, MOVE_RAPIDO);
    
  delayApertar();
  move(POS_TOCAR_BTN, POS_FECHADO, MOVE_NORMAL); 
}

// Move rapido; Abre e fecha a tampa 3x;
// termina com acao3()
void acao7() {
  move(POS_FECHADO, POS_ABRE_A_TAMPA, MOVE_RAPIDO);
  delay(100);
  move(POS_ABRE_A_TAMPA, POS_FECHADO, MOVE_RAPIDO);
  delay(100);
  move(POS_FECHADO, POS_ABRE_A_TAMPA, MOVE_RAPIDO);
  delay(100);
  move(POS_ABRE_A_TAMPA, POS_FECHADO, MOVE_RAPIDO);
  delay(100);
  move(POS_FECHADO, POS_ABRE_A_TAMPA, MOVE_RAPIDO);
  delay(100);
  move(POS_ABRE_A_TAMPA, POS_FECHADO, MOVE_RAPIDO);
  delay(100);
  acao3();
}

// Abre a tampa, espera e faz acao3();
void acao8() {
  move(POS_FECHADO, POS_ABRE_A_TAMPA, MOVE_LENTO);
  delay(2500);
  move(POS_ABRE_A_TAMPA, POS_MUDAR_BTN, MOVE_RAPIDO);
    
  delayApertar();
  move(POS_TOCAR_BTN, POS_FECHADO, MOVE_RAPIDO); 
}

// Igual a acao2, porem mais demorado
void acao9(){
  delay(4000);
  move(POS_FECHADO, POS_MUDAR_BTN, MOVE_RAPIDO);
  delayApertar();
  move(POS_MUDAR_BTN, POS_FECHADO, MOVE_RAPIDO);
}

void delayApertar(){
  delay(200);
}  

void move(int de, int para, int velocidade){
  if(de == para) return;
  
  if(de < para){
  
    for(int i=de; i<=para; i++){
      servo.write(i);
      delay(velocidade);
    }
    
  } else {
  
    for(int i=de; i>=para; i--){
      servo.write(i);
      delay(velocidade);
    }
    
  }
}