main.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package main
  2. import (
  3. "flag"
  4. "log"
  5. "net/http"
  6. "time"
  7. "douglasthrift.net/dtrobots/gamepad"
  8. "github.com/ev3go/ev3dev"
  9. )
  10. func main() {
  11. var (
  12. device string
  13. listen string
  14. leftPort string
  15. leftDriver string
  16. rightPort string
  17. rightDriver string
  18. mode driveMode
  19. systemd bool
  20. )
  21. flag.StringVar(&device, "gamepad", "usb-Logitech_Wireless_Gamepad_F710_9B0692E6-event-joystick", "the gamepad device id")
  22. flag.StringVar(&listen, "listen", "localhost:8080", "the HTTP listen address and port")
  23. flag.StringVar(&leftPort, "motor-left-port", "spi0.1:MC", "the left motor port")
  24. flag.StringVar(&leftDriver, "motor-left-driver", "lego-nxt-motor", "the left motor driver")
  25. flag.StringVar(&rightPort, "motor-right-port", "spi0.1:MB", "the right motor port")
  26. flag.StringVar(&rightDriver, "motor-right-driver", "lego-nxt-motor", "the right motor driver")
  27. flag.Var(&mode, "mode", "the drive mode (default \"tank\")")
  28. flag.BoolVar(&systemd, "systemd", false, "do not include timestamps in log since systemd already does")
  29. flag.Parse()
  30. if systemd {
  31. log.SetFlags(0)
  32. }
  33. g, err := gamepad.NewGamepad("/dev/input/by-id/"+device, gamepad.All)
  34. if err != nil {
  35. log.Fatalf("error creating gamepad: %v", err)
  36. }
  37. leftMotor, err := ev3dev.TachoMotorFor(leftPort, leftDriver)
  38. if err != nil {
  39. log.Fatalf("error detecting left motor: %v", err)
  40. }
  41. log.Printf("detected left motor: %v", leftMotor)
  42. rightMotor, err := ev3dev.TachoMotorFor(rightPort, rightDriver)
  43. if err != nil {
  44. log.Fatalf("error detecting right motor: %v", err)
  45. }
  46. log.Printf("detected right motor: %v", rightMotor)
  47. if err := printInterfaces(); err != nil {
  48. log.Fatalf("error printing interfaces: %v", err)
  49. }
  50. go func() {
  51. log.Fatalf("error controlling rover: %v", control(mode, g, leftMotor, rightMotor))
  52. }()
  53. go func() {
  54. log.Fatalf("error reading from gamepad: %v", g.Read())
  55. }()
  56. ifTicker := time.NewTicker(1 * time.Minute)
  57. go func() {
  58. for range ifTicker.C {
  59. if err := printInterfaces(); err != nil {
  60. log.Fatalf("error printing interfaces: %v", err)
  61. }
  62. }
  63. }()
  64. log.Print("HTTP server started")
  65. log.Fatalf("error listening and serving: %v", http.ListenAndServe(listen, nil))
  66. }