To insert small amounts of data into the microcontroller, a hexadecimal keyboard is sufficient, the solution is already covered in the post
[External Link Removed for Guests]
If you need to save GPIO you need to use I/O expansions.
The program that I share below uses PCF8574. The program does not use interrupt signals but scans the keyboard every half second.
The typed string is displayed on a simple web page and transmitted via serial terminal.
Saluti, poppolo di annex
Per inserire piccole quantità di dati nel microcontrollore basta una tastiera esadecimale come quella già tratttata nel post
[External Link Removed for Guests]
Nel caso occorra risparmiare GPIO bisogna usare le espansioni di I/O.
Il programma che di seguito condivido usa il PCF8574. Il programma non usa segnali di interrupt ma scansiona la tastiera ogni mezzo secondo.
La stringa digitata è visualizzata in una semplice pagina web e trasmessa tramite terminale seriale.
Code: [Local Link Removed for Guests]
'' *************************************************************************************
' ***** File Info *****
' *************************************************************************************
' Filename: PCF8574_KEYB
' Date : 08/01/2020
' Version : 0_b3
' Edit. by: MarioL.
' Function: test membrane 4X4 keiyboard on I2C bus using PCF8574 interface
' Firmware: ANNEX WiFi 1.39b9 public
' Hardware: D1 mini, PCF8574 module, 4X4 membrane keyboad.
' Doc.Ref.: Annex WiFi RDS Help Version 1.39, 4X4 membrane keyboad spec., PCF8574 datasheet
' Note : timered scan for key pressed, no interrupt used!
' ***************************************************************************************
'see also https://groups.google.com/forum/#!category-topic/annex_wifi_rds/projects/nVai6dXh8kk
'variables
PCFaddKB = &H20 'PCF8574's address for Key Board interface
n = 0 'number for tempor. use
R = 0 'value from row
C = 0 'value from coloumn
CpR = 0 'summ column + row, mean keyboard's selection
KeyCar$ = "" ' keyboard's charactern pressed
CmpStrng$ = "" 'composed sting, (sequence of characters pressed)
'hardware setup
I2C.setup 4, 5 'set bus I2C: pin GPIO4 (D2) for SDA (Serial DAta) and GPIO5 (D1) for SCL (Serial CLock)
onhtmlreload lblDrawPage 'draw simple web
gosub lblDrawPage 'draw simple web page
timer0 500, lblKeyBrdRead
wait
lblDrawPage: 'simple web page for variable monitoring
cls
a$ = ""
a$ = a$ + |<h1><strong> Membrane Keyboard 4X4 Evaluation page</h1></strong>| 'un titolo per la pagina
a$ = a$ + |Press D for delete last caracter, press # and * at same time for clear composite string,|
a$ = a$ + |<br><br><br>|
A$ = A$ + |Variable CpR = | + textbox$(CpR,"IDtxtCrt")
A$ = A$ + |<br>|
A$ = A$ + |Variable KeyCar$ = | + textbox$(KeyCar$,"IDtxtCrt")
A$ = A$ + |<br>|
A$ = A$ + |Variable CmpStrng$ = | + textbox$(CmpStrng$,"IDtxtLng")
A$ = A$ + CSSID$("IDtxtCrt","width: 50px;")
A$ = A$ + CSSID$("IDtxtLng","width: 75%;")
HTML A$
return
lblKeyBrdRead:
KeyCar$ = "" 'reset variable
' test coloumn
subPCF8574_write 15 'set row=L col=H for next input
subPCF8574_read C 'if key pressed C<15
'if C = 15 return 'unrem to save 5 milliseconds if key unpressed
'test row
subPCF8574_write 240 'set row=H col=L
subPCF8574_read R 'if key pressed R<240
'ASSOCIATE KeyCar$ TO CpR VALUE
CpR = C+R
select case CpR
case 119: KeyCar$ = "1"
case 123: KeyCar$ = "2"
case 125: KeyCar$ = "3"
case 126: KeyCar$ = "A"
case 183: KeyCar$ = "4"
case 187: KeyCar$ = "5"
case 189: KeyCar$ = "6"
case 190: KeyCar$ = "B"
case 215: KeyCar$ = "7"
case 219: KeyCar$ = "8"
case 221: KeyCar$ = "9"
case 222: KeyCar$ = "C"
case 231: KeyCar$ = "*"
case 235: KeyCar$ = "0"
case 237: KeyCar$ = "#"
case 238 'Delete last character or ' KeyCar$ = "D"
if LEN(CmpStrng$) > 0 then
CmpStrng$ = left$(CmpStrng$, LEN(CmpStrng$)-1)
end if ' KeyCar$ = "D"
case 229: CmpStrng$ = "" 'combination Key # + * pressed
end select
CmpStrng$ = CmpStrng$ + KeyCar$ 'composed sting
print "CpR= ";CpR, "KeyCar$= "; KeyCar$, "CmpStrng$= "; CmpStrng$
refresh
return
sub subPCF8574_write(n) 'write data to PCF8574
i2c.begin PCFaddKB
i2c.write n
i2c.end
end sub
sub subPCF8574_read(n) 'read data from PCF8574
i2c.begin PCFaddKB
i2c.reqfrom PCFaddKB, 1
n = i2c.read
i2c.end
end sub