
Ok !!!
Grazie a tutti per le idee consigliate, che verranno tenute in considerazione nelle prossime release.
Ad esempio, tacitare solo il sonoro e poi solo dopo un certo tempo o alla pressione nuova del tasto, far scomparire il messaggio, è una buona idea, come allo stesso tempo, utilizzare una cassettiera in primis, aperta, con la numerazione delle medicine da assumere ed eventualmente crearne una comandata da un passopasso che mi permette di assumere la medicina corretta aprendo lo sportello giusto è altrettanto utile.
Mentre, per la gestione della memorizzazione delle medicine assunte e quelle mancate, occorre snellire prima il programma, poi, inserire una memory esterna dove archiviare il tutto e vedere se abbiamo ancora pin in/out disponibili per questo.
Fantascienza
, abbiamo creato così un distributore di medicine automatico !!!!!!
ATTENZIONE !!!! Se le medicine vengono poi assunte in modo sbagliato per un malfunzionamento, chi ne risponde.
Torniamo in noi.
Al momento ho provato questo listato perfettamente funzionante (a parte il clock non precisissimo) che andrebbe semplificato utilizzando dei vettori per la memorizzazione dei parametri.
Chi se la sente ? 
NB.: Il listato completo lo trovate postato qui ( http:/www.arduomemory.blogspot.com ) per problemi di spazio del post del forum 'max 9500 chars'.
/*
ArduoMemory R.0.0a
Revision:0.0a
Date 22/09/2012
Invent & Create by Giuseppe G. 04/09/2012
Compiling & Tested with IDE Arduino 1.0.1 & S.O. Win7
Main board: ARDUINO UNO R.2
The circuit display:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 7
* LCD D5 pin to digital pin 6
* LCD D6 pin to digital pin 5
* LCD D7 pin to digital pin 4
* LCD R/W pin to ground
* 10K resistor trimmer:
* ends to +5V and ground
* wiper to LCD VO pin
*/
// include the library code:
#include <LiquidCrystal.h>
#include <PS2Keyboard.h>
#include <Time.h>
//declaration variables
const int DataPin = 3; //data keyboard
const int IRQpin = 2; //clock IRQ
const int pushPin = 13; // internal LED connected to digital pin 13
const int buzzer = 8; // buzzer pin 8
const int ledmem = 9; // led memory alarm pin 9
const int ledalarm = 10; // led alarm active pin 10
int push = 0; // variable status botton
int prg = 0; // variable status program configuration
int memalarm = 0; // variable status alarm
int m_old = 0; // memory old minute alarm
int alarm = 0; // alarm active
int sel = 0; // select view alarms
int lamp = 0; // blink on/off
int sold = 0; // memory second old
int tast = 0; // value increase / decrease parameter
int ho_old=0; // mem old hour set
int mi_old=0; // mem old minute set
int da_old=0; // mem old day set
int mo_old=0; // mem old month set
int ye_old=0; // mem old year set
int alm_h = 0; // variable alarm hour view
int alm1_h = 0; // variable hour alarm 1
int alm2_h = 0; // variable hour alarm 2
int alm3_h = 0; // variable hour alarm 3
int alm4_h = 0; // variable hour alarm 4
int alm5_h = 0; // variable hour alarm 5
int alm6_h = 0; // variable hour alarm 6
int alm7_h = 0; // variable hour alarm 7
int alm8_h = 0; // variable hour alarm 8
int alm9_h = 0; // variable hour alarm 9
int alm10_h = 0; // variable hour alarm 10
int alm11_h = 0; // variable hour alarm 11
int alm12_h = 0; // variable hour alarm 12
int alm13_h = 0; // variable hour alarm 13
int alm14_h = 0; // variable hour alarm 14
int alm15_h = 0; // variable hour alarm 15
int alm16_h = 0; // variable hour alarm 16
int alm17_h = 0; // variable hour alarm 17
int alm18_h = 0; // variable hour alarm 18
int alm19_h = 0; // variable hour alarm 19
int alm20_h = 0; // variable hour alarm 20
int alm_m = 0; // variable alarm minute view
int alm1_m = 0; // variable minute alarm 1
int alm2_m = 0; // variable minute alarm 2
int alm3_m = 0; // variable minute alarm 3
int alm4_m = 0; // variable minute alarm 4
int alm5_m = 0; // variable minute alarm 5
int alm6_m = 0; // variable minute alarm 6
int alm7_m = 0; // variable minute alarm 7
int alm8_m = 0; // variable minute alarm 8
int alm9_m = 0; // variable minute alarm 9
int alm10_m = 0; // variable minute alarm 10
int alm11_m = 0; // variable minute alarm 11
int alm12_m = 0; // variable minute alarm 12
int alm13_m = 0; // variable minute alarm 13
int alm14_m = 0; // variable minute alarm 14
int alm15_m = 0; // variable minute alarm 15
int alm16_m = 0; // variable minute alarm 16
int alm17_m = 0; // variable minute alarm 17
int alm18_m = 0; // variable minute alarm 18
int alm19_m = 0; // variable minute alarm 19
int alm20_m = 0; // variable minute alarm 20
int med = 0; // variable alarm medicinale view
int med1 = 0; // medical alarm 1
int med2 = 0; // medical alarm 2
int med3 = 0; // medical alarm 3
int med4 = 0; // medical alarm 4
int med5 = 0; // medical alarm 5
int med6 = 0; // medical alarm 6
int med7 = 0; // medical alarm 7
int med8 = 0; // medical alarm 8
int med9 = 0; // medical alarm 9
int med10 = 0; // medical alarm 10
int med11 = 0; // medical alarm 11
int med12 = 0; // medical alarm 12
int med13 = 0; // medical alarm 13
int med14 = 0; // medical alarm 14
int med15 = 0; // medical alarm 15
int med16 = 0; // medical alarm 16
int med17 = 0; // medical alarm 17
int med18 = 0; // medical alarm 18
int med19 = 0; // medical alarm 19
int med20 = 0; // medical alarm 20
int pat = 0; // variable alarm patient
int pat1 = 0; // patient alarm 1
int pat2 = 0; // patient alarm 2
int pat3 = 0; // patient alarm 3
int pat4 = 0; // patient alarm 4
int pat5 = 0; // patient alarm 5
int pat6 = 0; // patient alarm 6
int pat7 = 0; // patient alarm 7
int pat8 = 0; // patient alarm 8
int pat9 = 0; // patient alarm 9
int pat10 = 0; // patient alarm 10
int pat11 = 0; // patient alarm 11
int pat12 = 0; // patient alarm 12
int pat13 = 0; // patient alarm 13
int pat14 = 0; // patient alarm 14
int pat15 = 0; // patient alarm 15
int pat16 = 0; // patient alarm 16
int pat17 = 0; // patient alarm 17
int pat18 = 0; // patient alarm 18
int pat19 = 0; // patient alarm 19
int pat20 = 0; // patient alarm 20
PS2Keyboard keyboard;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 4, 5, 6, 7);
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //standard configuration
void setup() {
pinMode(pushPin, INPUT); // sets the digital pin 13 as input
// set up the LCD's number of columns and rows:
keyboard.begin(DataPin, IRQpin);
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("ArduoMemory_R0.0");
//setTime(hr,min,sec,day,month,yr);
setTime(12,0,0,4,9,2012);
digitalWrite(ledmem, HIGH);
digitalWrite(ledalarm, HIGH);
digitalWrite(buzzer, HIGH);
delay (2000);
//lcd.setCursor(0, 0);
lcd.clear();
digitalWrite(ledmem, LOW);
digitalWrite(ledalarm, LOW);
digitalWrite(buzzer, LOW);
}// end setup
//*************************************************************************************
//*************************************************************************************
etc......................
Sono previsti 20 allarmi, 99 medicine, 99 pazienti.
Gli allarmi sono attivi, solo se il medicinale ha un valore diverso da zero.
Utilizzo le librerie:
time.h per il conteggio del tempo
PS2keyboard.h per la configurazione dei parametri
LiquidCrystal.h per la visualizzazione delle funzioni
Premendo il tasto PagUP, entro nella configurazione dell' ora e della data
Premendo il tasto PagDW, entro nella configurazione dei parametri degli allarmi, da AL1 a AL20
Premendo il tasto FrecciaUP, incremento il dato in editing
Premendo il tasto FrecciaDW, decremento il dato in editing
Premendo il tasto ENTER, confermo il dato inserito e passo al successivo
Premendo il tasto ESC, esco dalla configurazione o resetto la memoria dell'ultimo allarme
A Voi la parola.
PS.: Tenete conto che è da circa 1 anno che non programmo in C, e che ho preso spunto da esempi disponibili in rete nelle singole librerie.
Ciao.
Giuseppe G.