// LCD1602 e Pi Pico!
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
#define pushbutton1 2 // declara o push button na porta 2 (pino 4)
#define pushbutton2 3 // declara o push button na porta 3 (pino 5)
#define switchmode 4 // declara a switch na porta 4 (pino 6)
#define buzzer 16 // declara o buzzer na porta 12 (pino 21)
int cnt = 0;
int down = 0;
int up = 0;
void setup() {
lcd.begin(16, 2);
lcd.setCursor(1, 0);
lcd.print(">> Pi Pico <<");
display(3, 1, cnt);
pinMode(pushbutton1, INPUT_PULLUP); // define o pino do botao vermelho como entrada
pinMode(pushbutton2, INPUT_PULLUP); // define o pino do botao verde como entrada
pinMode(switchmode, INPUT_PULLUP); // define o pino da switch como entrada
pinMode(buzzer, OUTPUT);
}
void loop() {
lcd.setCursor(0, 1);
if (digitalRead(pushbutton1) == LOW) { // Se o botão for pressionado
delay(1);
if (digitalRead(pushbutton1) == LOW) { // Se o botão for pressionado
if (down == 0) {
lcd.print("<");
down = -1;
if (cnt > 0) {
display(3, 1, --cnt);
}
else if (digitalRead(switchmode) == LOW) {
display(3, 1, cnt = 20);
}
else {
tom(buzzer, 262, 5); // Toca um tom de 262Hz por 0,250 segundos
}
}
}
}
else {
lcd.print(" ");
down = 0;
}
lcd.setCursor(15, 1);
if (digitalRead(pushbutton2) == LOW) { // Se o botão for pressionado
delay(1);
if (digitalRead(pushbutton2) == LOW) { // Se o botão for pressionado
if (up == 0) {
lcd.print(">");
up = -1;
if (cnt < 20) {
display(3, 1, ++cnt);
}
else if (digitalRead(switchmode) == LOW) {
display(3, 1, cnt = 0);
}
else {
tom(buzzer, 262, 5); // Toca um tom de 262Hz por 0,005 segundos
}
}
}
}
else
{
lcd.print(" ");
up = 0;
}
delay(1); // Pausa para debouncing
}
void tom(char pino, int frequencia, int duracao){
float periodo = 1000.0/frequencia; //Periodo em ms
for (int i = 0; i< duracao/(periodo);i++) { //Executa a rotina de dentro o tanta de vezes que a frequencia desejada cabe dentro da duracao
digitalWrite(pino, HIGH);
delayMicroseconds(periodo * 500); //Metade do periodo em ms
digitalWrite(pino, LOW);
delayMicroseconds(periodo * 500);
}
}
void display(int x, int y, int value) {
char buffer[3] = "00";
sprintf(buffer, "%2d", value);
lcd.setCursor(x, y);
lcd.print(buffer);
}