12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package main
- import (
- "flag"
- "log"
- "net/http"
- "time"
- "douglasthrift.net/dtrobots/gamepad"
- "github.com/ev3go/ev3dev"
- )
- func main() {
- var (
- device string
- listen string
- leftPort string
- leftDriver string
- rightPort string
- rightDriver string
- mode driveMode
- systemd bool
- )
- flag.StringVar(&device, "gamepad", "usb-Logitech_Wireless_Gamepad_F710_9B0692E6-event-joystick", "the gamepad device id")
- flag.StringVar(&listen, "listen", "localhost:8080", "the HTTP listen address and port")
- flag.StringVar(&leftPort, "motor-left-port", "spi0.1:MC", "the left motor port")
- flag.StringVar(&leftDriver, "motor-left-driver", "lego-nxt-motor", "the left motor driver")
- flag.StringVar(&rightPort, "motor-right-port", "spi0.1:MB", "the right motor port")
- flag.StringVar(&rightDriver, "motor-right-driver", "lego-nxt-motor", "the right motor driver")
- flag.Var(&mode, "mode", "the drive mode (default \"tank\")")
- flag.BoolVar(&systemd, "systemd", false, "do not include timestamps in log since systemd already does")
- flag.Parse()
- if systemd {
- log.SetFlags(0)
- }
- g, err := gamepad.NewGamepad("/dev/input/by-id/"+device, gamepad.All)
- if err != nil {
- log.Fatalf("error creating gamepad: %v", err)
- }
- leftMotor, err := ev3dev.TachoMotorFor(leftPort, leftDriver)
- if err != nil {
- log.Fatalf("error detecting left motor: %v", err)
- }
- log.Printf("detected left motor: %v", leftMotor)
- rightMotor, err := ev3dev.TachoMotorFor(rightPort, rightDriver)
- if err != nil {
- log.Fatalf("error detecting right motor: %v", err)
- }
- log.Printf("detected right motor: %v", rightMotor)
- if err := printInterfaces(); err != nil {
- log.Fatalf("error printing interfaces: %v", err)
- }
- go func() {
- log.Fatalf("error controlling rover: %v", control(mode, g, leftMotor, rightMotor))
- }()
- go func() {
- log.Fatalf("error reading from gamepad: %v", g.Read())
- }()
- ifTicker := time.NewTicker(1 * time.Minute)
- go func() {
- for range ifTicker.C {
- if err := printInterfaces(); err != nil {
- log.Fatalf("error printing interfaces: %v", err)
- }
- }
- }()
- log.Print("HTTP server started")
- log.Fatalf("error listening and serving: %v", http.ListenAndServe(listen, nil))
- }
|