В настоящее время у меня есть два 2-канальных контроллера сигнальных реле SPDT на 1 ампер, подключенных к моему Raspberry Pi 3 через I2C, и когда я сейчас запускаю функцию для включения одного реле, другое отключается одновременно (одно или другой включен). Кроме того, моя кнопка для отключения реле 1 и моя кнопка для отключения реле 2 отключат оба реле.
Моя программа написана в форме Windows (визуальная студия), и я получаю доступ к общей библиотеке C через импорт Dll, но я точно знаю, что моя проблема находится в моей библиотеке C. Я очень новичок в C и в том, как работает смещение, поэтому корень моей проблемы лежит в логике и структуре моего кода. Честно говоря, я запутался в том, как правильно кодировать это.
В настоящее время это метод включения реле 1. Это правильно включает реле, но одновременно выключает реле 2.
void Relay1On() ***CURRENTLY TURNS OTHER OFF WHEN ACTIVATED***
{
// Create I2C bus
int file;
char *bus = "/dev/i2c-1";
if ((file = open(bus, O_RDWR)) < 0)
{
printf("Failed to open the bus. \n");
exit(1);
}
// Get I2C device, MCP23008 I2C address is 0x20(32)
ioctl(file, I2C_SLAVE, 0x20);
// Configure all pins of port as output (0x00)
char config[2] = {0};
config[0] = 0x00;
config[1] = 0x00;
write(file, config, 2);
//Turn the first relay on
char data = 0x01;
config[0] = 0x09;
config[1] = data;
write(file, config, 2);
}
Вот код для выключения реле 1, я не буду публиковать включение/выключение реле 2, потому что это в основном то же самое, в Relay2On просто добавлено data += 1;
после char data = 0x01;
. Оба метода «Выкл.» приводят к отключению обоих реле.
void Relay1Off()
{
// Create I2C bus
int file;
char *bus = "/dev/i2c-1";
if ((file = open(bus, O_RDWR)) < 0)
{
printf("Failed to open the bus. \n");
exit(1);
}
// Get I2C device, MCP23008 I2C address is 0x20(32)
ioctl(file, I2C_SLAVE, 0x20);
// Configure all pins of port as output (0x00)
char config[2] = {0};
config[0] = 0x00;
config[1] = 0x00;
write(file, config, 2);
//Turn the first relay off *****Turns all off at the moment******
char data = 0xFE;
data = (data << 1);
config[0] = 0x09;
config[1] = data;
write(file, config, 2);
}
Все, что я хочу, это сделать методы, как описано, включить реле 1 при вызове метода. При вызове Relay1Off отключите только реле 1. Я уверен, что это просто, но, как я уже говорил выше, C для меня совершенно новый.
Заранее благодарим вас за любой вклад.
close(file)
в конце каждой функции. - person bdowling   schedule 18.07.2019