Perplessità e Dubbi...

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..

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

No, i pin A4 e A5 NON sono assegnati dalla libreria come SCL e SDA sono FISICAMENTE SCL ed SDA.
Poi sulla Arduino Uno revisione 3 sono stati aggiungi 2 pin che "duplicano" A4 e A5 quindi sono gli stessi 2 pin

Ciao nid69ita
ti ringrazio per il celere intervento e le info che ho seguito subito , facendo la mia presentazione nella sezione appropriata.
A proposito di A4 e A5 , affermando che su Arduino Uno R3 sono stati aggiunti altri 2 Pin SCL e SDA intendi dire che si possono usare solo in questo modo e non sono assegnabili come in/out Digitali? Dunque ho 2 Pin per la funzione SCL e 2 pre SDA ?
Grazie

No, i pin SDA e SCL li puoi anche usare come pin analogici o digitali. Ma sono fisicamente A4 e A5 su Arduino Uno e poi sono duplicati (in pratica han tirato un "filo") ai pin aggiuntivi in rev.3 SOLO per comodità.
Non è la libreria che dice che A4 e A5 sono SDA e SCL.
Cosi come lo SPI funziona sui pin 13,12,11 (sck,miso,mosi) e poi a scelta tua un pin cs/ss.
E anche rx e tx sono fisicamente i pin 0 e 1.
Su Arduino Mega i pin sono altri per alcune features.

Ok , molto chiara la tua spiegazione ma quello che non continuo a capire è perchè se io monitor i valori dei pin 0 e 1 (rx e tx) vedo a Random 1 o 0 e se collego un Pulsante , quando lo premo non avviene il cambio di stato , cosa che funziona su un Pin diverso es. il pin 7 (senza problemi) .
Uguale per i pin A4 e A5 se visualizzo il valore con Analog Read su monitor vedo il valore che passa da 0 a 1023 tutto questo senza che io li abbia dichiarati e gestiti nello sketch.
Scusa la mia insistenza sull'argomento
Grazie nuovamente.

I pin 0 (Rx) ed 1 (Tx) sono riservati alla comunicazione seriale che attivi quando inizializzi nel setup il serial monitor.

Quindi, i valori che appaiono su questi pin sono le rappresentazioni binarie dei caratteri che trasmetti o ricevi.

Grazie cyberhs
Lo immaginavo.. ho riguardato meglio la configurazione hardware.
Continuo a non spiegarmi A4 e A5....

Primo, e già ti è stato detto, come da REGOLAMENTO, punto 7, edita il tuo post iniziale e racchiudi il codice all'interno degli appositi tag CODE (quando vai in edit del tuo post, sono i primi a sinistra, fatti così: </>),

... poi, cosa esattamente non ti spieghi sui pin A4 ed A5 ?

Guglielmo

Per quanto riguarda il dubbio di A4 e A5 cerco di farmi capire meglio:
questi 2 pin sono utilizzati dalla Scheda Servo Adafruit 16-Channel 12-bit PWM/Servo Driver

Nel caso di Arduino UNO (non R3) il Produttore riporta questa configurazione:
+5v -> VCC
GND -> GND
Analog 4 -> SDA
Analog 5 -> SCL

Nel caso di Arduino UNO R3 e Mega
+5v -> VCC
GND -> GND
SDA -> SDA
SCL -> SCL

Io utilizzo Arduino R3 e perciò la scheda servo la collego ai Pin SCL e SDA e non ai Pin A4 e A5
dunque mi aspetterei di poterli utilizzare liberamente come anologiche o digitali.
Invece (il mio primo dubbio era che )A4 e A5 è come se venissero preservati dalla libreria Servo nel caso che la scheda fosse utilizzata con un Arduino (non R3).

In un post precedente mi è stato detto che i pin SDA e SCL su Arduino R3 è come se fossero stati duplicati , come se vi fosse un ponte fra i Pin A4 con SCL e A5 con SDA , non ne capisco l'utilità... facendo cosi se io utilizzo una sola coppia di SCL e SDA ovviamente escludo l'altra non potendo utilizzarli per altri scopi.
Se monitorizzo il valore di A4 e A5 con Analog read vedo che vengono scritti dei valori anche se io nello sketch non li gestisco.

Allora, giusto racchiudere il codice come hai fatto, ma ... lo devi fare editando il tuo primo post ... in basso a destra del post c'è un link "More", se ci vai sopra con il cursore si apre e hai "Modify" ... e modifichi il post. Poi torni a questo tuo ultimo post ed elimini l'inutile ripetizione del codice :smiley:

Venendo all'altra tua domanda ...
... stiamo parlando del bus I2C che, sul chip ATmega328p,è implementato su due pin che, o sono pin digitali (PC4/PC5) o sono porte analogiche (ADC4/ADC5) o sono i pin del bus I2c (SDA/SCL) ...
... questo proprio per come è costruito il chip (pin 27 e 28) :

Quindi, sulla scheda Arduino/Genuino UNO (R3 o meno), se devi collegare un device I2C lo devi collegare sui pin dedicati a questo scopo che sono gli stessi usati anche da A4 ed A5.

Che poi, per ragioni di comodità e di compatibilità con altre schede, nella versione R3 siano stati duplicati in un altra posizione poco importa ... sempre gli stessi pin sono e, se devi usare il bus I2C, NON puoi usarli per altre cose.

Guglielmo

... del resto, se guardi bene, questa cosa è valida anche per altri pin. Esempio, i pin del chip 17, 18 e 19, che possono essere usati come porte digitali (PB3, PB4 e PB5), sono anche usati dal bus SPI ... quindi, se usi dei devices connessi in SPI, perdi l'uso dei pin digitali 11, 12 e 13 di Arduino.

Guglielmo

P.S.: Occhio sempre a non confondere i pin "fisici" del chip e il nome reale delle porte, con i pin "logici" di Arduino.

Sei stato molto chiaro , ho riguardato attentamente l'Hardware (http://pighixxx.com/unov3pdf.pdf) a conferma della tua spiegazione che non fà una grinza.
Questo mi verrà sicuramente utile per configurare l'hardware correttamente.
Grazie
Adesso devo togliermi il dubbio sulla parte Software , quel "maledetto" Delay che mi costringe a fermare il ciclo e perdere i segnali delle periferiche.Ho visto che c'è molto sul Web a proposito di millis , dovrò approfondire.... Grazie ancora.

Per quanto riguarda la millis(), devi a studiarti come la si usa prima QUI, poi QUI ed infine leggi anche QUI e QUI ... vedrai che ti sarà tutto più chiaro :wink:

Guglielmo

Sarà fatto ........