gobot.io/x/gobot@v1.16.0/examples/raspi_adafruit_dcmotor.go (about)

     1  // +build example
     2  //
     3  // Do not build by default.
     4  
     5  package main
     6  
     7  import (
     8  	"log"
     9  	"time"
    10  
    11  	"gobot.io/x/gobot"
    12  	"gobot.io/x/gobot/drivers/i2c"
    13  	"gobot.io/x/gobot/platforms/raspi"
    14  )
    15  
    16  func adafruitDCMotorRunner(a *i2c.AdafruitMotorHatDriver, dcMotor int) (err error) {
    17  	log.Printf("DC Motor Run Loop...\n")
    18  	// set the speed:
    19  	var speed int32 = 255 // 255 = full speed!
    20  	if err = a.SetDCMotorSpeed(dcMotor, speed); err != nil {
    21  		return
    22  	}
    23  	// run FORWARD
    24  	if err = a.RunDCMotor(dcMotor, i2c.AdafruitForward); err != nil {
    25  		return
    26  	}
    27  	// Sleep and RELEASE
    28  	time.Sleep(2000 * time.Millisecond)
    29  	if err = a.RunDCMotor(dcMotor, i2c.AdafruitRelease); err != nil {
    30  		return
    31  	}
    32  	// run BACKWARD
    33  	if err = a.RunDCMotor(dcMotor, i2c.AdafruitBackward); err != nil {
    34  		return
    35  	}
    36  	// Sleep and RELEASE
    37  	time.Sleep(2000 * time.Millisecond)
    38  	if err = a.RunDCMotor(dcMotor, i2c.AdafruitRelease); err != nil {
    39  		return
    40  	}
    41  	return
    42  }
    43  
    44  func main() {
    45  	r := raspi.NewAdaptor()
    46  	adaFruit := i2c.NewAdafruitMotorHatDriver(r)
    47  
    48  	work := func() {
    49  		gobot.Every(5*time.Second, func() {
    50  
    51  			dcMotor := 2 // 0-based
    52  			adafruitDCMotorRunner(adaFruit, dcMotor)
    53  		})
    54  	}
    55  
    56  	robot := gobot.NewRobot("adaFruitBot",
    57  		[]gobot.Connection{r},
    58  		[]gobot.Device{adaFruit},
    59  		work,
    60  	)
    61  
    62  	robot.Start()
    63  }