Utilizzo di Circular Buffer

Per individuare il codice di accesso di una serratura elettrica, o per disattivare un sistema di allarme, Matrix Multimedia, propone l’utilizzo del Circular Buffer.

Variabili e oggetti da inserire nel 3d System panel

  • keypremuto, di tipo Byte.
  • keytrovato,  di tipo Byte
  • NumBytes,  di tipo Byte.
  • Password[20], di tipo stringa e può contenere 20 caratteri .
  • dal menu Inputs inserisco il Keypad_3x4, collegato ai pins da 0 a 7 della porta D.
  • dal menu Outputs inserisco un LED_5mm che collego al pin 0 della porta B.
  • dal menu Data inserisco il Circular Buffer.
keypad circular 1

Per l’inserimento del codice utilizzo la funzione calcolo con l’espressione

Password = “12345”

La scelta dei cinque caratteri è arbitraria, è possibile inserire un numero qualsiasi, fino a un massimo di venti caratteri.

Ciclo principale

Nel ciclo principale l’istruzione

 keypremuto=keypad_3x4::GetAscii()

che ha come “Return Value (BYTE) ”, il contenuto di keypremuto.

Inserisco il carattere corrispondente al tasto premuto contenuto nella variabile keypremuto.

keypad circular getAscii

con la funzione decisione :

If keypremuto < 255

keypad circular if keypremuto

Verifico se il tasto è premuto.

 quindi inserisco il valore della variabile  keypremuto nel Circular Buffer con l’istruzione:

CircularBuffer1::PutByte(keypremuto

keypad circular 2

NumBytes= CircularBuffer1::getNumberBytes()

inserisco nella variabile NumBytes il valore di ritorno “Return Value(UINT)”.

Infine con l’istruzione :

keytrovato= CircularBuffer1::LookForvalue(Password,5,1,0)

verifico se i 5 caratteri ASCII inseriti corrispondono ai caratteri della Password.

con la funzione decisione:

if keytrovato = 1

controllo se la Password è corretta.

keypad circular if password

se il valore inserito corrisponde alla Password, con l’istruzione:

Circularbuffer1::Flushbuffer()

ripulisco il Circular buffer.

keypad circular 3

Con le istruzioni seguenti accendo il led collegato al pin 0 della porta B per 3 secondi, quindi lo spego nuovamente; il led sostituisce il relè di attuazione.

 

con la funzione calcolo con l’istruzione

NumBytes =0

Azzero la variabile NumBytes in attesa di un nuovo inserimento

 

Con il Component Macro

keypad_3x4::WaitReleased()

attendo il rilascio del tasto evitando eventuali rimbalzi meccanici.

C Code

rick 3Riccardo Monti