ecologix1971
| Inviato il: 20/6/2013,02:10
|
ciao a tutti,
nel sviluppare vari codici di prova alle prese con il cicalino del mio pptea sono giunto a realizzarne uno che altro non e' che un orologio con allarme e timer impostabibile direttamente dal pptea senza necessita' del pc, il tutto utilizzanto un unico tasto....tecnologia one touch ben nota....ma con qualche variante.
il pptea eco alarm emette delle note musicali in proporzione alle ore del giorno ed altrettante ma diverse note ogni quarto di ora, tipo i rintocchi dei vecchi orologi.
quando l'ora attuale corrisponde con quella impostata per l'allarme viene eseguita
una melodia che alla lontana somiglia alla musica di POPEYE, non so se la conoscete, avete presente quando apre la scatola degli spinaci?
la funzione timer e' comodissima per gli spaghetti che cosi' rimaranno senz'altro al dente.
il bello....o meglio.... l'impresa (per me) e' stato far entrare il tutto nella 24c16 da 2k che avevo a portata di mano....e' stata dura ma alla fine c'e' entrato....stava diventando una questione di principio.
e' qualche settimana che gira senza problemi
alla fine del codice trovate maggiori dettagli del funzionamento e caratteristiche
questo e' il codice che gira sulla versione 4_2_3
PRAGMA NO_NUM_LINE
'
' PPTEA ECO ALARM 3.6 24C16 2K
' 08 GIUGNO 2013
' PPTEA VERSION 4_2_3
' FIRMWARE 4_2_3WINPIC800
' VERSIONE DISPLAY 2 WIRE
' MEMORIA ESTERNA 24C16 (2K)
' TOKEN = 2041
'
' PAR(1) = ORA ALLARME
' PAR(2) = MINUTI ALLARME
' PAR(3) = STATO ALLARME 1 ON 0 OFF
' PAR(4) = ORA ATTUALE
' PAR(5) = MINUTI ATTUALI
' PAR(6) = GIORNO ATTUALE
' PAR(7) = MESE ATTUALE
' PAR(8) = ANNO ATTUALE
' PAR(10)= MINUTI TIMER
' B=POSIZIONE CARATTERE PER SETTAGGIO ALLARME
' BIT3 =UNICO PULSANTE UTILIZZATO
' BIT0=CADS=SENSORE TEMPERATURA LM35 DZ
' BIT14=ILLUMINAZIONE DISPLAY
'
'
'
'
PRAGMA EXTENDED2K_EEPROM
SETIO=&B110000000000001001 'SETTA DISPLAY LIBERO E A 2 FILI CON BIT3 COME INPUT E BIT0 COME CADS
CADS=1
OUT=0
GOSUB :PRESENTAZIONE
DIM PAR(12) AS WORD
CONSTANT NOTE=36
EEXTERNAL=0 'RICHIAMA DATI ALLARME IN MEMORIA
CELL=253
PAR(1)=REEPROM
CELL=254
PAR(2)=REEPROM
CELL=255
PAR(3)=REEPROM
GOSUB :ASSEGNA_VALORI
<img border=0 src=faccine\biggrin.gif width=20 height=20>ATI_LIMITE
DATA 24,60,2,24,60,32,13,50,0 'VALORI DI AZZERAMENTO PARAMETRO ORE,MIN,ON,OFF,ORE,MIN,GIORNI,MESI,ANNI
:NOTE_MELODIA
DATA _MI6,_SOL6,_SOL6,_SOL6,_FA6,_MI6,_SOL6,PAUSE 'MELODIA POPEYE SECONDO ECO
DATA _SOL6,_LA6,_FA6,_LA6,_DO6,_LA6,_SOL6,PAUSE
DATA _SOL6,_LA6,_FA6,_LA6,_DO6,_SI6,_LA6,_SOL6
DATA _LA6,_SOL6,_MI6, PAUSE
DATA _FA6,_SOL6,_SOL6,_SOL6,_LA6,_SI6,_DO6,PAUSE
:PREPRESTART
WAITMS 250
MESSAGE="ALARM"
S=CHR(58) 'SIMBOLO /
SS=""
JJ=0
LCDCLEAR
RESTORE
GOSUB :ELABORA_STATO
:PRESTART
GOSUB :RILEVA_TIMER
B=6 'POSIZIONE PER IL LAMPEGGIO
X=1 'NUMERO PARAMETRO
W=1
K=PAR(X) 'VALORE MOMENTANEO DEL PARAMETRO
READ LIM 'LEGGE I LIMITI DEI VARI PARAMETRI
LCDCLEAR
:START
LCDPOS=1
LCDWRITE=MESSAGE
LCDPOS=7
LCDWRITE=RIGHT("00"&PAR(W),2)&S
LCDPOS=10
LCDWRITE=RIGHT("00"&PAR(W+1),2)
IF X<>8 THEN :VISUALIZZA_STATO
STATO=RIGHT("00"&PAR(8),2)
:VISUALIZZA_STATO
IF X=10 THEN :VARIANTE_TIMER
LCDPOS=13+JJ
LCDWRITE=SS & STATO
:VARIANTE_TIMER
WAITMS 175
IF INPBIT(3)=1 THEN :MODIFICA_PARAMETRO
IF TIMER>= (TEMPO+4) THEN :PROSSIMO_PARAMETRO
IF X=10 THEN :LAMPEGGIO
IF X>=7 THEN :LAMPEGGIA_MESE_ANNO
:LAMPEGGIO
LCDPOS=B
LCDWRITE=" "
GOTO :ATTESA
:LAMPEGGIA_MESE_ANNO
LCDPOS=B
LCDWRITE=" "
:ATTESA
WAITMS 500
GOTO :START
:MODIFICA_PARAMETRO
GOSUB <img border=0 src=faccine\biggrin.gif width=20 height=20>ISPLAY_ON
GOSUB :RILEVA_TIMER
K++
IF K>=LIM THEN GOSUB :AZZERA_PARAMETRO
PAR(X)=K
IF X=3 THEN GOSUB :ELABORA_STATO
GOTO :START
:PROSSIMO_PARAMETRO
IF X=10 THEN :VISUALIZZA_TIMER
READ LIM
X=X+1
B=B+4
IF X=3 OR X=8 THEN GOSUB :LAMPEGGIA_STATO
IF X=4 THEN GOSUB :SET_TIME
IF X=6 THEN GOSUB :SET_DATE
IF X=9 THEN :THE_END
K=PAR(X)
GOSUB :RILEVA_TIMER
GOTO :START
:SET_TIME
LCDPOS=65
LCDWRITE="SET DATE/TIME"
GOSUB :RILEVA_TIMER
:SET_TIME_A
IF INPBIT(3)=1 THEN :SET_TIME_B
IF TIMER>=(TEMPO+4) THEN :THE_END
GOTO :SET_TIME_A
:SET_TIME_B
GOSUB :ASSEGNA_VALORI
B=6
WAITS 1
LCDCLEAR
MESSAGE="TIME"
STATO=" "
W=W+3
RETURN
:SET_DATE
B=6
GOSUB :RILEVA_TIMER
WAITS 1
LCDCLEAR
MESSAGE="DATE"
STATO=RIGHT("00"&PAR(8),2)
W=W+2
JJ=-1
S=CHR(47)
SS=S
RETURN
:RILEVA_TIMER
TEMPO=TIMER
RETURN
:AZZERA_PARAMETRO
K=0
IF X<=5 THEN RETURN
K=10
IF X=8 THEN RETURN
K=1
RETURN
:ELABORA_STATO
IF PAR(3)=0 THEN :STATO_OFF
IF PAR(3)=1 THEN :STATO_ON
RETURN
:STATO_ON
STATO="ON "
RETURN
:STATO_OFF
STATO="OFF"
RETURN
:LAMPEGGIA_STATO
B--
RETURN
:THE_END
'LCDPOS=65
'LCDWRITE="IT"&CHR(39)&"S READY !!! "
WAITS 1
LCDCLEAR
EEXTERNAL=0
CELL=253
WEEPROM=PAR(1)
CELL=254
WEEPROM=PAR(2)
CELL=255
WEEPROM=PAR(3)
IF X=4 THEN :INIZIO_PROGRAMMA
DAY=RIGHT("00"&PAR(6),2)
MONTH=RIGHT("00"&PAR(7),2)
YEAR=RIGHT("00"&PAR(8),2)
HOUR=RIGHT("00"&PAR(4),2)
MINUTE=RIGHT("00"&PAR(5),2
NEWSET=DAY & "/" & MONTH & "/" & YEAR & " " & HOUR & ":" & MINUTE & ":00 1"
SETDATE=NEWSET
:INIZIO_PROGRAMMA
LCDCLEAR
GOSUB :RILEVA_TIMER
:PARTENZA
TX=CADS1
T=TX*CAD_TO_TEMP
C++
TT+=T
IF C=20 THEN :CALCOLO_TEMPERATURA
IF INPBIT(3)=1 THEN :CHECK_ALARM
IF TIMER>= (TEMPO+9) AND J=0 THEN GOSUB <img border=0 src=faccine\biggrin.gif width=20 height=20>ISPLAY_OFF
LCDPOS=1
LCDWRITE=LEFT(DATE,8)
IF X=10 THEN :TIMER_ATTIVATO
LCDPOS=65
LCDWRITE=RIGHT(DATE,8)
HOUR=MID(DATE,9,3)
MINUTE=MID(DATE,13,2)
SECOND=MID(DATE,16,2)
IF SECOND = 0 AND MINUTE = 0 THEN GOSUB :SUONO_ORARIO
IF SECOND = 0 AND MINUTE = 15 THEN GOSUB :SUONO_QUARTI
IF SECOND = 0 AND MINUTE = 30 THEN GOSUB :SUONO_QUARTI
IF SECOND = 0 AND MINUTE = 45 THEN GOSUB :SUONO_QUARTI
IF J=1 THEN GOSUB :RILEVA_TIMER
IF PAR(3)=0 THEN :ALLARME_DISATTIVATO
LCDPOS=75
LCDWRITE=RIGHT("00"&PAR(1),2)&":"
LCDPOS=78
LCDWRITE=RIGHT("00"&PAR(2),2)
IF J=1 THEN :MELODIA
IF PAR(3)=0 THEN :PARTENZA
IF HOUR=PAR(1) AND MINUTE=PAR(2) THEN :ATTIVAZIONE_SVEGLIA
GOTO :PARTENZA
END
:ATTIVAZIONE_SVEGLIA
GOSUB <img border=0 src=faccine\biggrin.gif width=20 height=20>ISPLAY_ON
RESTORE :NOTE_MELODIA
J=1 'ORARIO CORRISPONDE CON ALLARME
:MELODIA
READ NOTA
D++
FRQ NOTA, 250
IF D=NOTE THEN :RESETTA_MELODIA
GOTO :PARTENZA
:RESETTA_MELODIA
D=0
H++
RESTORE :NOTE_MELODIA
IF H<4 THEN :PARTENZA 'LA MELODIA VIENE RIPETUTA PER 4 VOLTE
:STOP_MELODIA
CLR J,H,PAR(3)
GOSUB <img border=0 src=faccine\biggrin.gif width=20 height=20>ISPLAY_OFF
GOTO :PARTENZA
:CALCOLO_TEMPERATURA
C=0
TM=TT/20
LCDPOS=11
LCDWRITE=LEFT(TM,4)& CHR(223) &"C"
TT=0
GOTO :PARTENZA
:ALLARME_DISATTIVATO
LCDPOS=75
LCDWRITE=" OFF"
GOTO :PARTENZA
:PRESENTAZIONE
GOSUB <img border=0 src=faccine\biggrin.gif width=20 height=20>ISPLAY_ON
'LCDCLEAR
'LCDPOS=4
'LCDWRITE="WELCOME !!! "
'WAITS 1
LCDCLEAR
LCDPOS=1
LCDWRITE="PPTEA ECO ALARM"
'LCDPOS=65
'LCDWRITE="VER.3.6 08-06-13"
WAITS 2
RETURN
:CHECK_ALARM
IF X=10 THEN :PARTENZA
GOSUB <img border=0 src=faccine\biggrin.gif width=20 height=20>ISPLAY_ON
GOSUB :RILEVA_TIMER
:ATTESA_B
IF J=1 THEN :STOP_MELODIA
IF TIMER >= (TEMPO+1) THEN :PROSEGUI
IF INPBIT(3)=0 THEN :ATTESA_C
GOTO :ATTESA_B
:ATTESA_C
IF INPBIT(3)=1 THEN :SET_TIMER
IF TIMER>=(TEMPO+4) THEN :PARTENZA
GOTO :ATTESA_C
:PROSEGUI
GOTO :PREPRESTART
:SUONO_ORARIO
R=HOUR
U=_RE6
IF HOUR<13 THEN :INIZIO_CICLO
Y=12
:INIZIO_CICLO
GOSUB <img border=0 src=faccine\biggrin.gif width=20 height=20>ISPLAY_ON
FOR Z = 1 TO R-Y
FRQ U,150
WAITS 1
NEXT Z
CLR Y,U
GOSUB :RILEVA_TIMER
RETURN
:ASSEGNA_VALORI
PAR(4)=MID(DATE,10,2)
PAR(5)=MID(DATE,13,2)
PAR(6)=MID(DATE,1,2)
PAR(7)=MID(DATE,4,2)
PAR(8)=MID(DATE,7,2)
RETURN
:SUONO_QUARTI
U=_DO6
IF MINUTE=15 THEN GOSUB :R1
IF MINUTE=30 THEN GOSUB :R2
IF MINUTE=45 THEN GOSUB :R3
GOTO :INIZIO_CICLO
:RIPRISTINO_R
R=1
GOTO :INIZIO_CICLO
:R1
R=1
RETURN
:R2
R=2
RETURN
:R3
R=3
RETURN
<img border=0 src=faccine\biggrin.gif width=20 height=20>ISPLAY_ON
OUTBIT(14)=1
RETURN
<img border=0 src=faccine\biggrin.gif width=20 height=20>ISPLAY_OFF
OUTBIT(14)=0
RETURN
END
:SET_TIMER
CELL=252
PAR(10)=REEPROM
LCDCLEAR
MESSAGE="TIMER"
WAITMS 500
W=10
X=10
B=6
K=PAR(X)
LIM=61
S=":"
GOTO :START
:VISUALIZZA_TIMER
WEEPROM=PAR(10)
LCDCLEAR
RIFERIMENTO=INT(TIMER) 'MEMORIZZA VALORE TIMER
:TIMER_ATTIVATO
PASSATI=INT(TIMER) 'SECONDI PASSATI
RIMASTI=(PAR(10)*60)-PASSATI + RIFERIMENTO 'SECONDI RIMANENTI
LCDPOS=65
LCDWRITE=MESSAGE
LCDPOS=72
LCDWRITE=RIGHT("0"&RIMASTI/60 MOD 60,2)&":"&RIGHT("0"&RIMASTI MOD 60,2)
IF INPBIT(3)=1 THEN :FINE_TIMER
IF RIMASTI>0 THEN GOTO :PARTENZA
:FINE_TIMER
GOSUB <img border=0 src=faccine\biggrin.gif width=20 height=20>ISPLAY_ON
FRQ _RE6,1500
WAITMS 500
CLR X,W
LCDCLEAR
GOTO :PARTENZA
'
' UN SALUTO A TUTTO IL FORUM
' BY ECOLOGIX1971
'
Mi sono permesso di modificare il tuo post, "spoilerando" il codice per rendere più leggibile il tutto MKZ
CARATTERISTICHE E FUNZIONAMENTO
il PPTEA ECO ALARM al momento dell'accenzione chiede di impostare ora,minuti e stato dell'allarme facendo lampeggiare il parametro in questione ed illuminando il display.
all'inizio viene mostrato l'orario di allarme presente in memoria.
ogni parametro puo' essere modificato premendo l'unico tasto a disposizione (BIT3), se il tasto cessa di essere premuto, il settaggio passa automaticamente dopo circa 4 secondi al parametro successivo.
una volta impostato l'allarme, viene visualizzato il messaggio SET DATE/TIME.
a questo punto se si preme il tasto, si puo' impostare la data e l'orario attuale, utile nel caso si dovesse sostituire la batteria tampone del ds1307, evitando di collegare il PPTEA ECO ALARM al pc.
se durante il messaggio SET DATE/TIME non viene premuto il tasto, vengono prese data ed ora dalla memoria e dopo circa 4 secondi il PPTEA ECO ALARM parte.
automaticamente dopo qualche secondo l'illuminazione del display viene disattivata.
i parametri impostati vengono memorizzati all'interno del PPTEA.
il display mostra in alto a destra la temperatura ambiente espressa in gradi centigradi, in alto a sinistra la data attuale, in basso a sinistra ora, minuti e secondi attuali, in basso a destra l'ora dell'allarme, oppure se disattivato il messaggio OFF.
se durante il normale funzionamento viene premuto il tasto per un istante, si illumina soltanto il display, funzione comoda durante la notte.
se invece il tasto rimane premuto per circa 3 secondi il PPTEA ECO ALARM ritorna nella modalita' settaggio chiedendo nuovamente di impostare ora,minuti, stato dell'allarme ecc.
se durante il normale funzionamento viene premuto il tasto per due volte consecutive (doppio click), il PPTEA ECO ALARM entra in modalita' TIMER utile per una pasta sempre al dente.
a questo punto viene mostrato il messaggio TIMER e lampeggiano i minuti corrispondenti che possono essere modificati da 1 a 60 utlizzando il solito tasto.
trascorsi i famosi 4 secondi parte il timer.
alla fine del tempo impostato viene emesso un lungo beep ed il PPTEA ECO ALARM ritorna in modalita' normale.
anche il valore impostato per il timer viene memorizzato all'interno del PPTEA.
durante il funzionamento, ad ogni ora del giorno corrispondono tanti beep (nota RE6) quante sono le ore.
esempio se sono le 4 emettera' 4 beep. dopo mezzogiorno, ricomincia da uno anche perche' verso sera i beep sarebbero stati un po' troppi, quindi alle 18 i beep sono 6 e non 18.
il PPTEA ECO ALARM, segnala anche i quarti d'ora con un beep piu' basso (nota DO6).
esempio alle 16:15 fara' un beep basso, alle 18:30 due beep bassi oppure alle 14:45 tre beep bassi.
ogni quarto d'ora viene illuminato il display per qualche secondo.
veniamo alla funzione ALARM.
quando l'ora attuale corrispondera' con l'ora impostata per l'allarme, il PPTEA ECO ALARM, emettera' delle note consecutive somiglianti vagamente alla canzone di POPEYE.
le note sono un po' lente durante l'esecuzione in quanto il tutto continua a fungere, esempio scorrimento dei secondi, rilevazione della temperatura ecc.
la melodia viene ripetuta per quattro volte dopodiche' l'allarme si porta in posizione off.
durante l'esecuzione della melodia, premendo il tasto (indovinate quale) viene interrotta.
il PPTEA ECO ALARM e' nato da un piccolo codice di prova per testare l'uscita audio del PPTEA, poi si e' trasformato fino a questo punto
ancora un saluto a tutti
eco
Modificato da Bolle - 02/03/2017, 00:09:16
|