#include <LiquidCrystal.h>
#include <Arduino_FreeRTOS.h>
int leds[] = {14,15,16,17,18,19,20};
bool sleds[] = {LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW};
int sonarTrig = 10;
int sonarEcho = 9;
int buzina = 13;
int distancia = 0;
int som[] = {0, 232};
bool momentoSom = LOW;
int currentTime, previousTime = 0;
int currentTimeS, previousTimeS = 0;
LiquidCrystal lcd(8,7,6,5,4,3);
void setup() {
for(int i = 0; i < 8; i++) {pinMode(leds[i], OUTPUT);} // Iniciando os LEDS
pinMode(sonarTrig, OUTPUT); pinMode(sonarEcho, INPUT); pinMode(buzina, OUTPUT);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("Distancia : ");
xTaskCreate(distance, "distance",128, NULL, 3, NULL);
xTaskCreate(mostrarLcd, "lcd", 128, NULL, 2, NULL);
xTaskCreate(mainMethod, "main", 128, NULL, 1, NULL);
}
void distance(void *pvParameters){
int tempo;
while(1) {
digitalWrite(sonarTrig, 0);
digitalWrite(sonarTrig, 1);
digitalWrite(sonarTrig, 0);
tempo = pulseIn(sonarEcho, 1); // velocidade metros/microssegundos
distancia = tempo/58.2;
Serial.println(distancia);
delay(1000);
}
}
void piscarLeds(int ini, int f, int interval) {
apagarLeds(ini, f);
currentTime = millis();
if((currentTime - previousTime) >= interval) {
previousTime = currentTime;
for(int i = ini; i < f; i ++) {
sleds[i] = !sleds[i];
digitalWrite(leds[i], sleds[i]);
}
}
}
void apagarLeds(int ini, int f) {
for(int i = 0; i < 9; i++) {
if(i < ini || i >= f) {
sleds[i] = LOW;
digitalWrite(leds[i], sleds[i]);
}
}
}
void mostrarLcd(void *pvParameters) {
while(1) {
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(distancia);
delay(1000);
}
}
void loop() {
}
void mainMethod(void *pvParameters) {
//distancia = distance();
//mostrarLcd();
//Serial.println(distancia);
while(1) {
if(distancia < 30) {
piscarLeds(0, 2, 500);
tone(buzina, 232);
//tocar(0);
}else if(distancia < 100) {
piscarLeds(2,5, 1000);
currentTimeS = millis();
if((currentTimeS - previousTimeS) >= 500) {
previousTimeS = currentTimeS;
if(momentoSom == 1) tone(buzina, 232);
else noTone(buzina);
momentoSom = !momentoSom;
}
}else {
piscarLeds(5, 8, 0);
noTone(buzina);
}
//delay(500);
}
}