mirror of https://github.com/periph/devices
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
4.0 KiB
Go
161 lines
4.0 KiB
Go
// Copyright 2025 The Periph Authors. All rights reserved.
|
|
// Use of this source code is governed under the Apache License, Version 2.0
|
|
// that can be found in the LICENSE file.
|
|
|
|
package hd44780_test
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"periph.io/x/conn/v3/display"
|
|
"periph.io/x/conn/v3/display/displaytest"
|
|
"periph.io/x/conn/v3/gpio"
|
|
"periph.io/x/conn/v3/i2c/i2creg"
|
|
"periph.io/x/conn/v3/physic"
|
|
"periph.io/x/conn/v3/spi"
|
|
"periph.io/x/conn/v3/spi/spireg"
|
|
"periph.io/x/devices/v3/hd44780"
|
|
"periph.io/x/devices/v3/pcf857x"
|
|
"periph.io/x/host/v3"
|
|
"periph.io/x/host/v3/gpioioctl"
|
|
)
|
|
|
|
// This example shows using a gpio.Group with an HD44780 display. For this
|
|
// example its using the periph.io/x/host/gpioioctl package to obtain
|
|
// the gpio.Group and pins. You can use an I/O device that implements
|
|
// gpio.Group and gpio.PinOut to drive a display.
|
|
func Example() {
|
|
var err error
|
|
if _, err = host.Init(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
chip := gpioioctl.Chips[0]
|
|
var ls gpio.Group
|
|
// Using a group to obtain the pins. The first 4 pins in the group are the
|
|
// data pins, and the remaining ones are reset, enable, and backlight.
|
|
// For 8 bit mode, specify additional data pins.
|
|
ls, err = chip.LineSet(gpioioctl.LineOutput, gpio.NoEdge, gpio.PullNoChange,
|
|
"GPIO27", "GPIO22", "GPIO23", "GPIO24", "GPIO17", "GPIO18", "GPIO25")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
pins := ls.Pins()
|
|
reset := pins[4].(gpio.PinOut)
|
|
enable := pins[5].(gpio.PinOut)
|
|
bl := hd44780.NewBacklight(pins[6].(gpio.PinOut))
|
|
lcd, err := hd44780.NewHD44780(ls, reset, enable, bl, 2, 16)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
n, err := lcd.WriteString("Hello")
|
|
time.Sleep(5 * time.Second)
|
|
fmt.Printf("n=%d, err=%s\n", n, err)
|
|
fmt.Println("lcd=", lcd.String())
|
|
|
|
_ = lcd.Home()
|
|
_ = lcd.MoveTo(1, 1)
|
|
_, _ = lcd.WriteString("Line 1")
|
|
_ = lcd.MoveTo(2, 2)
|
|
_, _ = lcd.WriteString("Line 2")
|
|
time.Sleep(5 * time.Second)
|
|
_ = lcd.Clear()
|
|
|
|
fmt.Println("calling TestTextDisplay")
|
|
|
|
errs := displaytest.TestTextDisplay(lcd, true)
|
|
fmt.Println("back from TestTextDisplay")
|
|
for _, e := range errs {
|
|
if !errors.Is(e, display.ErrNotImplemented) {
|
|
log.Println(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Create a new HD44780 that uses the Adafruit I2C/SPI Backpack.
|
|
func ExampleNewAdafruitI2CBackpack() {
|
|
// Make sure periph is initialized.
|
|
if _, err := host.Init(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Open default I²C bus.
|
|
bus, err := i2creg.Open("")
|
|
if err != nil {
|
|
log.Fatalf("failed to open I²C: %v", err)
|
|
}
|
|
defer bus.Close()
|
|
dev, err := hd44780.NewAdafruitI2CBackpack(bus, 0x20, 4, 20)
|
|
fmt.Println(dev.String())
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
_ = dev.Clear()
|
|
_, _ = dev.WriteString("Hello")
|
|
fmt.Println("wrote hello")
|
|
time.Sleep(5 * time.Second)
|
|
fmt.Println("calling test text display")
|
|
_ = displaytest.TestTextDisplay(dev, true)
|
|
}
|
|
|
|
func ExampleNewAdafruitSPIBackpack() {
|
|
if _, err := host.Init(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
pc, err := spireg.Open("")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer pc.Close()
|
|
conn, err := pc.Connect(physic.MegaHertz, spi.Mode1, 8)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
display, err := hd44780.NewAdafruitSPIBackpack(conn, 2, 26)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
_ = display.Clear()
|
|
_, _ = display.WriteString("Hello")
|
|
time.Sleep(5 * time.Second)
|
|
_ = displaytest.TestTextDisplay(display, true)
|
|
}
|
|
|
|
func ExampleNewPCF857xBackpack() {
|
|
// Make sure periph is initialized.
|
|
if _, err := host.Init(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Open default I²C bus.
|
|
bus, err := i2creg.Open("")
|
|
if err != nil {
|
|
log.Fatalf("failed to open I²C: %v", err)
|
|
}
|
|
defer bus.Close()
|
|
dev, err := hd44780.NewPCF857xBackpack(bus, pcf857x.DefaultAddress, 4, 20)
|
|
fmt.Println(dev.String())
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
|
|
}
|
|
for range 5 {
|
|
fmt.Println("toggling backlight")
|
|
_ = dev.Backlight(0)
|
|
time.Sleep(500 * time.Millisecond)
|
|
_ = dev.Backlight(255)
|
|
time.Sleep(500 * time.Millisecond)
|
|
|
|
}
|
|
_ = dev.Clear()
|
|
_, _ = dev.WriteString("Hello")
|
|
fmt.Println("wrote hello")
|
|
time.Sleep(5 * time.Second)
|
|
fmt.Println("calling test text display")
|
|
_ = displaytest.TestTextDisplay(dev, true)
|
|
}
|