gobot.io/x/gobot/v2@v2.1.0/examples/raspi_adafruit_dcmotor.go (about)

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