B4R Question Timing issues with buttons and AddListener

tigrot

Well-Known Member
Licensed User
Longtime User
Hi everybody,
I have some issue in reading button state.
Sometimes I have to press 3 of 4 times buttons to enter the StatusChanged event. I'm sure there is no hidden loop, because the Newdata event of a stream is served normally. Probably the processing time is sometimes long but I can keep the button pressed and no event is generated.
How do AddListener work?

Best regards
Mauro
 
Last edited:

tigrot

Well-Known Member
Licensed User
Longtime User
That's what i did. It's the fusion of two pjt's. One a data logger and one is a remote console. Maybe the ground line of the 4 buttons is faulty. This time I choose not to use a bread board so some soldering could be bad. I'll investigate...
 
Upvote 0

tigrot

Well-Known Member
Licensed User
Longtime User
I have just extracted the button part and the program doesn't miss any button. There must be something wrong with event handling. I send a short string via Serial to fire virtual buttons on my food metal detector and they are correctly sent.
 
Upvote 0

tigrot

Well-Known Member
Licensed User
Longtime User
Most of the work is a polling(with async receive on arduino's side).
It's very simple: a few bytes to my device like "RD 0"+ crlf and up to 7 bytes on the reception from device.
I have delayed the transmission from Arduino(and consequently the reception from device) up to 100ms(using CallSubPlus).
Now buttons are read more quicly, but sometimes I have some issue and button are not read.
 
Upvote 0

tigrot

Well-Known Member
Licensed User
Longtime User
Digging in the log, status change is signaled, but at a time status False(pressed) is not followed by a status True(released). This is the log:
B4X:
comando0
Singolo carattere:0
Chiedi errori:
0
logout schede al chiedierrori
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
Chiedi errori:
0
logout schede al chiedierrori
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
Chiedi errori:
0
logout schede al chiedierrori
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
Chiedi errori:
0
logout schede al chiedierrori
*****Status and Newstatus:4 4
Valorexxx:0
Timer1:0:in attesa1
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
Chiedi errori:
0
logout schede al chiedierrori
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
Chiedi errori:
0
logout schede al chiedierrori
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
Chiedi errori:
0
logout schede al chiedierrori
*****Status and Newstatus:4 4
Valorexxx:0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Valorexxx:0
STATO P1:0
Invia metalim
comando#$
Singolo carattere:#$
0
*****Status and Newstatus:4 0
Valorexxx:0
STATO P1:1
comando$
Singolo carattere:$
2
*****Status and Newstatus:0 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
STATO P3:0
comando#$
Singolo carattere:#$
0
*****Status and Newstatus:2 0
Valorexxx:0
Era in taratura-------0
STATO P3:1
comando$
Singolo carattere:$
2
*****Status and Newstatus:0 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
STATO P3:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
STATO P3:1
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
STATO P3:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando$
Singolo carattere:$
*****Status and Newstatus:2 2
Valorexxx:0
comando0
Singolo carattere:0
4
Chiedi errori:
0
logout schede al chiedierrori
*****Status and Newstatus:2 4
Towrite
Valorexxx:0
rgctr:0
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:1
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:2
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:3
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:4
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:5
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:6
Era in taratura-------0
comando180
Singolo carattere:180
*****Status and Newstatus:4 4
Towrite
Valorexxx:180
rgctr:7
Era in taratura-------0
comando250
Singolo carattere:250
*****Status and Newstatus:4 4
Towrite
Valorexxx:250
rgctr:8
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:9
Era in taratura-------0
comando9
Singolo carattere:9
*****Status and Newstatus:4 4
Towrite
Valorexxx:9
rgctr:10
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:11
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:12
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:13
Era in taratura-------0
comando1
Singolo carattere:1
*****Status and Newstatus:4 4
Towrite
Valorexxx:1
rgctr:14
comando100
Singolo carattere:100
*****Status and Newstatus:4 4
Towrite
Valorexxx:100
rgctr:17
Era in taratura-------0
comando1
Singolo carattere:1
*****Status and Newstatus:4 4
Towrite
Valorexxx:1
rgctr:18
Era in taratura-------0
comando100
Singolo carattere:100
*****Status and Newstatus:4 4
Towrite
Valorexxx:100
rgctr:17
Era in taratura-------0
comando1
Singolo carattere:1
*****Status and Newstatus:4 4
Towrite
Valorexxx:1
rgctr:18
Era in taratura-------0
comando50
Singolo carattere:50
*****Status and Newstatus:4 4
Towrite
Valorexxx:50
rgctr:19
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:20
Era in taratura-------0
comando10
Singolo carattere:10

*****Status and Newstatus:4 4
Towrite
Valorexxx:10
rgctr:21
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:22
Era in taratura-------0
comando0
Singolo carattere:0
*****Status and Newstatus:4 4
Towrite
Valorexxx:0
rgctr:23
Era in taratura-------0
comando48
Singolo carattere:48
*****Status and Newstatus:4 4
Towrite
Valorexxx:48
rgctr:24
Era in taratura-------0
comando32
Singolo carattere:32
*****Status and Newstatus:4 4
Towrite
Valorexxx:32
rgctr:25
Era in taratura-------0
comando73
Singolo carattere:73
*****Status and Newstatus:4 4
Towrite
Valorexxx:73
rgctr:26
Era in taratura-------0
comando78
Singolo carattere:78
*****Status and Newstatus:4 4
Towrite
Valorexxx:78
rgctr:27
Era in taratura-------0
comando65
Singolo carattere:65
*****Status and Newstatus:4 4
Towrite
Valorexxx:65
rgctr:28
Era in taratura-------0
comando84
Singolo carattere:84
*****Status and Newstatus:4 4
Towrite
Valorexxx:84
rgctr:29
Era in taratura-------0
comando84
Singolo carattere:84
*****Status and Newstatus:4 4
Towrite
Valorexxx:84
rgctr:30
Era in taratura-------0
comando73
Singolo carattere:73
*****Status and Newstatus:4 4
Towrite
Valorexxx:73
rgctr:31
Era in taratura-------0
comando86
Singolo carattere:86
*****Status and Newstatus:4 4
Towrite
Valorexxx:86
rgctr:32
Era in taratura-------0
comando79
Singolo carattere:79
*****Status and Newstatus:4 4
Towrite
Valorexxx:79
rgctr:33

Era in taratura-------0
*****FIne aggiornamento***
logout schede al eraintaratura
Timer2:0
File:/logmetal/tarature/18-03-07.TXT
Timer2:1
File:/logmetal/tarature/18-03-07.TXT
Timer2:2
File:/logmetal/tarature/18-03-07.TXT
Timer2:3
File:/logmetal/tarature/18-03-07.TXT
Timer2:4
File:/logmetal/tarature/18-03-07.TXT
Timer2:5
File:/logmetal/tarature/18-03-07.TXT
Timer2:6
File:/logmetal/tarature/18-03-07.TXT
Timer2:7
File:/logmetal/tarature/18-03-07.TXT

If you search for STATO P3 you will see status change of third button (pressed, released, pressed, released, pressed, the status is after the colon)

This resets after a new button pressure. Definitelly it looses changes.

This the polling flow:
CallSubPlus("Sendrd0",100,0)
Sub sendrd0
Main.Serialnative1.WriteBytes(bc.StringToBytes(JoinStrings(Array As String("RD 0",CRLF))),0,6) ' chiede il carattere rgctr
End Sub
sub astream1.newdata(buffer() as byte
<processing of incoming message>
CallSubPlus("Sendrd0",100,0)
end sub

Every 15 seconds the polling is restarted if no incoming flow from device.


The flow is newer blocked
 
Upvote 0

tigrot

Well-Known Member
Licensed User
Longtime User
Hi Erel.
I think I have got the reason for this issue. I remember that lcd need temporization (delays) to complete protocol. I gave a look to Arduino Lcd library and saw long delays. So I must implement some hardware(latch?) To solve the issue.
Regards
Mauro
 
Upvote 0

tigrot

Well-Known Member
Licensed User
Longtime User
I have sorted a partial solution for give more responsivity to buttons. Now they fire almost all the time, but there is a repetion useful for my app. I'll definetilly use a sr latch to store button press and have time to get the pin status.
 
Upvote 0
Top