Ciao a tutti
Stamattina ho cominciato a studiare il modulino RTC DS1307
Sono riuscito ad utilizzarlo, a settare l'orario e la data, tutto ok, d'altra parte e' veramente semplice.
Ora, ho anche una shiedl con 6 rele', ho fatto una cosina simpatica col telecomando, praticamente ho assegnato ai tasti del telecomando l'accensione di ogni rele', e gia' qui una prima domanduccia, con l'alimentazione usb ce la fa ad accenderne 4, con un alimentatore esterno ne eccita 5, il sesto accende giusto la lucina sulla shield ma non si sente il "tic" del rele', inoltre si blocca il sistema e devo togliere l'alimentazione per ripristinarlo. Forse la 5v di arduino non e' sufficiente? Devo alimentare a parte la shield? Comunque questo e' il dubbio minore.
Cio' che vorrei fare e' comandare automaticamente l'accensione dei vari rele' tramite l'RTC, programmandoli a vari orari.
Immagino sia semplicissimo, ma non ho trovato informazioni.
Escludendo la parte iniziale della codifica del telecomando, per ora ho questo script per la sola parte telecomando:
int RECV_PIN = 11; // Pin ricevitore Ir
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(9, OUTPUT); // Led 1
pinMode(10, OUTPUT); // Led 2
pinMode(13, OUTPUT); // Led di stato
pinMode(8, OUTPUT); //rele1
pinMode(7, OUTPUT); //rele2
pinMode(6, OUTPUT); //rele3
pinMode(5, OUTPUT); //rele4
pinMode(4, OUTPUT); //rele5
pinMode(3, OUTPUT); //rele6
irrecv.enableIRIn(); // Inizializza ricevitore Ir
Serial.begin (9600);
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX); //Risultato in esadecimale
irrecv.resume();
}
if(results.value == PONOFF){
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
}
if(results.value == P1){
digitalWrite(8, HIGH);
}
if(results.value == P0){
digitalWrite(8, LOW);
}
if(results.value == P2){
digitalWrite(7, HIGH);
}
if(results.value == P0){
digitalWrite(7, LOW);
}
if(results.value == P3){
digitalWrite(6, HIGH);
}
if(results.value == P0){
digitalWrite(6, LOW);
}
if(results.value == P4){
digitalWrite(5, HIGH);
}
if(results.value == P0){
digitalWrite(5, LOW);
}
if(results.value == P5){
digitalWrite(4, HIGH);
}
if(results.value == P0){
digitalWrite(4, LOW);
}
if(results.value == P6){
digitalWrite(3, HIGH);
}
if(results.value == P0){
digitalWrite(3, LOW);
}
}
Mentre l'RTC l'ho solo testato con l'esempio assieme alla libreria:
#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by mattt on the Arduino forum and modified by D. Sjunnesson
void setup()
{
Serial.begin(9600);
RTC.stop();
RTC.set(DS1307_SEC,1); //set the seconds
RTC.set(DS1307_MIN,23); //set the minutes
RTC.set(DS1307_HR,12); //set the hours
RTC.set(DS1307_DOW,4); //set the day of the week
RTC.set(DS1307_DATE,5); //set the date
RTC.set(DS1307_MTH,3); //set the month
RTC.set(DS1307_YR,9); //set the year
RTC.start();
}
void loop()
{
Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
Serial.print(":");
Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
Serial.print(":");
Serial.print(RTC.get(DS1307_SEC,false));//read seconds
Serial.print(" "); // some space for a more happy life
Serial.print(RTC.get(DS1307_DATE,false));//read date
Serial.print("/");
Serial.print(RTC.get(DS1307_MTH,false));//read month
Serial.print("/");
Serial.print(RTC.get(DS1307_YR,false)); //read year
Serial.println();
delay(1000);
}