Ciao a tutti,
inizio con il fare una piccola premessa per spiegare lo scenario in cui mi trovo, poi esporrò i miei dubbi in modo da essere più chiaro possibile...
Al momento dispongo di un Arduino (UNO o Mega al momento è irrilevante) che effettua diverse operazioni, come lettura di sensori (operazioni veloci) o comunicazione con altri dispositivi via seriale (operazioni lente), quello che vorrei aggiungere è una funzionalità di "antifurto" ed è proprio a questo punto che iniziano le mie perplessità..
Ad antifurto inserito, infatti tutti gli eventi provenienti dai sensori di allarme dovrebbero avere la priorità su tutto il resto così ho pensato agli interrupt esterni e mi sono documentato un po', se può essere utile anche ad altri riporto i 4 principali link che mi sono segnato:
AttachInterrupt
Simple Pin Change Interrupt on all pins
Interrupt
Arduino gestione degli interrupt
Da quello che ho visto esistono principalmente 2 tipologie di interrupt esterni, singoli o di gruppo (perdonatemi la semplificazione ).
Con i "singoli" posso avere un'associazione uno a uno tra PIN e funzione, tuttavia sulla UNO sono presenti solo 2 PIN con questa funzionalità, mentre sulla MEGA solo 6 PIN.
Con quelli di "gruppo" ho un'associazione molti a uno dove n PIN convergono su un'unica funzione, tuttavia è possibile utilizzare ogni PIN presente sulla scheda.
Pensando ad un antifurto con solo 2 PIN (o 6 nel caso della MEGA) sono un po' stretto e non riuscirei a monitorare tutti i sensori direttamente (con dei sensori NC se li metto in serie a gruppi potrei ridurre il numero di ingressi da utilizzare, tuttavia perderei l'informazione puntuale relativa al sensore in allarme).
Così ho pensato agli interrupt di "gruppo", in questo modo al cambio di stato di ogni sensore il microcontrollore smette di fare quello che sta facendo e verifica se deve partire l'allarme.
Ma qui il primo problema, visto che l'Arduino fa anche altre cose e se il PIN di un sensore è nello stesso gruppo di un PIN di un sensore cosa succede? Parte un interrupt ad ogni variazione del sensore??
Fatte queste premesse al momento vedo solo 3 soluzioni possibili:
1-Riservo dei gruppi di PIN solo ed esclusivamente per la funzionalità di antifurto (questa soluzione non mi piace del tutto soprattutto visto che i pin non sono infiniti)
2-Collego i sensori sia ad un PIN di Arduino che ad un secondo (o terzo a seconda del numero di sensori) microcontrollore come ad esempio un attiny84 a sua volta è collegato ad un interrupt "singolo" di arduino.
In questo modo l'attiny non farà altro che controllare lo stato dei sensori senza che nient'altro lo rallenti, facendo scattare l'interrupt quando trova una variazione. (quest'altra soluzione invece ha lo svantaggio di aumentare la complessità del circuito)
3-Prendo un Arduino dedicato solo alla funzionalità di antifurto (questa in realtà non è una soluzione ma un ripiego)
Cosa mi consigliate? Esistono altre soluzioni valide oltre a quelle che mi sono venute in mente?
Grazie a tutti in anticipo