mirror of https://github.com/ArduPilot/ardupilot
79 lines
1.5 KiB
C++
79 lines
1.5 KiB
C++
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
|
|
|
|
/*
|
|
* AP_Relay.cpp
|
|
*
|
|
* Created on: Oct 2, 2011
|
|
* Author: Amilcar Lucas
|
|
*/
|
|
|
|
#include <AP_HAL.h>
|
|
#include "AP_Relay.h"
|
|
|
|
#if CONFIG_HAL_BOARD == HAL_BOARD_APM1
|
|
#define RELAY_PIN 47
|
|
#elif CONFIG_HAL_BOARD == HAL_BOARD_APM2 || CONFIG_HAL_BOARD == HAL_BOARD_AVR_SITL
|
|
#define RELAY_PIN 13
|
|
#elif CONFIG_HAL_BOARD == HAL_BOARD_PX4
|
|
#define RELAY_PIN 111
|
|
#else
|
|
// no relay for this board
|
|
#define RELAY_PIN -1
|
|
#endif
|
|
|
|
const AP_Param::GroupInfo AP_Relay::var_info[] PROGMEM = {
|
|
// @Param: PIN
|
|
// @DisplayName: Relay Pin
|
|
// @Description: Digital pin number for relay control.
|
|
// @User: Standard
|
|
// @Values: 13:APM2 A9 pin,47:APM1 relay,111:PX4 FMU Relay1,112:PX4 FMU Relay2,113:PX4IO Relay1,114:PX4IO Relay2,115:PX4IO ACC1,116:PX4IO ACC2
|
|
AP_GROUPINFO("PIN", 0, AP_Relay, _pin, RELAY_PIN),
|
|
|
|
AP_GROUPEND
|
|
};
|
|
|
|
|
|
extern const AP_HAL::HAL& hal;
|
|
|
|
AP_Relay::AP_Relay(void)
|
|
{
|
|
AP_Param::setup_object_defaults(this, var_info);
|
|
}
|
|
|
|
|
|
void AP_Relay::init()
|
|
{
|
|
if (_pin != -1) {
|
|
hal.gpio->pinMode(_pin, GPIO_OUTPUT);
|
|
off();
|
|
}
|
|
}
|
|
|
|
void AP_Relay::on()
|
|
{
|
|
if (_pin != -1) {
|
|
hal.gpio->write(_pin, 1);
|
|
}
|
|
}
|
|
|
|
|
|
void AP_Relay::off()
|
|
{
|
|
if (_pin != -1) {
|
|
hal.gpio->write(_pin, 0);
|
|
}
|
|
}
|
|
|
|
|
|
void AP_Relay::toggle()
|
|
{
|
|
if (_pin != -1) {
|
|
bool ison = hal.gpio->read(_pin);
|
|
if (ison)
|
|
off();
|
|
else
|
|
on();
|
|
}
|
|
}
|
|
|