本帖最后由 sandman78 于 2017-6-20 09:59 编辑
开发板的用户LED为板上的D12, 通过 /sys/class/leds/user/brightness 文件控制,写"1"点亮,写"0"熄灭
点亮LED
- $ echo "1" > /sys/class/leds/user/brightness
关闭LED
- $ echo "0" > /sys/class/leds/user/brightness
Go语言Go https://www.golang.org 是 Google 开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。 Go语言的特点及详细介绍可以自行搜索,因为Go语言对ARM处理器的交叉编译支持较好,Go采用静态编译,优点是没有运行库依赖,减少了各种因编译链和库版本不兼容带来的烦恼。这里选用Go来进行演示。
控制用户LED这段代码实现了开发板的用户LED控制,启动后,LED闪烁,按回车键退出程序,代码十分简单。
led.go:
- // MYS-6ULX-IOT user LED example
- package main
- import (
- "fmt"
- "os"
- "time"
- )
- func main() {
- s, err := os.OpenFile("/sys/class/leds/user/brightness", os.O_WRONLY, 0644)
- if err != nil {
- panic(err)
- }
- defer s.Close()
- go func() {
- for {
- s.WriteString("1")
- time.Sleep(time.Millisecond * 500)
- s.WriteString("0")
- time.Sleep(time.Millisecond * 500)
- }
- }()
- fmt.Println("Press enter key to exit")
- var b [1]byte
- os.Stdin.Read(b[:])
- s.WriteString("0")
- }
下面进行讲解
Go语言的代码通过包(package)组织,这个例子里就是package main, 表示该文件属于哪个包,main包比较特殊。它定义了一个独立可执行的程序,而不是一个库。在main里的main函数也很特殊,它是整个程序执行时的入口。
- import (
- "fmt"
- "os"
- "time"
- )
import声明必须跟在文件的package声明之后。必须告诉编译器源文件需要哪些包.
- s, err := os.OpenFile("/sys/class/leds/user/brightness", os.O_WRONLY, 0644)
- if err != nil {
- panic(err)
- }
- defer s.Close()
以只写模式打开LED文件,如果打开失败直接退出程序, defer s.Close() 保证了退出程序时关闭打开的文件
- go func() {
- for {
- s.WriteString("1")
- time.Sleep(time.Millisecond * 500)
- s.WriteString("0")
- time.Sleep(time.Millisecond * 500)
- }
- }()
这里实现了LED的闪烁
在Go语言中,每一个并发的执行单元叫作一个goroutine, 用关键字go启动。可以简单地把goroutine类比作一个线程。
这里向brightness写"1",表示点亮LED, 写"0"表示关闭显示。
- time.Sleep(time.Millisecond * 500)
延时500ms, 实现LED一亮一灭的效果
- fmt.Println("Press enter key to exit")
- var b [1]byte
- os.Stdin.Read(b[:])
这里等待用户按下回车键,如果按下回车键直接退出程序。
下次介绍Go语言读取user key。