main.go 1.8 KB

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