分享

使用Go语言在树莓派上编程

 昵称53520140 2018-03-15

通过push button可以切换液晶屏显示不同脚本的输出内容。

lcd_switch.go

package mainimport ( . 'github.com/hugozhu/rpi' 'github.com/hugozhu/rpi/pcd8544' 'log' 'os/exec' 'time')const ( DIN = PIN_MOSI SCLK = PIN_SCLK DC = PIN_GPIO_2 RST = PIN_GPIO_0 CS = PIN_CE0 PUSHBUTTON = PIN_GPIO_6 CONTRAST = 40 //may need tweak for each Nokia 5110 screen)var screen_chan chan intvar TOTAL_MODES = 3func init() { WiringPiSetup() pcd8544.LCDInit(SCLK, DIN, DC, CS, RST, CONTRAST) screen_chan = make(chan int, 1)}func main() { //a goroutine to check button push event go func() { last_time := time.Now().UnixNano() / 1000000 btn_pushed := 0 for pin := range WiringPiISR(PUSHBUTTON, INT_EDGE_FALLING) { if pin > -1 { n := time.Now().UnixNano() / 1000000 delta := n - last_time if delta > 300 { //software debouncing log.Println('btn pushed') last_time = n btn_pushed++ screen_chan <> btn_pushed % TOTAL_MODES //switch the screen display } } } }() //a groutine to update display every 5 seconds go loop_update_display() //set screen 0 to be default display screen_chan <> 0 ticker := time.NewTicker(5 * time.Second) for { <>ticker.C screen_chan <> -1 //refresh current screen every 5 seconds }}func loop_update_display() { current_screen := 0 for screen := range screen_chan { if screen >= 0 { if screen != current_screen { //btn pushed current_screen = screen display_loading() } } switch current_screen { case 0: display_screen0() case 1: display_screen1() case 2: display_screen2() } }}func display_loading() { pcd8544.LCDclear() pcd8544.LCDdrawstring(0, 20, 'Loading ...') pcd8544.LCDdisplay()}func display_screen0() { out, err := exec.Command('/bin/screen_0.sh').CombinedOutput() if err != nil { out = []byte(err.Error()) } pcd8544.LCDclear() pcd8544.LCDdrawstring(0, 0, string(out)) pcd8544.LCDdisplay()}func display_screen1() { out, err := exec.Command('/bin/screen_1.sh').CombinedOutput() if err != nil { out = []byte(err.Error()) } pcd8544.LCDclear() pcd8544.LCDdrawstring(0, 0, string(out)) pcd8544.LCDdisplay()}func display_screen2() { out, err := exec.Command('/bin/screen_2.sh').CombinedOutput() if err != nil { out = []byte(err.Error()) } pcd8544.LCDclear() pcd8544.LCDdrawstring(0, 0, string(out)) pcd8544.LCDdisplay()}

/bin/screen_2.sh

#!/bin/bashecho 'Current IP:' ifconfig | grep 'inet ' | awk '{print $2}'

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多