#include "neotimer.h"
#include <Servo.h>
//#include <VarSpeedServo.h>
Servo Olhos; //define um servo-motor para os olhos
Servo Palpebras; //define um servo-motor para as palpebras
//VarSpeedServo Olhos; //define um servo-motor para os olhos
//VarSpeedServo Palpebras; //define um servo-motor para as palpebras
Neotimer Delay_A = Neotimer(1000); //Delay utilizado na função piscar
Neotimer Delay_B = Neotimer(1000); //Delay utilizado na função Observar
#define ServoA 2 //define a porta para os Olhos
#define ServoB 3 //define a porta para as Palpebras
int PE = 0; //dá prioridade ao evento piscar, interrompendo todos os outros eventos
int P_servo1 = 35; //deefine a posição do servo-motor para os olhos
int P_servo2 = 70; //deefine a posição do servo-motor para as palpebras
int Number = 0; //atua na função piscar como "frames"
int Number1 = 0; //atua na função observar como "frames"
int Number2 = 0; //atua na função observar como "frames"
//servo dos Olhos
int MinA = 80; //valor minimo de posicionamento do servo
int InterA = 145; //valor médio de posicionamento do servo
int MaxA = 180; //valor máximo de posicionamento do servo
//servo das palpebras
int MinB = 70; //valor minimo de posicionamento do servo
int MaxB = 180; //valor máximo de posicionamento do servo
int Repeticoes = 0; //define o numero de vezes que será os servos mudarão de posição
void setup() {
Serial.begin(115200); //define a velocidade de comunicação serial
randomSeed(analogRead(A7));
Olhos.attach(ServoA); //define a porta de controle como ServoA
Palpebras.attach(ServoB); //define a porta de controle como ServoA
Palpebras.write(MaxA); //define a posição default necessária para ambos os servos
Olhos.write(MaxB); // -
//Olhos.slowmove(255, MaxA);
//Palpebras.slowmove(255, MaxB);
delay(5000); //
}
void loop() {
Piscar(); //ok
//if (PE == 0){
observar();
//}
}
void Piscar(){
if (Delay_A.repeat()){
Delay_A.set(500); //define um tempo menor para executar a função piscar
Number++; //aumenta o valor de Number para dar continuidade aos comandos
if (Number == 1){ //verifica se Number é igual a 1
Palpebras.write(MinB); //fecha os olhos
Serial.println("fechar...");
PE = 1; //pausa outros eventos para piscar os olhos
Number++;
//Palpebras.slowmove(MaxB, 255);//fecha os olhos
}
if (Number == 3){ //verifica se Number é igual a 3
Palpebras.write(P_servo2); //abre os olhos
Serial.println("abrir...");
Number++;
//Palpebras.slowmove(P_servo2, 255); //abre os olhos
}
if (Number >= 5){ //verifica se Number é igual a 5
Serial.println("piscar ok");
Number = 0;
PE = 0; //libera todos os eventos após a finalização do evento atual
int set = random(5, 13); //escolhe um numero de 5 a 12
int set2 = random(0, 2); //escolhe um numero de 0 ou 1
if (set2 == 1){
set = set - 3;
}
Delay_A = set * 1000;
}
}
}
void observar(){
if (Delay_B.repeat()) { //repete os comandos dentro dele a cada 5 segundos após um periodo de espera
int Set = random(1, 6); //escolhe um valor numerico de 1 a 5
Delay_B = Set * 1000; //define um tempo aleatório entre 1 a 5 segundos de espera para cada frame
//Serial.print("Tempo para proximo frame = "); Serial.println(Set * 1000);
Number1++; //altera a posição dos "FRAMES" a cada tempo passado
if (Number2 == 0) {
Number2 = 1;
//Chances = random(1, 5); //escolhe um numero de 1 a 4 e guarda o valor em "Chances"
Repeticoes = random(3, 16); //escolhe um numero de 3 a 15 e guarda o valor em "Repeticoes"
}
if (Number1 >= 0 && Number1 <= Repeticoes) { // FRAME que repete
P_servo1 = random(MinA, MaxA + 1);
P_servo2 = random(MinB, MaxB + 1);
int VelA = random(10, 256);
int VelB = random(10, 256);
Olhos.write(P_servo1);
Palpebras.write(P_servo2);
//Olhos.slowmove(P_servo1, VelA);
//Palpebras.slowmove(P_servo2, VelB);
Number1++;
}
if (Number1 > Repeticoes) { // FRAME 3
Olhos.write(InterA);
Palpebras.write(MinB);
//Olhos.slowmove(InterA, 255);
//Palpebras.slowmove(MinB, 255);
int set1 = random(10, 31); //guarda em set1 um valor de 10 a 30 segundos
int Valor = set1 * 1000; //transforma o valor de set1 em milisegundos e guarda em "Valor"
Number1 = 0; //redefine "Number1" para ser usado novamente
Number2 = 0; //redefine "Number2" para ser usado novamente
Serial.println("Observar: Ok"); //imprime a confirmação da finalização de "Observation"
Serial.print("Proximo tempo:"); Serial.println(Valor); //imprime qual será o tempo de espera para que tudo se repita
Delay_B.set(Valor); //define o tempo escolhido em milisegundos
}
}
}