小搜了一下,Arduino没有简单的多线程/多任务的解决方案
换个方向想想,也对,Arduino本身那点存储空间,就是个微控制器,专心能控制好一个东西就行了,还搞神马多任务
不过,考虑到代码的整齐度,简单的模块划分还是需要的,比如,需要同时分别控制指示灯和舵机时,你不能把所有的代码都放在Loop函数里吧
借鉴以前用js做动画里的实现方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <Servo.h> Servo duoji1servo; const int pinLed1 = 12; //连接红色led const int pinLed2 = 13; //连接蓝色led const int pinDuoji = 9; //连接舵机控制端口 void setup() { pinMode(pinLed1, OUTPUT); pinMode(pinLed2, OUTPUT); duoji1servo.attach(pinDuoji); } long _ti = 0; //控制参数累加 void loop() { _ti++; ledTest(_ti); duojiTest(_ti); delay(1); //1毫秒 } //led闪动测试 int ledi = 0; void ledTest(long ti){ ledi++; if(ledi == 512){ ledi = 0; } int n = ledi; if(ledi > 255){ n = 512 - ledi; } analogWrite(pinLed1, n); //分别控制LED亮度 analogWrite(pinLed2, (255 - n)); } //舵机测试 int duojii = 0; void duojiTest(long ti){ if(ti % 10 == 0){//调用间隔,10毫秒计算一次 duojii++; if(duojii > 360){ duojii = 1; } if(duojii <= 180){ //正传 duoji1servo.write(duojii); }else{ //反转 duoji1servo.write(360 - duojii); } } } |