PHP package for simple digital buttons (momentary switches to GND or VCC). It sits on the ScrapyardIO GPIO stack and plugs into the BareMetal HumanInput components (BasicButton, DigitalButtonPad).
Buttons are read from a digital input pin. Most switches to ground need an internal pull-up.
You can interface with them the following ways:
- A Linux single-board computer's exposed GPIO pins using the POSIX / libgpiod carrier (
posix) withLineBias::PULL_UP - An MPSSE-enabled USB-to-serial device such as an FT232H using the USB carrier (
usb)
This package makes use of modules within:
For GPIO buttons you also need:
- POSI Extension v^0.4.0 or newer
- Microscrap POSIX Drivers (
posixcarrier)
composer require dept-of-scrapyard-robotics/generic-buttons<?php
use GPIO\Common\GPIO;
use GPIO\Contracts\Digital\LineBias;
use BareMetal\Actuation\HumanInput\BasicButton;
use BareMetal\Actuation\HumanInput\DigitalButtonPad;
use DeptOfScrapyardRobotics\Actuators\GenericButtons\GenericButton;
$input = GPIO::digitalIn('posix')
->device(4) // gpiochip4 on Raspberry Pi 5 (RP1)
->pin(17)
->name('btn-a')
->lineBias(LineBias::PULL_UP)
->create();
$ic = new GenericButton($input); // active-low by default
// $ic = new GenericButton($input, active_low: false);
$button = new BasicButton('A', $ic);
$pad = new DigitalButtonPad([$button]);
$pad->poll();
if ($pad->isPressed('A')) {
// rising edge this frame
}
if ($pad->isHolding('A')) {
// held past the default 500ms threshold
}
$input->close();<?php
use BareMetal\Actuation\HumanInput\BasicButton;
use BareMetal\Actuation\HumanInput\DigitalButtonPad;
use DeptOfScrapyardRobotics\Actuators\GenericButtons\GenericButton;
$pad = new DigitalButtonPad([
new BasicButton('A', new GenericButton($inputA)),
new BasicButton('B', new GenericButton($inputB)),
]);
$pad->poll();
if ($pad->chord('A', 'B')) {
// both down
}- Configure
LineBiason theDigitalInputfactory —GenericButtondoes not set bias itself. - Default polarity is active-low (line reads low when pressed), matching pull-up + switch-to-GND wiring.
- Wrap
GenericButtoninBasicButtonfor edge / hold semantics, then inject intoDigitalButtonPad.