/*
Aluno: Lucas Carneiro de Araújo Lima
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "pico/stdlib.h"
#include "hardware/pwm.h"
#define RED 13 //Define GPIO13
#define BLUE 12 //Define GPIO12
#define GREEN 11 //Define GPIO11
#define BUZZER 21 //Define GPIO21
#define string_SIZE 10 //Define o tamanho do string da entrada
char string[string_SIZE]; //Armazena cada caractere da entrada
int string_index = 0; //Aponta pro ultimo index do string
int sleep = 1000; //Tempo padrão de duração dos LEDs
//Inicializa e Define os pinos 11, 12, 13 e 21 como saídas
void setting_outputs() {
gpio_init(RED);
gpio_set_dir(RED, GPIO_OUT);
gpio_put(RED, false);
gpio_init(GREEN);
gpio_set_dir(GREEN, GPIO_OUT);
gpio_put(GREEN, false);
gpio_init(BLUE);
gpio_set_dir(BLUE, GPIO_OUT);
gpio_put(BLUE, false);
gpio_init(BUZZER);
gpio_set_dir(BUZZER, GPIO_OUT);
gpio_put(BUZZER, false);
}
//Liga ou desliga os LEDs conforme os parâmetros
void blinking(bool rstate,bool bstate,bool gstate) {
gpio_put(RED, rstate);
gpio_put(BLUE, bstate);
gpio_put(GREEN, gstate);
}
//Liga ou desliga o buzzer
void buzzing(bool state) {
gpio_put(BUZZER, state);
}
//Realiza um liga-desliga alternado dos LEDs
void interspersed_blinking() {
gpio_put(RED, true);
sleep_ms(sleep);
gpio_put(RED, false);
gpio_put(BLUE, true);
sleep_ms(sleep);
gpio_put(BLUE, false);
gpio_put(GREEN, true);
sleep_ms(sleep);
gpio_put(GREEN, false);
}
//Altera o tempo padrão de duração dos LEDs conforme o fator multiplicativo 'time'
void sleep_time(int time) {
sleep = time * 1000;
}
int main()
{
char string[10];
int tempo;
stdio_init_all();
setting_outputs();
printf("- 1 a 9: Aumenta o tempo de duracao padrão (1000 ms) em N vezes\n"
"- red: LED Vermelho\n"
"- blue: LED Azul\n"
"- green: LED Verde\n"
"- all: Todos os LEDs\n"
"- buzz: Buzzer\n"
"- inter: Intercala os LEDs\n"
"- holdr: Mantém LED Vermelho\n"
"- holdb: Mantém LED Azul\n"
"- holdg: Mantém LED Verde\n"
"- holda: Mantém Todos os LEDs\n"
"- des: Desliga Todos os LEDs\n"
"\n\n");
while (true) {
setbuf(stdin,NULL);
scanf("%9[^\n]",&string[0]);
setbuf(stdin,NULL);
sleep_ms(200);
printf("%s",string);
//Trata os comandos de red. Mantém o LED ligado por um tempo e então desliga.
if ((strcmp(string, "red") == 0)) {
blinking(true,false,false);
sleep_ms(sleep);
blinking(false,false,false);
printf("\nLED vermelho foi aceso!!!\n\n");
}
//Trata os comandos de blue. Mantém o LED ligado por um tempo e então desliga.
else if(strcmp(string, "blue") == 0) {
blinking(false,true,false);
sleep_ms(sleep);
blinking(false,false,false);
printf("\nLED azul foi aceso!!!\n\n");
}
//Trata os comandos de green. Mantém o LED ligado por um tempo e então desliga.
else if(strcmp(string, "green") == 0) {
blinking(false,false,true);
sleep_ms(sleep);
blinking(false,false,false);
printf("\nLED verde foi aceso!!!\n\n");
}
//Trata os comandos de all. Mantém todos os LED ligados por um tempo e então desliga.
else if(strcmp(string, "all") == 0) {
blinking(true,true,true);
sleep_ms(sleep);
blinking(false,false,false);
printf("\nTodos os LEDs foram acesos!!!\n\n");
}
//Trata os comandos de holdr. Mantém o LED ligado infinitamente.
else if(strcmp(string, "holdr") == 0) {
blinking(true,false,false);
printf("\nLED vermelho está aceso (Digite DES caso queira desliga-lo)!!!\n\n");
}
//Trata os comandos de holdb. Mantém o LED ligado infinitamente.
else if(strcmp(string, "holdb") == 0) {
blinking(false,true,false);
printf("\nLED azul está aceso (Digite DES caso queira desliga-lo)!!!\n\n");
}
//Trata os comandos de holdg. Mantém o LED ligado infinitamente.
else if(strcmp(string, "holdg") == 0) {
blinking(false,false,true);
printf("\nLED verde está aceso (Digite DES caso queira desliga-lo)!!!\n\n");
}
//Trata os comandos de holda. Mantém todos os LEDs ligados infinitamente.
else if(strcmp(string, "holda") == 0) {
blinking(true,true,true);
printf("\nTodos os LEDs estão acesos (Digite DES caso queira desliga-los)!!!\n\n");
}
//Trata os comandos de buzz. Mantém o buzzer ligado por 2 segundos.
else if(strcmp(string, "buzz") == 0) {
buzzing(true);
sleep_ms(2000);
buzzing(false);
printf("\nBUZZER foi ativado!!!\n\n");
}
//Trata os comandos de inter. Intercala os LEDs
else if(strcmp(string, "inter") == 0) {
interspersed_blinking();
printf("\nLEDs foram intercalados!!!\n\n");
}
//Trata os comandos de des. Desliga todos os LEDs.
else if(strcmp(string, "des") == 0) {
blinking(false,false,false);
printf("\nTodos os LEDs estão desligados!!!\n\n");
}
//Trata os comandos de 1, 2, 3, 4, 5, 6, 7, 8 e 9. Altera o tempo de duração padrão.
else if(strlen(string) == 1 && string[0] >= '1' && string[0] <= '9') {
sleep_time(string[0] - '0');
printf("\nTempo padrão de 1000 ms alterado para %i ms\n\n",sleep);
}
//Trata comandos inválidos
else {
printf("\nComando inválido.\n\n");
}
sleep_ms(10);
}
}
Loading
pi-pico-w
pi-pico-w