main.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. )
  19. flag.StringVar(&device, "gamepad", "/dev/input/event0", "the gamepad device path")
  20. flag.StringVar(&listen, "listen", "localhost:8080", "the HTTP listen address and port")
  21. flag.StringVar(&leftPort, "motor-left-port", "spi0.1:MC", "the left motor port")
  22. flag.StringVar(&leftDriver, "motor-left-driver", "lego-nxt-motor", "the left motor driver")
  23. flag.StringVar(&rightPort, "motor-right-port", "spi0.1:MB", "the right motor port")
  24. flag.StringVar(&rightDriver, "motor-right-driver", "lego-nxt-motor", "the right motor driver")
  25. flag.Var(&mode, "mode", "the drive mode (default \"tank\")")
  26. flag.Parse()
  27. g, err := gamepad.NewGamepad(device, gamepad.All)
  28. if err != nil {
  29. log.Fatalf("error creating gamepad: %v", err)
  30. }
  31. leftMotor, err := ev3dev.TachoMotorFor(leftPort, leftDriver)
  32. if err != nil {
  33. log.Fatalf("error detecting left motor: %v", err)
  34. }
  35. log.Printf("detected left motor: %v", leftMotor)
  36. rightMotor, err := ev3dev.TachoMotorFor(rightPort, rightDriver)
  37. if err != nil {
  38. log.Fatalf("error detecting right motor: %v", err)
  39. }
  40. log.Printf("detected right motor: %v", rightMotor)
  41. go func() {
  42. log.Fatalf("error controlling rover: %v", control(mode, g, leftMotor, rightMotor))
  43. }()
  44. go func() {
  45. log.Fatalf("error reading from gamepad: %v", g.Read())
  46. }()
  47. log.Print("HTTP server started")
  48. log.Fatalf("error listening and serving: %v", http.ListenAndServe(listen, nil))
  49. }