四博智联产品售后

 找回密码
 立即注册
搜索
查看: 6276|回复: 0

DoitCar AP模式底层控制第二版(Lua源码)

[复制链接]

53

主题

56

帖子

374

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
374
发表于 2015-5-27 14:47:29 | 显示全部楼层 |阅读模式
底层控制程序第二版本
改进:将左/右转弯由原来的连续转弯修改为点动转弯。即启动转弯后,转动一小段时间(代码示例为100ms)随即停止。
STA模式可按照下面修改。
详细情况见代码:
  1. --DoitCar Ctronl Demo
  2. --ap mode
  3. --Created @ 2015/05/26 by Doit Studio
  4. --Modified: change the left/right function to jogging
  5. --http://www.doit.am/
  6. --http://www.smartarduino.com/
  7. --http://szdoit.taobao.com/
  8. --bbs: bbs.doit.am

  9. --GPIO Define
  10. function initGPIO()
  11. --1,2EN         D1 GPIO5
  12. --3,4EN         D2 GPIO4
  13. --1A  ~2A   D3 GPIO0
  14. --3A  ~4A   D4 GPIO2

  15. gpio.mode(0,gpio.OUTPUT);--LED Light on
  16. gpio.write(0,gpio.LOW);

  17. gpio.mode(1,gpio.OUTPUT);gpio.write(1,gpio.LOW);
  18. gpio.mode(2,gpio.OUTPUT);gpio.write(2,gpio.LOW);

  19. gpio.mode(3,gpio.OUTPUT);gpio.write(3,gpio.HIGH);
  20. gpio.mode(4,gpio.OUTPUT);gpio.write(4,gpio.HIGH);

  21. pwm.setup(1,1000,1023);--PWM 1KHz, Duty 1023
  22. pwm.start(1);pwm.setduty(1,0);
  23. pwm.setup(2,1000,1023);
  24. pwm.start(2);pwm.setduty(2,0);
  25. end

  26. function setupAPMode()
  27. print("Ready to start soft ap")
  28.         
  29. cfg={}
  30. cfg.ssid="DoitWiFi_Car";
  31. cfg.pwd="12345678"
  32. wifi.ap.config(cfg)

  33. cfg={}
  34. cfg.ip="192.168.1.1";
  35. cfg.netmask="255.255.255.0";
  36. cfg.gateway="192.168.1.1";
  37. wifi.ap.setip(cfg);
  38. wifi.setmode(wifi.SOFTAP)

  39. str=nil;
  40. ssidTemp=nil;
  41. collectgarbage();

  42. print("Soft AP started")
  43. end

  44. --Set up AP
  45. setupAPMode();

  46. print("Start DoitRobo Control");
  47. initGPIO();

  48. spdTargetA=1023;--target Speed
  49. spdCurrentA=0;--current speed
  50. spdTargetB=1023;--target Speed
  51. spdCurrentB=0;--current speed
  52. stopFlag=true;

  53. JogTimeCnt=0;
  54. JogFlag=false;

  55. --speed control procedure
  56. tmr.alarm(1, 100, 1, function()
  57.         if stopFlag==false then
  58.                 spdCurrentA=spdTargetA;
  59.                 spdCurrentB=spdTargetB;
  60.                 pwm.setduty(1,spdCurrentA);
  61.                 pwm.setduty(2,spdCurrentB);
  62.         else
  63.                 pwm.setduty(1,0);
  64.                 pwm.setduty(2,0);
  65.         end
  66.         if JogFlag==true then
  67.                 stopFlag = false;
  68.                 if JogTimeCnt >=1 then
  69.                         JogFlag = false;
  70.                         stopFlag = true;
  71.                 end
  72.                 JogTimeCnt = JogTimeCnt +1;
  73.         end
  74. end)

  75. --Setup tcp server at port 9003
  76. s=net.createServer(net.TCP,60);
  77. s:listen(9003,function(c)
  78.     c:on("receive",function(c,d)
  79.       print("TCPSrv:"..d)
  80.       if string.sub(d,1,1)=="0" then --stop
  81.                 pwm.setduty(1,0)
  82.                 pwm.setduty(2,0)
  83.                 stopFlag = true;
  84.         c:send("ok\r\n");
  85.           elseif string.sub(d,1,1)=="1" then --forward
  86.                 gpio.write(3,gpio.HIGH)
  87.                 gpio.write(4,gpio.HIGH)
  88.                 stopFlag = false;
  89.                 c:send("ok\r\n");
  90.           elseif string.sub(d,1,1)=="2" then --backward
  91.                 gpio.write(3,gpio.LOW)
  92.                 gpio.write(4,gpio.LOW)
  93.                 stopFlag = false;
  94.                 c:send("ok\r\n");
  95.           elseif string.sub(d,1,1)=="3" then --left
  96.                 gpio.write(3,gpio.LOW)
  97.                 gpio.write(4,gpio.HIGH)
  98.                 JogTimeCnt=0;
  99.                 JogFlag=true;
  100.                 c:send("ok\r\n");
  101.           elseif string.sub(d,1,1)=="4" then --right
  102.                 gpio.write(3,gpio.HIGH);
  103.                 gpio.write(4,gpio.LOW);
  104.                 JogTimeCnt=0;
  105.                 JogFlag=true;
  106.                 c:send("ok\r\n");
  107.           elseif string.sub(d,1,1)=="6" then --A spdUp
  108.                 spdTargetA = spdTargetA+50;if(spdTargetA>1023) then spdTargetA=1023;end
  109.                 c:send("ok\r\n");
  110.           elseif string.sub(d,1,1)=="7" then --A spdDown
  111.                 spdTargetA = spdTargetA-50;if(spdTargetA<0) then spdTargetA=0;end
  112.                 c:send("ok\r\n");
  113.           elseif string.sub(d,1,1)=="8" then --B spdUp
  114.                 spdTargetB = spdTargetB+50;if(spdTargetB>1023) then spdTargetB=1023;end
  115.                 c:send("ok\r\n");
  116.           elseif string.sub(d,1,1)=="9" then --B spdDown
  117.                 spdTargetB = spdTargetB-50;if(spdTargetB<0) then spdTargetB=0;end
  118.                 c:send("ok\r\n");               
  119.       else  print("Invalid Command:"..d);c:send("Invalid CMD\r\n");end;
  120.           collectgarbage();
  121.     end) --end c:on receive

  122.     c:on("disconnection",function(c)
  123.                 print("TCPSrv:Client disconnet");
  124.                 collectgarbage();
  125.     end)
  126.     print("TCPSrv:Client connected")
  127. end)
复制代码

完整代码下载:https://github.com/SmartArduino/DoitCar
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|四博智联 Inc. ( 粤ICP备15034758号-1

GMT+8, 2020-11-24 01:07 , Processed in 0.051794 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表