【MYS-6ULX-IOT试用体验】Go语言与GPIO: 1 控制用户LED - 问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【MYS-6ULX-IOT试用体验】Go语言与GPIO: 1 控制用户LED

刘 刚 ( 楼主 ) 2017-6-20 09:40:02  只看该作者 倒序浏览
本帖最后由 sandman78 于 2017-6-20 09:59 编辑

开发板的用户LED为板上的D12, 通过 /sys/class/leds/user/brightness 文件控制,写"1"点亮,写"0"熄灭

点亮LED
  1. $ echo "1" > /sys/class/leds/user/brightness
复制代码

关闭LED
  1. $ echo "0" > /sys/class/leds/user/brightness
复制代码

Go语言
Go https://www.golang.org 是 Google 开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。 Go语言的特点及详细介绍可以自行搜索,因为Go语言对ARM处理器的交叉编译支持较好,Go采用静态编译,优点是没有运行库依赖,减少了各种因编译链和库版本不兼容带来的烦恼。这里选用Go来进行演示。

控制用户LED
这段代码实现了开发板的用户LED控制,启动后,LED闪烁,按回车键退出程序,代码十分简单。

led.go:
  1. // MYS-6ULX-IOT user LED example
  2. package main

  3. import (
  4.     "fmt"
  5.     "os"
  6.     "time"
  7. )

  8. func main() {
  9.     s, err := os.OpenFile("/sys/class/leds/user/brightness", os.O_WRONLY, 0644)
  10.     if err != nil {
  11.         panic(err)
  12.     }
  13.     defer s.Close()
  14.     go func() {
  15.         for {
  16.             s.WriteString("1")
  17.             time.Sleep(time.Millisecond * 500)
  18.             s.WriteString("0")
  19.             time.Sleep(time.Millisecond * 500)
  20.         }
  21.     }()
  22.     fmt.Println("Press enter key to exit")
  23.     var b [1]byte
  24.     os.Stdin.Read(b[:])
  25.     s.WriteString("0")
  26. }

复制代码


下面进行讲解
  1. package main
复制代码
Go语言的代码通过包(package)组织,这个例子里就是package main, 表示该文件属于哪个包,main包比较特殊。它定义了一个独立可执行的程序,而不是一个库。在main里的main函数也很特殊,它是整个程序执行时的入口。

  1. import (
  2.     "fmt"
  3.     "os"
  4.     "time"
  5. )
复制代码
import声明必须跟在文件的package声明之后。必须告诉编译器源文件需要哪些包.

  1.     s, err := os.OpenFile("/sys/class/leds/user/brightness", os.O_WRONLY, 0644)
  2.     if err != nil {
  3.         panic(err)
  4.     }
  5.     defer s.Close()
复制代码
以只写模式打开LED文件,如果打开失败直接退出程序, defer s.Close() 保证了退出程序时关闭打开的文件

  1.     go func() {
  2.         for {
  3.             s.WriteString("1")
  4.             time.Sleep(time.Millisecond * 500)
  5.             s.WriteString("0")
  6.             time.Sleep(time.Millisecond * 500)
  7.         }
  8.     }()
复制代码
这里实现了LED的闪烁

  1.     go func() {
  2.     }()
复制代码
在Go语言中,每一个并发的执行单元叫作一个goroutine, 用关键字go启动。可以简单地把goroutine类比作一个线程。

  1. s.WriteString("1")
复制代码
这里向brightness写"1",表示点亮LED, 写"0"表示关闭显示。

  1. time.Sleep(time.Millisecond * 500)
复制代码
延时500ms, 实现LED一亮一灭的效果

  1.     fmt.Println("Press enter key to exit")
  2.     var b [1]byte
  3.     os.Stdin.Read(b[:])
复制代码
这里等待用户按下回车键,如果按下回车键直接退出程序。
下次介绍Go语言读取user key。

1个回复

jinglixixi 发表于 2018-4-19 08:33:02
学习了!                        
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-4-19 23:14 , Processed in 0.489428 second(s), Total 63, Slave 48 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表