Mi aiutereste ad aumentare la sicurezza di un apertura porta da citofono?

fatto. grazie

Ormai Astro e Guglielmo e company mi hanno mischiato la malattia...
const int là non si può vedere :smiley: e nemmeno int sotto.......

Ne sono convinto, ma io sono ancora nella fase in cui non mi capacito del fatto che esegua davvero le operazioni che mi servono :slight_smile:

Nativoz:
Ne sono convinto, ma io sono ancora nella fase in cui non mi capacito del fatto che esegua davvero le operazioni che mi servono :slight_smile:

Studiati il codice che TU hai scritto :smiley: Suona strano :slight_smile:

Comunque, lo dico qua a nome di tutti :slight_smile: Per definire i pin non è necessario usare un 'int'. Quel const ha senso ma... un 'int' occupa 2byte come penso sai e non ne vale la pena usarlo e ti spiego il semplice motivo: 'int' comprende i numeri che vanno da -32768 a +32768:

Punto 1: non ti serve assolutamente tutto quel range di numeri per un pin visto che Arduino ne ha mooolti di meno.
Punto 2: Il punto più importante: un pin non è una variabile ma una costante, per cui quel const ha senso, ma siccome poi il const lo devi abbinare o a un 'byte' o un 'int' come nel tuo caso, allora tanto vale usare un semplice #define !
Zero consumo di flash e ram, cit Astro

Arduino è uno sfaticato cit me :slight_smile:

In poche parole definisci quei pin in un modo migliore, ovvero questo:

#define PinSensoreManomissione 2    
#define PinConsensoApertura  3   
#define PinPulsanteRiarmo 4

Poi, passiamo al secondo "difetto":

int StatoManomissione = 0;
int lettura = 0;

Nel tuo codice queste VARIABILI intere, (sì queste sono variabili :slight_smile: ) assumono soltanto 0 e 1.... Beh, ricordati che 'int' comprende numeri fino a 32mila e bla bla bla... bene. Che senso ha usare 2byte di memoria per una variabile che comprende solo 0 e 1? Non c'è l'ho contro di te, sto pensando al playground :slight_smile: :slight_smile: Quindi, il modo migliore per dichiarare quelle due variabili, che comprendono solo 0 e 1, è usare byte. Byte come ben sai, comprende numeri da 0 a 255, più che sufficienti per il tuo scopo o sbaglio ? :slight_smile: Beh penso proprio di sì!
Qui quelle int diventano:

byte StatoManomissione = 0;         
byte lettura = 0;

Spero che il mio grande discorso sia servito, ma non credo :slight_smile: Ma di sicuro almeno per TE sarà utile :slight_smile:

certo che è servito, sono io che sono uno sprecone e penso sempre di avere ram a go go :slight_smile:

A dirla tutta, per meglio entrare nell'ottica di risparmio, dove serve uno stato acceso/spento tipo lo stato di manomissione, persino il byte è sprecato ed è sufficiente il bit 1/0

farò tesoro e cercherò in futuro di sprecare meno ardu-risorse.
grazie

Nativoz:
A dirla tutta, per meglio entrare nell'ottica di risparmio, dove serve uno stato acceso/spento tipo lo stato di manomissione, persino il byte è sprecato ed è sufficiente il bit 1/0

Non ci scherzare perché .. si fa veramente ... con UNA variabile ti tipo BYTE puoi memorizzare ben 8 flag on/off diverse, una per bit.

Modo semplice per farlo è usare le apposite funzioni per agire sui bit di un byte che si trovano nel reference (sezione Bits and Bytes): bitSet(), bitClear, bitRead(), bitWrite(), modo più complesso, ma più veloce, saper usare bene gli operatori che agiscono sui bit (sempre nel reference, Bitwise Operators): and / or / not .

Guglielmo

Nativoz:
certo che è servito, sono io che sono uno sprecone e penso sempre di avere ram a go go :slight_smile:

A dirla tutta, per meglio entrare nell'ottica di risparmio, dove serve uno stato acceso/spento tipo lo stato di manomissione, persino il byte è sprecato ed è sufficiente il bit 1/0

farò tesoro e cercherò in futuro di sprecare meno ardu-risorse.
grazie

Bene :wink:


Carina la cosa che ha pubblicato Guglielmo, in effetti....