Модуль для работы с портами ввода / вывода компьютера Raspberry PI, который известен как малина.
Код:
; Библиотека для PureBasic предоставляющая доступ к портам ввода вывода GPIO компьютера Raspberry PI.
; Автор - Пётр.
; Версия 1.0.
; [url=https://purebasic.mybb.ru/viewtopic.php?id=885]Модуль GPIO для Raspberry PI[/url]
DeclareModule GPIO
Enumeration
#DirIN
#DirOUT
EndEnumeration
Declare Export(Pin)
Declare Unexport(Pin)
Declare Direction(Pin, Dir)
Declare ReadPin(Pin)
Declare WritePin(Pin, Value)
EndDeclareModule
Module GPIO
EnableExplicit
Procedure Export(Pin)
Protected Res = #False, id
id = OpenFile(#PB_Any, "/sys/class/gpio/export")
If id
Res = Bool(WriteString(id, Str(Pin), #PB_Ascii))
CloseFile(id)
EndIf
ProcedureReturn Res
EndProcedure
Procedure Unexport(Pin)
Protected Res = #False, id
id = OpenFile(#PB_Any, "/sys/class/gpio/unexport")
If id
Res = Bool(WriteString(id, Str(Pin), #PB_Ascii))
CloseFile(id)
EndIf
ProcedureReturn Res
EndProcedure
Procedure Direction(Pin, Dir)
Protected Res = #False, id
id = OpenFile(#PB_Any, "/sys/class/gpio/gpio"+Pin+"/direction")
If id
If Dir = #DirIN
Res = Bool(WriteString(id, "in", #PB_Ascii))
ElseIf Dir = #DirOUT
Res = Bool(WriteString(id, "out", #PB_Ascii))
EndIf
CloseFile(id)
EndIf
ProcedureReturn Res
EndProcedure
Procedure ReadPin(Pin)
Protected Res = -1, id, x.l=0
id = ReadFile(#PB_Any, "/sys/class/gpio/gpio"+Pin+"/value")
If id
If ReadData(id, @x, 3)>0
Res = Val(PeekS(@x, -1, #PB_Ascii))
EndIf
CloseFile(id)
EndIf
ProcedureReturn Res
EndProcedure
Procedure WritePin(Pin, Value)
Protected Res = #False, id
id = OpenFile(#PB_Any, "/sys/class/gpio/gpio"+Pin+"/value")
If id
Res = Bool(WriteString(id, Str(Bool(Value)), #PB_Ascii))
CloseFile(id)
EndIf
ProcedureReturn Res
EndProcedure
EndModuleПример использования.
Код:
XIncludeFile "GPIO.pbi" UseModule GPIO #PinIn = 17 ; GPIO17 #PinOut = 4 ; GPIO4 Debug "Export PinIn " + Export(#PinIn) Debug "Export PinOut "+ Export(#PinOut) Delay(800) ; Без небольшой паузы, функция 'Direction' возвращает 0. Debug "Direction PinIn " + Direction(#PinIn, #DirIN) Debug "Direction PinOut " + Direction(#PinOut, #DirOUT) For i=1 To 20 Debug "Write status " + WritePin(#PinOut, i&1) Debug "Read Value " + ReadPin(#PinIn) Delay(500) Next Debug "Unexport PinIn " + Unexport(#PinIn) Debug "Unexport PinOut "+ Unexport(#PinOut)
Схема подключения светодиода и кнопки к малине.
Свернутый текст

