Files
dotfiles/pi/boot.go
T

81 lines
2.3 KiB
Go
Raw Normal View History

2025-01-04 23:24:50 -05:00
// =============================================================================
2026-06-16 22:17:33 -04:00
// Auth: alex
2025-01-04 23:24:50 -05:00
// File: boot.go
2026-06-16 22:17:33 -04:00
// Revn: 06-16-2026 2.0
2025-01-04 23:24:50 -05:00
// Func: Blink a light when the pi boots (or on login, but who cares)
//
// TODO: create
// =============================================================================
// CHANGE LOG
// -----------------------------------------------------------------------------
// 06-23-2022: init
2026-06-16 22:17:33 -04:00
//*10-10-2023: imported flag
// added flag to define gpio pin at runtime
//*06-16-2026: added flag to control flash duration
// added flag to control amount of flashes
// added flag to decide between flash mode and toggle mode
2025-01-04 23:24:50 -05:00
//
// =============================================================================
package main
import (
2026-06-16 22:17:33 -04:00
"flag" // IntVar, BoolVar, Float64Var, Parse
"fmt" // Println
// rpio.Pin, Pin, Open, Close, Output, Toggle
2025-01-04 23:24:50 -05:00
"github.com/stianeikeland/go-rpio"
2026-06-16 22:17:33 -04:00
"os" // Exit
"time" // Sleep, time.Second
2025-01-04 23:24:50 -05:00
)
/*
Toggles a LED on physical pin 19 (mcu pin 10)
Connect a LED with resistor from pin 19 to ground.
*/
2026-06-16 22:17:33 -04:00
var pin rpio.Pin // global pin object
var num int // flag variable, holds pin number
var dur float64 // flag variable, holds duration
var amt int // flag variable, holds times to flash
var tog bool // flag variable, hold toggle mode switch
2025-01-04 23:24:50 -05:00
func main() {
2026-06-16 22:17:33 -04:00
// map input flag to variable
flag.IntVar( &num, "p", 10, "pin number" )
flag.Float64Var( &dur, "d", 100, "duration of flash (ms)" )
flag.IntVar( &amt, "n", 2, "amount of times to flash" )
flag.BoolVar( &tog, "t", false, "toggle mode" )
flag.Parse()
// create pin object at given pin number
pin = rpio.Pin( num )
2025-01-04 23:24:50 -05:00
// Open and map memory to access gpio, check for errors
if err := rpio.Open(); err != nil {
fmt.Println( "Fatal: pin open failed" )
fmt.Println( "Error: ", err.Error() )
os.Exit(1)
}
// Unmap gpio memory when done
defer rpio.Close()
// Set pin to output mode
pin.Output()
2026-06-16 22:17:33 -04:00
if tog { // if user specifies toggle mode
pin.Toggle() // toggle
return // and leave
}
// Toggle pin 2*amt times
for i := 0; i < 2 * amt; i++ {
2025-01-04 23:24:50 -05:00
pin.Toggle()
2026-06-16 22:17:33 -04:00
time.Sleep( time.Millisecond * time.Duration( dur ) )
2025-01-04 23:24:50 -05:00
}
}