rpi_micro_examples/pdu.c

104 lines
2.2 KiB
C
Raw Normal View History

2021-10-31 15:26:17 +00:00
#include <stdio.h>
#include <string.h>
#include "uart.h"
#include "pico/stdlib.h"
#include "hardware/uart.h"
#define UART_ID uart0
#define DATA_BITS 8
#define STOP_BITS 1
#define PARITY UART_PARITY_NONE
#define UART_TX_PIN 16
#define UART_RX_PIN 17
#define MAX_COMMAND_LENGTH 32
#define PINA 6
#define PINB 7
#define PINC 8
#define PIND 9
void set_power_state(char relay, bool on) {
uint state;
if (on)
state = 0;
else
state = 1;
uint pin;
switch (relay) {
case 'a' :
pin = PINA;
break;
case 'b' :
pin = PINB;
break;
case 'c' :
pin = PINC;
break;
case 'd' :
pin = PIND;
break;
}
gpio_put(pin, state);
}
int main() {
char command_string[MAX_COMMAND_LENGTH + 1];
command_string[0] = 0;
uint command_len = 0;
uart_init(UART_ID, 9600);
gpio_set_function(UART_TX_PIN, GPIO_FUNC_UART);
gpio_set_function(UART_RX_PIN, GPIO_FUNC_UART);
uart_set_hw_flow(UART_ID, false, false);
uart_set_format(UART_ID, DATA_BITS, STOP_BITS, PARITY);
gpio_init(PINA);
gpio_init(PINB);
gpio_init(PINC);
gpio_init(PIND);
gpio_set_dir(PINA, GPIO_OUT);
gpio_set_dir(PINB, GPIO_OUT);
gpio_set_dir(PINC, GPIO_OUT);
gpio_set_dir(PIND, GPIO_OUT);
gpio_put(PINA, 1);
gpio_put(PINB, 1);
gpio_put(PINC, 1);
gpio_put(PIND, 1);
bool eol;
char word[9];
char relay;
while (true) {
read_word(UART_ID, word, 9, &eol);
if (strcmp(word, "on") == 0) {
if (eol) {
uart_puts(UART_ID, "Missing argument: n");
continue;
}
relay = uart_getc(UART_ID);
finish_line(UART_ID);
set_power_state(relay, true);
} else if (strcmp(word, "off") == 0) {
if (eol) {
uart_puts(UART_ID, "Missing argument: n");
continue;
}
relay = uart_getc(UART_ID);
finish_line(UART_ID);
set_power_state(relay, false);
} else if (strcmp(word, "temps") == 0) {
uart_puts(UART_ID, "Not implemented yet");
}
}
}