Управление реле — различия между версиями
Материал из Умный дом
Tohin (обсуждение | вклад) (Новая страница: «Удобное управление состоянием '''Low Level Relay''' ===== Список функций ===== relay_on(char) - включает ре…») |
Tohin (обсуждение | вклад) (→Используемые библиотеки) |
||
Строка 6: | Строка 6: | ||
===== Используемые библиотеки ===== | ===== Используемые библиотеки ===== | ||
+ | <code> | ||
#include <avr/io.h> | #include <avr/io.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
+ | </code> | ||
===== Настройка ===== | ===== Настройка ===== |
Версия 21:52, 7 марта 2017
Удобное управление состоянием Low Level Relay
Список функций
relay_on(char) - включает реле с соответствующим номером, принимает значение char от 1 до 3 (можно отредактировать в коде) relay_off(char) - включает реле relay_switch(char) - переключает состояние реле.
Используемые библиотеки
- include <avr/io.h>
- include <stdlib.h>
Настройка
В начале кода необходимо определить Port,Pin, к которому подключено реле, например:
- define RELAY1 D,5
- define RELAY2 D,6
- define RELAY3 D,7
КОД-пример
<syntaxhighlight lang="c" line>
- include <avr/io.h>
- include <util/delay.h>
- include <stdlib.h>
- define RELAY1 D,5
- define RELAY2 D,6
- define RELAY3 D,7
- define CONCAT(a, b) a ## b
- define RELAY_PIN(port) CONCAT(PIN, port)
- define RELAY_PORT(port) CONCAT(PORT, port)
- define RELAY_DDR(port) CONCAT(DDR, port)
- define set_bit(reg,value) reg |= (_BV(value))
- define unset_bit(reg,value) reg &= ~(_BV(value))
- define test_bit(reg,value) (reg & (1 << value))
- define _RELAY_ON(port,pin) {set_bit(RELAY_DDR(port),pin); unset_bit(RELAY_PORT(port),pin);}
- define RELAY_ON(x) _RELAY_ON(x)
- define _RELAY_OFF(port,pin) {set_bit(RELAY_PORT(port),pin); unset_bit(RELAY_DDR(port),pin); }
- define RELAY_OFF(x) _RELAY_OFF(x)
- define _RELAY_STATUS(port,pin) test_bit(RELAY_PIN(port),pin)
- define RELAY_STATUS(x) _RELAY_STATUS(x)
void relay_on(char relay){
switch (relay){ case 1:{ RELAY_ON(RELAY1) break; } case 2:{ RELAY_ON(RELAY2) break; } case 3:{ RELAY_ON(RELAY3) break; } }
}
void relay_off(char relay){
switch (relay){ case 1:{ RELAY_OFF(RELAY1) break; } case 2:{ RELAY_OFF(RELAY2) break; } case 3:{ RELAY_OFF(RELAY3) break; } }
}
void relay_sw(char relay) {
switch (relay){ case 1:{ RELAY_STATUS(RELAY1)?relay_on(relay):relay_off(relay); break; } case 2:{ RELAY_STATUS(RELAY2)?relay_on(relay):relay_off(relay); break; } case 3:{ RELAY_STATUS(RELAY3)?relay_on(relay):relay_off(relay); break; } }
} int main(){
char i=0; while(1){ for (i=1; i<4; i++){ relay_on(i); } _delay_ms(1000); for (i=1; i<4; i++){ relay_off(i); } _delay_ms(1000); }
} </syntaxhighlight>