Ciao a tutti,
ho costruito un sistema Arduino che mi permette di gestire un presepe :
- Gestire l'illuminazione (sia la pubblica ad esempio strade, che case che sfondo)
- Gestire l'audio ( eseguire con df player mini) delle tracce audio che ho suddiviso in varie folder.
ora però devo fare una cosa che non riesco a fare e non so perchè, usando i delay devo giocare con le durate del giorno e della notte, in modo da far combaciare quelle che sono le "ore effettive" del ciclo, sono 8 fasi, ciascuna di un tempo variabile che va dagli 8 ai 12-13 minuti.
però per fare una misurazione corretta del tempo in essere, e di farlo combaciare con le fasi,
vorrei eseguire un cronometro da console, in modo da gestire il tempo in maniera perfetta tra una fase e un altra.
Avete qualche consiglio?
vi posto il mio sketch.
#include <DFRobotDFPlayerMini.h>
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#define ACTIVATED LOW
#define Start_Byte 0x7E
#define Version_Byte 0xFF
#define Command_Lenght 0xEF
#define Acknowledge 0x00
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
int volumedown = 3;
int volumeup = 4;
int i = 1;
int myvol = 0;
int analogValue = 0;
byte volumeLevel = 0;
const byte potPin = A0;
//01 - sun
//02 - sunset
//03 - night
//04 - sunrise
//05 - morning
//06 - late morning
//07 - midday
//08 - road to sunset
#define TIME_MSG_LEN 11 // time sync to PC is HEADER and unix time_t as ten ascii digits
#define TIME_HEADER 255 // Header tag for serial time sync message
#include "LiquidCrystal_I2C.h" // Added library*
#include "Wire.h" // For I2C
#include "LCD.h" // For LCD
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the default I2C bus address of the backpack-see article
//LiquidCrystal_I2C lcd(0x3F, 20,4);
int brightness = 0;
int fadeAmount = 5;
int rPin=3;
int gPin=5;
int bPin=6;
unsigned long currentTime;
unsigned long loopTime;
int redval;
int greenval;
int bval;
int greenval1;
int led1 = 4;
int led2 = 5;
int led3 = 6;
int led4 = 12;
int led5 = 13;
String string1;
void setup() {
mySoftwareSerial.begin(9600);
// Serial.begin(115200);
//setup Audio Device
pinMode(volumedown, INPUT);
pinMode(volumeup, INPUT);
digitalWrite(volumedown, HIGH);
digitalWrite(volumeup, HIGH);
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true);
}
Serial.begin(9600);
lcd.begin(20,4);
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
lcd.print("PRESEPE 2021....");
lcd.setCursor(0,1);
lcd.print("LOADING...");
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6,OUTPUT);
currentTime = millis();
loopTime = currentTime;
myDFPlayer.volume(30);
lcd.print("Day OK");
}
void loop() {
//Audio Ptenziometer
analogValue = analogRead(potPin); // get value from pot
volumeLevel = map(analogValue, 0, 1023, 0, 30);
myDFPlayer.volume(volumeLevel);
Serial.println(volumeLevel);
static unsigned long timer = millis();
if (digitalRead(volumedown) == ACTIVATED) {
Serial.println(myvol);
myvol = myvol - 5;
if (myvol == 0) {
Serial.println("Min Reached");
myvol = 0;
}
myDFPlayer.volume(myvol);
}
if (digitalRead(volumeup) == ACTIVATED) {
Serial.println(myvol);
myvol = myvol + 5;
if (myvol >30) {
Serial.println("Max Volume");
myvol = 30;
}else{
myDFPlayer.volume(myvol);
}
}
//end process
int rTot = 255;
int gTot = 255;
int bTot = 0;
Serial.println("START SUN");
myDFPlayer.loopFolder(1);
delay(7000);
lcd.clear();
lcd.print("START SUN..OK");
analogWrite( rPin, rTot);
analogWrite( gPin, gTot );
analogWrite( bPin, 0);
delay(1000);
for (int i = 0; i<=255; i++){
greenval = gTot - i;
analogWrite(gPin, greenval);
Serial.print("SUN - ");
Serial.print("Rosso: ");
Serial.print(redval);
Serial.print(" Green: ");
Serial.print(greenval);
Serial.print(" Blu: ");
Serial.println(bval);
lcd.setCursor(1,4);
string1 = String("R") + redval + String(" G") + greenval + String(" B") + bval;
lcd.print(string1);
redval = rTot;
delay(100);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
}
Serial.print("SUNSET - ");
lcd.clear();
lcd.print("START SUNSET");
myDFPlayer.loopFolder(2);
delay(1000);
for (int z = 0; z<=255; z++){
bval = bTot + z;
analogWrite(bPin, z);
brightness = brightness + fadeAmount;
Serial.print("Rosso: ");
Serial.print(redval);
Serial.print(" Green: ");
Serial.print(greenval);
Serial.print(" Blu: ");
Serial.println(bval);
lcd.setCursor(0,3);
delay(100);
string1 = String("R") + redval + String(" G") + greenval + String(" B") + bval;
lcd.print(string1);
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
if (z == 190){
digitalWrite(led3, HIGH);
lcd.setCursor(0,2);
lcd.print("LUCE:..");
Serial.println("Gruppo Case 3 ON");
lcd.setCursor(7,2);
lcd.print("3");
}
if (z == 200) {
digitalWrite(led4, HIGH);
Serial.println("Illuminazione Pubblica 4 ON");
lcd.setCursor(8,2);
lcd.print("..4");
}
if (z == 210) {
digitalWrite(led5, HIGH);
Serial.println("Illuminazione Pubblica 5 ON");
lcd.setCursor(11,2);
lcd.print("..5-> NOW ON");
}
}
Serial.print("START NIGHT - ");
myDFPlayer.loopFolder(3);
delay(1000);
lcd.clear();
lcd.print("START NIGHT..");
for (int t= 0; t <=200; t++){
redval = 200 - t;
if (redval == 1){
delay(510);
}
analogWrite(rPin, redval);
Serial.print("Rosso: ");
Serial.print(redval);
Serial.print(" Green: ");
Serial.print(greenval);
Serial.print(" Blu: ");
Serial.println(bval);
lcd.setCursor(0,3);
string1 = String("R") + redval + String(" G") + greenval + String(" B") + bval;
lcd.print(string1);
if (t == 20) {
lcd.setCursor(0,1);
lcd.print("LUCE:..");
digitalWrite(led1, HIGH);
lcd.setCursor(7,1);
Serial.println("Gruppo Case 1 ON");
lcd.print("1");
}
if (t == 30){
digitalWrite(led2, HIGH);
lcd.setCursor(8,1);
Serial.println("Gruppo Case 2 ON ");
lcd.print("..2-> NOW ON");
}
}
Serial.print("SUNRISE - ");
lcd.clear();
lcd.print("START SUNRISE..");
myDFPlayer.loopFolder(4);
delay(1000);
for (int u= 0; u <= 255; u++) {
greenval1 = greenval1 + u;
analogWrite(gPin, u);
Serial.print("Rosso: ");
Serial.print(redval);
Serial.print(" Green: ");
Serial.print(u);
Serial.print(" Blu: ");
Serial.println(bval);
lcd.setCursor(0,4);
string1 = String("R") + redval + String(" G") + greenval + String(" B") + bval;
lcd.print(string1);
delay(300);
if (u == 50) {
digitalWrite(led1, LOW);
Serial.println("Gruppo Case 1 OFF");
lcd.setCursor(0,1);
lcd.print("LUCE:..");
lcd.setCursor(7,1);
lcd.print("1");
}
if (u == 70){
digitalWrite(led2, LOW);
Serial.println("Gruppo Case 2 OFF ");
lcd.setCursor(8,1);
lcd.print("..2");
}
if (u == 80){
digitalWrite(led3, LOW);
Serial.println("Gruppo Case 3 OFF");
lcd.setCursor(11,1);
lcd.print("..3");
}
if (u == 120) {
digitalWrite(led4, LOW);
Serial.println("Illuminazione Pubblica 4 OFF");
lcd.setCursor(14,1);
lcd.print("..4");
}
if (u == 150) {
digitalWrite(led5, LOW);
Serial.println("Illuminazione Pubblica 5 OFF");
lcd.setCursor(17,1);
lcd.print("..5 OFF");
}
}
Serial.print("MORNING - ");
lcd.clear();
lcd.print("START MORNING..");
myDFPlayer.loopFolder(5);
delay(1000);
for (int b = 0; b <= 55; b++){
Serial.print("Rosso: ");
Serial.print(redval);
Serial.print(" Green: ");
Serial.print(greenval);
Serial.print(" Blu: ");
Serial.println(bval);
lcd.setCursor(1,4);
string1 = String("R") + redval + String(" G") + greenval + String(" B") + bval;
lcd.print(string1);
delay(300);
}
Serial.print("LATE MORNING - ");
myDFPlayer.loopFolder(6);
delay(1000);
lcd.clear();
lcd.print("MID MORNING");
for (int h = 0; h <=255; h++){
redval = h;
analogWrite(rPin,redval);
if (bval != 0) {
bval = bval - 1;
}
analogWrite(bPin, bval);
Serial.print("Rosso: ");
Serial.print(redval);
Serial.print(" Green: ");
Serial.print(greenval);
Serial.print(" Blu: ");
Serial.println(bval);
lcd.setCursor(1,4);
string1 = String("R") + redval + String(" G") + greenval + String(" B") + bval;
lcd.print(string1);
delay(1000);
}
Serial.print("Mid Day - ");
myDFPlayer.loopFolder(7);
delay(1000);
lcd.clear();
lcd.print("MID DAY");
for (int p = 0; p < 210; p++) {
analogWrite(bPin, p);
Serial.print("Rosso: ");
Serial.print(255);
Serial.print(" Green: ");
Serial.print(255);
Serial.print(" Blu: ");
Serial.println(p);
lcd.setCursor(1,4);
string1 = String("R") + redval + String(" G") + greenval + String(" B") + bval;
lcd.print(string1);
delay(2000);
}
Serial.print("Mid Day to Sunset - ");
lcd.clear();
lcd.print("MID DAY TO SUNSET");
myDFPlayer.loopFolder(8);
delay(1000);
for (int p = 0; p < 210; p++) {
bval = 210 - p;
analogWrite(bPin, bval);
Serial.print("Rosso: ");
Serial.print(255);
Serial.print(" Green: ");
Serial.print(255);
Serial.print(" Blu: ");
Serial.println(p);
lcd.setCursor(1,4);
string1 = String("R") + redval + String(" G") + greenval + String(" B") + bval;
lcd.print(string1);
delay(2000);
}
}