mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-03 22:47:47 +00:00
c7cbd7c6cd
* Basic support of SIPO shift register * typo * add example of shiftregister for arduino and nucleo * Fix build flag for nucleof103rb * Fix wrong data pin configuration * Change README.md for Shift registers * Add API for individual register's output pin * Rewrite shift register example to show ShiftPin usage * Fix target for shiftregister example smoke test * Fix type in makefile * Add shiftregister compatble IC * Edit comment and readme
125 lines
2.0 KiB
Go
125 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"machine"
|
|
"time"
|
|
|
|
"tinygo.org/x/drivers/shiftregister"
|
|
)
|
|
|
|
func main() {
|
|
d := shiftregister.New(
|
|
shiftregister.EIGHT_BITS,
|
|
machine.PA6, // D12 Pin latch connected to ST_CP of 74HC595 (12)
|
|
machine.PA7, // D11 Pin clock connected to SH_CP of 74HC595 (11)
|
|
machine.PB6, // D10 Pin data connected to DS of 74HC595 (14)
|
|
)
|
|
d.Configure()
|
|
|
|
for {
|
|
|
|
// Examples using masks. This method writes all pins state at once.
|
|
|
|
// All pins High
|
|
d.WriteMask(0xFF)
|
|
delay()
|
|
|
|
// All pins Low
|
|
d.WriteMask(0x00)
|
|
delay()
|
|
|
|
// Some fun with masks
|
|
for _, pattern := range patterns {
|
|
d.WriteMask(pattern)
|
|
shortDelay()
|
|
}
|
|
delay()
|
|
d.WriteMask(0x00)
|
|
|
|
// Examples using individually addressable pin API. This method is slower than using mask
|
|
// because all register's pins state are send for is p.Set() call.
|
|
|
|
// Set register's pin #4
|
|
d.GetShiftPin(4).High()
|
|
delay()
|
|
d.GetShiftPin(4).Low()
|
|
delay()
|
|
|
|
// Get an individual pin and use it
|
|
pin := d.GetShiftPin(7)
|
|
pin.High()
|
|
delay()
|
|
pin.Low()
|
|
delay()
|
|
|
|
// Prepare an array of pin attached to the register
|
|
pins := [8]*shiftregister.ShiftPin{}
|
|
for p := 0; p < 8; p++ {
|
|
pins[p] = d.GetShiftPin(p)
|
|
}
|
|
|
|
for p := 7; p >= 0; p-- {
|
|
pins[p].Low()
|
|
shortDelay()
|
|
pins[p].High()
|
|
}
|
|
|
|
for p := 7; p >= 0; p-- {
|
|
pins[p].High()
|
|
time.Sleep(100 * time.Millisecond)
|
|
pins[p].Low()
|
|
}
|
|
delay()
|
|
}
|
|
}
|
|
|
|
func delay() {
|
|
time.Sleep(500 * time.Millisecond)
|
|
}
|
|
func shortDelay() {
|
|
time.Sleep(100 * time.Millisecond)
|
|
}
|
|
|
|
var patterns = []uint32{
|
|
0b00000001,
|
|
0b00000010,
|
|
0b00000100,
|
|
0b00001000,
|
|
0b00010000,
|
|
0b00100000,
|
|
0b01000000,
|
|
0b10000000,
|
|
0b10000001,
|
|
0b10000010,
|
|
0b10000100,
|
|
0b10001000,
|
|
0b10010000,
|
|
0b10100000,
|
|
0b11000000,
|
|
0b11000001,
|
|
0b11000010,
|
|
0b11000100,
|
|
0b11001000,
|
|
0b11010000,
|
|
0b11100000,
|
|
0b11100001,
|
|
0b11100010,
|
|
0b11100100,
|
|
0b11101000,
|
|
0b11110000,
|
|
0b11110001,
|
|
0b11110010,
|
|
0b11110100,
|
|
0b11111000,
|
|
0b11111001,
|
|
0b11111010,
|
|
0b11111100,
|
|
0b11111101,
|
|
0b11111110,
|
|
0b11111111,
|
|
0b00000000,
|
|
0b11111111,
|
|
0b00000000,
|
|
0b11111111,
|
|
}
|