#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
const int led1 = 0;
const int led2 = 2;
const int led3 = 4;
const int led4 = 6;
const int led5 = 8;
const int led6 = 10;
const int led7 = 12;
const int led8 = 9;
const int disp1 = 21;
const int disp2 = 20;
const int disp3 = 19;
const int disp4 = 18;
const int stsp_btn = 11;
const int set_btn = 13;
const int inc_btn = 14;
const int rst_btn = 15;
const int cycle_count = 5;
int cycle = 0;
int pause_cycle = 0;
bool stop = true;
bool set = false;
bool crono = true;
int disp1_num = 0;
int disp2_num = 0;
int disp3_num = 0;
int disp4_num = 0;
int target_num = 1;
int onoff = 0;
bool itr = false;
void clear_all(){
gpio_put(led1,false);
gpio_put(led2,false);
gpio_put(led3,false);
gpio_put(led4,false);
gpio_put(led5,false);
gpio_put(led6,false);
gpio_put(led7,false);
gpio_put(led8,false);
}
void zero(){
gpio_put(led1,true);
gpio_put(led2,true);
gpio_put(led3,true);
gpio_put(led4,true);
gpio_put(led5,true);
gpio_put(led6,true);
}
void one(){
gpio_put(led2,true);
gpio_put(led3,true);
}
void two(){
gpio_put(led1,true);
gpio_put(led2,true);
gpio_put(led4,true);
gpio_put(led5,true);
gpio_put(led7,true);
}
void three(){
gpio_put(led1,true);
gpio_put(led2,true);
gpio_put(led3,true);
gpio_put(led4,true);
gpio_put(led7,true);
}
void four(){
gpio_put(led2,true);
gpio_put(led3,true);
gpio_put(led6,true);
gpio_put(led7,true);
}
void five(){
gpio_put(led1,true);
gpio_put(led3,true);
gpio_put(led4,true);
gpio_put(led6,true);
gpio_put(led7,true);
}
void six(){
gpio_put(led1,true);
gpio_put(led3,true);
gpio_put(led4,true);
gpio_put(led5,true);
gpio_put(led6,true);
gpio_put(led7,true);
}
void seven(){
gpio_put(led1,true);
gpio_put(led2,true);
gpio_put(led3,true);
}
void eight(){
gpio_put(led1,true);
gpio_put(led2,true);
gpio_put(led3,true);
gpio_put(led4,true);
gpio_put(led5,true);
gpio_put(led6,true);
gpio_put(led7,true);
}
void nine(){
gpio_put(led1,true);
gpio_put(led2,true);
gpio_put(led3,true);
gpio_put(led6,true);
gpio_put(led7,true);
}
void display_on(int disp){
if(disp==disp2){
gpio_put(led8,true);
}
gpio_put(disp,true);
sleep_ms(5);
clear_all();
gpio_put(disp,false);
}
void display_number(int disp_num){
if(disp_num == 0){
zero();
}else if(disp_num == 1){
one();
}else if(disp_num == 2){
two();
}else if(disp_num == 3){
three();
}else if(disp_num == 4){
four();
}else if(disp_num == 5){
five();
}else if(disp_num == 6){
six();
}else if(disp_num == 7){
seven();
}else if(disp_num == 8){
eight();
}else if(disp_num == 9){
nine();
}
}
void add_counter(){
disp1_num++;
if(disp1_num == 10){
disp1_num = 0;
disp2_num++;
if(disp2_num == 10){
disp2_num = 0;
disp3_num++;
if(disp3_num == 10){
disp3_num = 0;
disp4_num++;
if(disp4_num == 10){
disp4_num = 0;
}
}
}
}
}
void sub_counter(){
disp1_num--;
if(disp1_num == -1){
disp1_num = 9;
disp2_num--;
if(disp2_num == -1){
disp2_num = 9;
disp3_num--;
if(disp3_num == -1){
disp3_num = 9;
disp4_num--;
if(disp4_num == -1){
disp4_num = 9;
}
}
}
}
}
void display_management(){
display_number(disp1_num);
display_on(disp1);
display_number(disp2_num);
display_on(disp2);
display_number(disp3_num);
display_on(disp3);
display_number(disp4_num);
display_on(disp4);
}
void btn_callback(uint gpio, uint32_t events){
if((gpio == stsp_btn) && (events & GPIO_IRQ_EDGE_FALL)){
if((stop == true) && ((disp1_num!=0) || (disp2_num!=0) || (disp3_num!=0) || (disp4_num!=0)) && (set==false) && (crono==false)){
crono = false;
stop = false;
cycle = 0;
}else if((stop == true) && (set == false) && (crono == true)){
crono = true;
stop = false;
cycle = 0;
}else if(set == false){
stop = true;
}
gpio_set_irq_enabled(stsp_btn, GPIO_IRQ_EDGE_FALL, false);
}else if((gpio == set_btn) && (events & GPIO_IRQ_EDGE_FALL)&&(stop==true)){
if(set == false && (disp1_num==0) && (disp2_num==0) && (disp3_num==0) && (disp4_num==0)){
set = true;
}else if(target_num < 4 && set == true){
target_num++;
}else if(target_num == 4 && set == true){
set = false;
target_num = 1;
if((disp1_num!=0) || (disp2_num!=0) || (disp3_num!=0) || (disp4_num!=0)){
crono = false;
}else{
crono = true;
}
}
gpio_set_irq_enabled(set_btn, GPIO_IRQ_EDGE_FALL, false);
}else if((gpio == inc_btn) && (events & GPIO_IRQ_EDGE_FALL) && (set == true)){
if(target_num == 1){
if(disp1_num < 9){
disp1_num++;
}else{
disp1_num = 0;
}
}else if(target_num == 2){
if(disp2_num < 9){
disp2_num++;
}else{
disp2_num = 0;
}
}else if(target_num == 3){
if(disp3_num < 9){
disp3_num++;
}else{
disp3_num = 0;
}
}else if(target_num == 4){
if(disp4_num < 9){
disp4_num++;
}else{
disp4_num = 0;
}
}
gpio_set_irq_enabled(inc_btn, GPIO_IRQ_EDGE_FALL, false);
}else if(gpio == rst_btn && (events & GPIO_IRQ_EDGE_FALL)){
disp1_num = 0;
disp2_num = 0;
disp3_num = 0;
disp4_num = 0;
cycle = 0;
stop = true;
crono = true;
gpio_set_irq_enabled(rst_btn, GPIO_IRQ_EDGE_FALL, false);
}
itr = true;
}
void crono_mode(){
display_management();
cycle++;
if(cycle==cycle_count){
add_counter();
cycle = 0;
}
}
void temp_mode(){
if((disp1_num!=0) || (disp2_num!=0) || (disp3_num!=0) || (disp4_num!=0)){
display_management();
cycle++;
if(cycle==cycle_count){
sub_counter();
cycle = 0;
}
}else{
display_management();
}
}
void set_mode(){
if(target_num == 1){
display_number(disp1_num);
display_on(disp1);
}else if(target_num == 2){
display_number(disp2_num);
display_on(disp2);
}else if(target_num == 3){
display_number(disp3_num);
display_on(disp3);
}else if(target_num == 4){
display_number(disp4_num);
display_on(disp4);
}
cycle++;
}
void itr_pause(){
if(pause_cycle==75){
gpio_set_irq_enabled(stsp_btn, GPIO_IRQ_EDGE_FALL, true);
gpio_set_irq_enabled(set_btn, GPIO_IRQ_EDGE_FALL, true);
gpio_set_irq_enabled(inc_btn, GPIO_IRQ_EDGE_FALL, true);
gpio_set_irq_enabled(rst_btn, GPIO_IRQ_EDGE_FALL, true);
pause_cycle = 0;
}else if(itr == true){
pause_cycle++;
}
}
void logic(){
if(set == true){
set_mode();
}else if(stop == false){
if(crono == false){
temp_mode();
}else{
crono_mode();
}
}else{
display_management();
}
itr_pause();
}
int main() {
stdio_init_all();
gpio_init(led1);
gpio_set_dir(led1,GPIO_OUT);
gpio_init(led2);
gpio_set_dir(led2,true);
gpio_init(led3);
gpio_set_dir(led3,true);
gpio_init(led4);
gpio_set_dir(led4,true);
gpio_init(led5);
gpio_set_dir(led5,true);
gpio_init(led6);
gpio_set_dir(led6,true);
gpio_init(led7);
gpio_set_dir(led7,true);
gpio_init(led8);
gpio_set_dir(led8,true);
gpio_init(disp1);
gpio_set_dir(disp1,true);
gpio_init(disp2);
gpio_set_dir(disp2,true);
gpio_init(disp3);
gpio_set_dir(disp3,true);
gpio_init(disp4);
gpio_set_dir(disp4,true);
gpio_init(stsp_btn);
gpio_set_dir(stsp_btn,false);
gpio_pull_up(stsp_btn);
gpio_init(set_btn);
gpio_set_dir(set_btn,false);
gpio_pull_up(set_btn);
gpio_init(inc_btn);
gpio_set_dir(inc_btn,false);
gpio_pull_up(inc_btn);
gpio_init(rst_btn);
gpio_set_dir(rst_btn,false);
gpio_pull_up(rst_btn);
gpio_set_irq_enabled_with_callback(stsp_btn,GPIO_IRQ_EDGE_FALL,true,btn_callback);
gpio_set_irq_enabled_with_callback(set_btn,GPIO_IRQ_EDGE_FALL,true,btn_callback);
gpio_set_irq_enabled_with_callback(inc_btn,GPIO_IRQ_EDGE_FALL,true,btn_callback);
gpio_set_irq_enabled_with_callback(rst_btn,GPIO_IRQ_EDGE_FALL,true,btn_callback);
printf("Start Screen\n");
while (true) {
logic();
}
}Loading
pi-pico-w
pi-pico-w