Hi.
I was hoping to make sense of this and solve the issues before posting, but unfortunately I really can't seem to grasp this "stick to binary" concept. Converting between these types just prints the ascii code, not the bytes themselves.
I'm trying out the "one wire 4x4 matrix keypad" concept due to lack of expendable pins. Everything is working quite alright, despite a few "ghost values" occuring every now and then, but quite rare, giving me the wrong analog value completely. Any tips regarding this issue is also more than welcome. This is the schematic I've been using to connect to the Arduino:
However, my code doesn't work unless I depend completely on strings, and since that is not recommended, I would prefer this approach instead. For anyone wondering about the triple delay commands in the if-statement, it's simply to avoid these "ghost values" that sometimes manifests. Pardon the code inefficiency. I'm completely new with this and B4R is awesome, except for the compiled size and the strange variable conversion requirements I keep stumbling over:
I was hoping to make sense of this and solve the issues before posting, but unfortunately I really can't seem to grasp this "stick to binary" concept. Converting between these types just prints the ascii code, not the bytes themselves.
I'm trying out the "one wire 4x4 matrix keypad" concept due to lack of expendable pins. Everything is working quite alright, despite a few "ghost values" occuring every now and then, but quite rare, giving me the wrong analog value completely. Any tips regarding this issue is also more than welcome. This is the schematic I've been using to connect to the Arduino:
However, my code doesn't work unless I depend completely on strings, and since that is not recommended, I would prefer this approach instead. For anyone wondering about the triple delay commands in the if-statement, it's simply to avoid these "ghost values" that sometimes manifests. Pardon the code inefficiency. I'm completely new with this and B4R is awesome, except for the compiled size and the strange variable conversion requirements I keep stumbling over:
B4X:
Sub Process_Globals
Public Serial1 As Serial
Public Keypad_Keys_Numeric() As UInt = Array As UInt(700, 400, 300, 200, 150, 130, 116, 105, 88, 81, 75, 68, 61, 57, 55, 50)
Public Keypad_Keys_Real() As Byte = "123A456B789C*0#D"
Private keypadpin As Pin
Private keypadpinnr As Byte = 0x00
Private keydown As Byte = 0
Private Keypad_Lastkey As UInt
Private KeypadTimer As Timer
End Sub
Private Sub AppStart
Serial1.Initialize(115200)
Log("AppStart")
keypadpin.Initialize(keypadpinnr, keypadpin.MODE_OUTPUT)
KeypadTimer.Initialize("Keypad_Tick", 10)
KeypadTimer.Enabled = True
End Sub
Private Sub Keypad_Tick
Dim newkeypress As String
newkeypress = Keypad_UpdateKey
If newkeypress <> "" Then
Log("Key input: ", newkeypress)
End If
End Sub
Private Sub Keypad_UpdateKey As String
Dim rawvoltage As UInt = keypadpin.AnalogRead
If rawvoltage < 10 And keydown = 1 Then
Log("Key released: ", Keypad_GetKeyName(Keypad_Lastkey))
keydown = 0
Else
If keydown = 0 And rawvoltage > 10 Then
Delay(3)
rawvoltage = Max(rawvoltage, keypadpin.AnalogRead)
Delay(3)
rawvoltage = Max(rawvoltage, keypadpin.AnalogRead)
Delay(3)
rawvoltage = Max(rawvoltage, keypadpin.AnalogRead)
Log("Key pressed: ", rawvoltage)
Keypad_Lastkey = rawvoltage
keydown = 1
Return Keypad_GetKeyName(Keypad_Lastkey)
End If
End If
Return ""
End Sub
private Sub Keypad_GetKeyName(value As UInt) As String
Dim i As Int
For i = 0 To 15
If value > Keypad_Keys_Numeric(i) Then
Return As String(Keypad_Keys_Real(i))
End If
Next
Return ""
End Sub