海上东山 发表于 2021-1-28 06:57:37

请教关于子线程模块的问题

我使用mind+子线程模块做了如下程序,想在设定时间到达时,灯带14颗灯全亮
但实际执行时,只有5个灯亮
请高手帮我分析一下,到底是哪里的问题,谢谢。

硬件:Ardinuo Mega 2560
          DS1307
          OLED12864
          串口MP3模块
          7颗灯的RGB灯带X2 串联


海上东山 发表于 2021-1-28 08:54:52

szjuliet 发表于 2021-1-28 08:43
是哪5个灯亮?尝试分别只接一条灯带进行调试,看看是灯带的问题还是连接线的问题 ...

亮灯的那个模块,放在主程序里面,14个灯都会亮,所以两个灯带之间的连线应该没问题。

现在只有最靠近主控的5个灯亮

海上东山 发表于 2021-1-28 09:36:39

szjuliet 发表于 2021-1-28 09:23
放在主程序里是顺序执行,所以会点亮所有灯才执行下一语句。放到子线程里是并行执行,所以会和主程序的语 ...

我主程序里面只有按了按键才会熄灭灯,不按按键灯不会熄灭的。
还有即使按了按键,是全部熄灭,不是只熄灭一部分呀。

从我的测试看,子程序里面可以控制1-5个灯亮,再多了就不受控了。

szjuliet 发表于 2021-1-28 11:09:13

本帖最后由 szjuliet 于 2021-1-28 11:26 编辑

海上东山 发表于 2021-1-28 09:36
我主程序里面只有按了按键才会熄灭灯,不按按键灯不会熄灭的。
还有即使按了按键,是全部熄灭,不是只熄 ...
在主程序中原先点灯的位置加一条调用子线程的语句

海上东山 发表于 2021-1-28 14:24:22

szjuliet 发表于 2021-1-28 11:09
在主程序中原先点灯的位置加一条调用子线程的语句

现在没有办法试,等回去试试,但我估计应该还会是一样的结果。

我昨天本来想开一个子线程,用来获取DS1307的时间,并在OLED12864上显示,结果发现无法显示。
然后又想简单点,看看子线程是否执行了,所以使用灯带来指示,发现只能亮5颗以下的灯,实在没办法了,才在论坛里发帖的。

总感觉不是程序问题,应该是子线程模块执行机理或资源冲突的问题。

版主能否讲一下子线程模块的执行机理,我学习学习。

海上东山 发表于 2021-1-28 19:17:26

szjuliet 发表于 2021-1-28 11:09
在主程序中原先点灯的位置加一条调用子线程的语句

这样一个灯都不亮了

海上东山 发表于 2021-1-28 19:42:54

szjuliet 发表于 2021-1-28 11:09
在主程序中原先点灯的位置加一条调用子线程的语句

对程序进行了简化,图1所示程序运行时14个灯全部,图2所示程序运行时只有5个灯亮

szjuliet 发表于 2021-1-29 00:11:57

海上东山 发表于 2021-1-28 19:42
对程序进行了简化,图1所示程序运行时14个灯全部,图2所示程序运行时只有5个灯亮 ...

这样调试清晰多了。我觉得你分析的对,有可能是资源冲突。你再把硬件极简化,只保留灯的模块,其余都不要,看看子线程能否正常把灯点亮。本来想帮你试试,但我手头只有UNO和NANO,在Mind+里都不支持子线程,明天再找找看有没有其他板子可以试一下。
https://mc.dfrobot.com.cn/thread-273911-1-1.html,这里有一个子线程的帖子,你可以看看。
页: [1]
查看完整版本: 请教关于子线程模块的问题