robot.lua 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. return function (connection, req, args)
  2. dofile('httpserver-header.lc')(connection, 200, 'html')
  3. --define robot dance steps
  4. --F=move forward, B=move backward, L=turn left, R=turn right, S=stop
  5. local steps = 'FFSSFFRSRFFSFFSSBBSSBBSSBBSSBBSSFFSSFFSSFFSSFFLSLBBS' --Tango
  6. local curStepIdx = 1
  7. --1=GPIO5, 2=GPIO4, 3=GPIO0, 4=GPIO2, 5=GPIO14, 6=GPIO12,
  8. --7=GPIO13, 8=GPIO15, 9=GPIO3, 10=GPIO1, 11=GPIO9, 12=GPIO10
  9. local leftpwm, leftduty, leftpin1, leftpin2 = 1, 818, 2, 4 --GPIO5, 80%, GPIO4, GPIO2
  10. local rightpwm,rightduty, rightpin1, rightpin2 = 5, 717, 6, 7 --GPIO14, 70%, GPIO12, GPIO13
  11. -- timer id(0-6), interval in ms
  12. local tmrId, tmrMs = 4, 800
  13. -- init motors
  14. pwm.setup(leftpwm, 500, leftduty)
  15. pwm.start(leftpwm)
  16. gpio.mode(leftpin1, gpio.OUTPUT)
  17. gpio.mode(leftpin2, gpio.OUTPUT)
  18. pwm.setup(rightpwm, 500, rightduty)
  19. pwm.start(rightpwm)
  20. gpio.mode(rightpin1, gpio.OUTPUT)
  21. gpio.mode(rightpin2, gpio.OUTPUT)
  22. --run step every tmrMs
  23. tmr.alarm(tmrId, tmrMs, tmr.ALARM_SEMI, function()
  24. local curStep = string.sub(steps, curStepIdx, curStepIdx)
  25. if ((curStep ~= nil) and (curStep ~= '')) then
  26. if (curStep == 'F') then
  27. gpio.write(leftpin1, gpio.LOW)
  28. gpio.write(leftpin2, gpio.HIGH)
  29. gpio.write(rightpin1, gpio.LOW)
  30. gpio.write(rightpin2, gpio.HIGH)
  31. elseif (curStep == 'B') then
  32. gpio.write(leftpin1, gpio.HIGH)
  33. gpio.write(leftpin2, gpio.LOW)
  34. gpio.write(rightpin1, gpio.HIGH)
  35. gpio.write(rightpin2, gpio.LOW)
  36. elseif (curStep == 'L') then
  37. gpio.write(leftpin1, gpio.LOW)
  38. gpio.write(leftpin2, gpio.HIGH)
  39. gpio.write(rightpin1, gpio.HIGH)
  40. gpio.write(rightpin2, gpio.LOW)
  41. elseif (curStep == 'R') then
  42. gpio.write(leftpin1, gpio.HIGH)
  43. gpio.write(leftpin2, gpio.LOW)
  44. gpio.write(rightpin1, gpio.LOW)
  45. gpio.write(rightpin2, gpio.HIGH)
  46. elseif (curStep == 'S') then
  47. gpio.write(leftpin1, gpio.LOW)
  48. gpio.write(leftpin2, gpio.LOW)
  49. gpio.write(rightpin1, gpio.LOW)
  50. gpio.write(rightpin2, gpio.LOW)
  51. end
  52. curStepIdx = curStepIdx + 1
  53. tmr.start(tmrId)
  54. else
  55. pwm.stop(leftpwm)
  56. gpio.write(leftpin1, gpio.LOW)
  57. gpio.write(leftpin2, gpio.LOW)
  58. pwm.stop(rightpwm)
  59. gpio.write(rightpin1, gpio.LOW)
  60. gpio.write(rightpin2, gpio.LOW)
  61. tmr.unregister(tmrId)
  62. end
  63. end)
  64. connection:send([===[<!DOCTYPE html>
  65. <html lang="en">
  66. <head>
  67. <meta charset="utf-8">
  68. <title>robot.lua</title>
  69. </head>
  70. <body>
  71. <h1>Running!</h1>
  72. </body>
  73. </html>]===])
  74. end