Jan-15-2022, 10:46 PM
Wierd problem been trying to resolve for several hours - appreciate any help !
I'm runinng an ADC-sampler in a separate thread function, which logs the max-sample found during each second (approx).
It signals 'main' that the max-value is ready via a flag global.... while also posting the max-value in a data global.
Below is the code and the output. 'main' gets signaled properly via the flag global, but the data-value doesn't arrive - it's usually 0, but about 20% of the time some odd non-0 value.
OUTPUT SAMPLE ('sampler max_found' is correct, but 'main' gets mostly 0's or odd#):
sampler max_found: 2688
main max_found: 2368
sampler max_found: 2704
main max_found: 0
sampler max_found: 2672
main max_found: 0
sampler max_found: 2688
main max_found: 2128
I'm runinng an ADC-sampler in a separate thread function, which logs the max-sample found during each second (approx).
It signals 'main' that the max-value is ready via a flag global.... while also posting the max-value in a data global.
Below is the code and the output. 'main' gets signaled properly via the flag global, but the data-value doesn't arrive - it's usually 0, but about 20% of the time some odd non-0 value.
import machine
import _thread
################################################
# Variables
global readyFlag
readyFlag = False
global max_found
max_found = 0
################################################
# Functions
def sampler_thread(): # Function that will be launched as a separate thread.
global readyFlag
global max_found
adc1 = machine.ADC(26) # Start an ADC
while True:
max_found = 0 # Init to smallest possible value before sampling-loop
cnt = 20000 # Init loop-cntr
while cnt > 0: # Loop until counter=0
cnt -= 1
sample = adc1.read_u16() # Get next sample
if sample > max_found: # If >max-found, set it to max-found
max_found = sample
print("sampler max_found:", max_found)
readyFlag = True # Tell the 'main' thread that max_found is ready.
##############################################
# Main
_thread.start_new_thread(sampler_thread, ())
while True:
if readyFlag:
print("main max_found:",max_found)
readyFlag = False**********************OUTPUT SAMPLE ('sampler max_found' is correct, but 'main' gets mostly 0's or odd#):
sampler max_found: 2688
main max_found: 2368
sampler max_found: 2704
main max_found: 0
sampler max_found: 2672
main max_found: 0
sampler max_found: 2688
main max_found: 2128
