Прошлый раз, когда светодиод так восхитительно засиял, мы совсем упустили из виду, что нужно как-то регулировать ток на GPIO, поскольку 8mA, которые установлены по умолчанию, немного не похожи на нужные 4mA.
Для начала ток регулируется не для отдельного GPIO, а для всех сразу (на самом деле для трёх групп контактов, но на Raspberry Pi 3b, которая у меня, такая группа только одна - с номером 0).
Когда я занялся вопросом регулирования тока1, то обнаружил, что в библиотеке jpigpio эти функции отсутствуют, так что пришлось добавлять их. Я оформил PR, но пока его не примут в основной репозитарий можно использовать мой.
Считываем текущие установки тока и меняем, если нужно:
fun main(args: Array<String>) {
// dirty hack: need to point java.library.path to the location of libJPigpioC.so
AddDir.addDir("/home/rabbit/local/lib")
println("Kotlin Raspberry Pi gentoo64")
println("You must see a blinking universe :)")
try {
// Init lib
val pigpio = Pigpio()
pigpio.gpioInitialize()
Utils.addShutdown(pigpio)
// Mode output
pigpio.gpioSetMode(LED_PIN, PI_OUTPUT)
// Check drive strength on GPIO
val strength = pigpio.gpioGetPad(0)
println("Current drive strength:${strength}mA")
if (strength != CURRENT) {
pigpio.gpioSetPad(0, CURRENT)
val newStrength = pigpio.gpioGetPad(0)
println("New drive strength:${newStrength}mA")
}
repeat(3) {
// ON
pigpio.gpioWrite(LED_PIN, PI_HIGH)
pigpio.gpioDelay(500 * 1000)
// OFF
pigpio.gpioWrite(LED_PIN, PI_LOW)
pigpio.gpioDelay(500 * 1000)
}
} catch(e: PigpioException) {
e.printStackTrace()
}
pigpio.gpioSetMode(LED_PIN, PI_INPUT)
}
const val LED_PIN = 26 // GPIO26
const val CURRENT = 4 // 4mA
Как это сработало:
Ещё раз повторю, что установка тока GPIO в 4mA не означает, что ток будет ограничен этим значением. Это всего лишь гарантирует, что при токе в 4mA логические уровни будут чётко различаться. ↩