Buongiorno a tutti
Inanzi tutto un ringraziamento anticipato a tutto lo Staff e a coloro che permettono ai neofiti come me di avvicinarsi a questo prodotto attraverso lo scambio di informazioni .
La domanda sarà molto banale per alcuni di voi , ma come predetto sono alle prime armi con Arduino e nonostante sia riuscito a portare a termine il progetto che mi ero prefissato , mi sono rimasti alcuni dubbi , dunque li sottopongo a chiunque abbia voglia e tempo di rispondere.
Premessa per il mio progetto ho utilizzato :
Uno Shield con LPM11162 (modulo Voice)
Un LCD 20x4
Una Scheda Servo Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface
Un Arduino Uno
Non riesco a capire come le Librerie dei seguenti componenti occupano dei PIN che pur non essendo utilizzati nello SKetch da me sviluppato. Es per LPM11162 i PIN 1 e 2 RX eTX di Arduino UNO non posso utilizzarli come input o output in quanto vengono elaborati "probabilmente" dalla Librerria e rimangono cosi inutilizzabili , cosi anche per A4 e A5 usati con la scheda Servo , se non ho capito male i PIN A4 e A5 sono assegnati dalla libreria per essere usati come SCL e SDA quando in Arduino UNO esistono già sulla scheda i Pin SCL e SDA da me utilizzati (dunque altri 2 Pin inutilizzabili A4 e A5)
Lo schetch di esempio per utilizzare il disply LCD (libreria Liquid.Crystal.h) prevedeva dei collegamenti ai Pin A4 e A5 e ho dovuto dunque ri-indirizzarli su altri Pin liberi.
Se quello che ho scritto corrisponde al vero la mia domanda è la seguente :
Come faccio a sapere (prima di iniziare lo sviluppo di un progetto) quali Pin occupa una libreria per non incorrere a delle sovrapposizioni di Pin ? cosi da dimensionare correttamente Arduino in base agli ingressi e uscite necessari.
Per via di queste incomprensioni durante lo sviluppo del mio progetto sono dovuto passare da Arduino Uno a Mega in quanto mi mancavano 2 ingressi per gestire 2 Pulsanti , mentre (forse) avrei potuto sfruttare in qualche modo a me sconosciuto i Pin occupati citati in precedenza.
Un'altra domanda per chi ha già utilizzato DeadOn RTC - DS3234 Breakout per visualizzare Data e Ora su LCD , nonostante funziona tutto bene , non sono riuscito a capire come mai e' necessario aggiungere alla fine dello Sketch per la gestione data/ora l'istruzione Delay (1000) ; per avere una corretta scansione del clock di 1 Secondo. Se non metto il Delay il display visualizza dei valori in millisecondi.
Esempio da me usato:
*
DS3234 Library
Demonstrates the use a DS3234 RTC module with SPI library.
SCK pin D13
MOSI pin D11
MISO pin D12
SS pin D8 //default. You can change to any digital pin
*/
#include <SPI.h>
#include <Ds3234.h>
#define CS 8 // SS pin
int SET_ore_mess_1 = 7;
int SET_minuti_mess_1 = 49;
Ds3234 rtc(CS);
void setup() {
Serial.begin(9600);
// Set Date (year, month, date)
// ex. 2011/9/9
rtc.SetDate(15, 10, 8);
// Set Time (ampm, hour, minute, sec)
// ex. PM 2:25:30
rtc.SetTime(19, 48, 0);
// ex. 16:20;25
// rtc.SetTime(16, 20, 25);
Serial.print("RTC Hour Mode:");
Serial.println(rtc.GetHourMode());
}
void loop() {
byte year, month, date, ampm, hour, minute, sec;
rtc.GetDate(year, month, date);
// rtc.GetTime(ampm, hour, minute, sec);
rtc.GetTime(hour, minute, sec);
Serial.print(" Date:20");
Serial.print(year, DEC);
Serial.print("/");
Serial.print(month, DEC);
Serial.print("/");
Serial.print(date, DEC);
Serial.print("\tTime:");
// if (ampm == 0) Serial.print("AM ");
//else Serial.print("PM ");
Serial.print(hour, DEC);
Serial.print(":");
Serial.print(minute, DEC);
Serial.print(":");
Serial.println(sec, DEC);
if( ( hour >= SET_ore_mess_1) && ( minute== SET_minuti_mess_1 ))
Serial.print("It's OK ")&& (CMP_h_m_mess_1_OK=true) ;
else
Serial.print("It's NOT OK ")&& (CMP_h_m_mess_1_OK=false);
Serial.print(" ");
Serial.print(CMP_h_m_mess_1_OK);
delay (1000); >:(
}
In conclusione mi sembra di aver capito che Arduino esegue ciclicamente il Programma e il Delay blocca l'esecuzione e se in quel preciso momento voglio monitorare un ingresso (Es. un Pulsante o un Valore di un Trasduttore) questo non viene rilevato in quanto il programma è in Stop aspettando il giro dopo o quello ancora successivo. Ho letto che sarebbe più conveniente usare l'istruzione "millis" ma non sono riuscito a a capire la sintassi . Ci sono altri metodi?
Grazie nuovamente a Tutti e spero di non essere stato Noioso..