bo_kont_dab_pico.c


#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include <string.h>
#include <stdlib.h>

int in = 2;//Physical 4
int onP = 3;//Physical 5
int out = 4;//Physical 6
int p_count = 1;
int flag = 0;
int stringDat[9];
char stringDatCom[9] = "00000000";
char stringAdd[9] = "00000001";
char stringDat1[9] = "10001100";
char stringDat2[9] = "01001100";
char stringDat3[9] = "11001100";
char stringDat4[9] = "00101100";
char stringDat5[9] = "10101100";
char stringDat6[9] = "01101100";
char stringDat7[9] = "11101100";
char stringDat8[9] = "00011100";
char stringDat9[9] = "10011100";
char stringDatOn[9] = "10001010";
char stringDatSel[9] = "10110000";
char stringDatAup[9] = "01100100";
char stringDatAdown[9] = "00010100";
int i = 0;
int on = 0;
int res = 0;

int serOut (void)
{
  gpio_put(out, 1);
  sleep_ms (100);
  gpio_put(out, 0);
  sleep_ms (9);
  gpio_put(out, 1);
  sleep_us (4500);
   for (i = 0; i < 8; i++)
    {
    if (stringAdd[i] == '1')
        {
        gpio_put(out, 0);
        sleep_us (530);
        gpio_put(out, 1);
        sleep_us (1600);
        }
    else
        {
        gpio_put(out, 0);
        sleep_us (530);
        gpio_put(out, 1);
        sleep_us (530);
        }
    }
    for (i = 0; i < 8; i++)
    {
    if (stringAdd[i] == '0')
        {
        gpio_put(out, 0);
        sleep_us (530);
        gpio_put(out, 1);
        sleep_us (1600);
        }
    else
        {
        gpio_put(out, 0);
        sleep_us (530);
        gpio_put(out, 1);
        sleep_us (530);
        }
    }
    for (i = 0; i < 8; i++)
    {
    if (stringDatCom[i] == '1')
        {
        gpio_put(out, 0);
        sleep_us (530);
        gpio_put(out, 1);
        sleep_us (1600);
        }
    else
        {
        gpio_put(out, 0);
        sleep_us (530);
        gpio_put(out, 1);
        sleep_us (530);
        }
    }
    for (i = 0; i < 8; i++)
    {
    if (stringDatCom[i] == '0')
        {
        gpio_put(out, 0);
        sleep_us (530);
        gpio_put(out, 1);
        sleep_us (1600);
        }
    else
        {
         gpio_put(out, 0);
         sleep_us (530);
         gpio_put(out, 1);
         sleep_us (530);
        }
    }
    gpio_put(out, 0);
    sleep_us (560);
    gpio_put(out, 1);
    sleep_ms (20);
    return 0 ;
}



int decode (int res)
    {
     flag = 1;
    gpio_init(onP);
    gpio_set_dir(onP, GPIO_IN);
    if (gpio_get(onP) == 1)
        on = 1;
    else
        on = 0;
        switch (res)
        {
        case 86 : {//PHONO
          if (on == 0)
            {
            strcpy (stringDatCom, stringDatOn);
            serOut ();
            p_count = 1;
            }
          strcpy (stringDatCom, stringDatSel);
                  serOut ();
          flag = 0;
                  }
                  break;
        case 84 : {//TAPE fr_sl
          if (on == 0)
            {
            strcpy (stringDatCom, stringDatOn);
                    serOut ();
            p_count = 1;
            }
                  strcpy (stringDatCom, stringDatSel);
                  serOut ();
                  flag = 0;
                  }
                  break;
    case 3 :  {//NUM
          sleep_ms (130);
          flag = 0;
          }
          break;
        case 54 : {//AUX
          if (on == 0)
            {
            strcpy (stringDatCom, stringDatOn);
                    serOut ();
            p_count = 1;
            }
           strcpy (stringDatCom, stringDatSel);
                  serOut ();
                  flag = 0;
          }
                  break;
        case 50 : {//STOP
                  strcpy (stringDatCom, stringDatSel);
          serOut ();
                  flag = 0;
                  }
                  break;
        case 74 : {//T STOP
                  strcpy (stringDatCom, stringDatSel);
                  serOut ();
                  flag = 0;
                  }
                  break;
        case 52 : {//OFF
          if (on == 1)
            {
                    strcpy (stringDatCom, stringDatOn);
            serOut ();
            }
                  flag = 0;
                  }
                  break;
        case 106 : p_count ++;//RIGHT ARROW
                  break;
        case 102 : p_count ++;//T RIGHT ARROW
                  break;
        case 12 : p_count --;//LEFT ARROW
                  break;
        case 76 : p_count --;//T LEFT ARROW
                  break;
    case 44 : {//RIGHT DOUBLE ARROW
                  strcpy (stringDatCom, stringDatAup);
                  serOut ();
          flag = 0;
                  }
                  break;
    case 78 : {//T RIGHT DOUBLE ARROW
          strcpy (stringDatCom, stringDatAup);
                  serOut ();
                  flag = 0;
          }
          break;
        case 46 : {//LEFT DOUBLE ARROW
                  strcpy (stringDatCom, stringDatAdown);
                  serOut ();
          flag = 0;
                  }
                  break;
    case 80 : {//T LEFT DOUBLE ARROW
          strcpy (stringDatCom, stringDatAdown);
                  serOut ();
                  flag = 0;
                  }
    case 124: {//1
          strcpy (stringDatCom, stringDat1);
          serOut ();
          flag = 0 ;
          sleep_ms (60);
          }
          break;
    case 122: {//2
          strcpy (stringDatCom, stringDat2);
                  serOut ();
          flag = 0;
          sleep_ms (60);
          }
          break;
    case 120: {//3
          strcpy (stringDatCom, stringDat3);
                  serOut ();
          flag = 0;
          sleep_ms (60);
          }
          break;
    case 118: {//4
                   strcpy (stringDatCom, stringDat4);
                  serOut ();
          flag = 0;
                  sleep_ms (60);
                  }
                  break;
        case 116: {//5
                  strcpy (stringDatCom, stringDat5);
                  serOut ();
          flag = 0;
                  sleep_ms (60);
                  }
                  break;
        case 114: {//6
                  strcpy (stringDatCom, stringDat6);
                  serOut ();
          flag = 0;
                  sleep_ms (60);
                  }
                  break;
    case 112: {//7
                  strcpy (stringDatCom, stringDat7);
                  serOut ();
          flag = 0;
                  sleep_ms (60);
                  }
                  break;
        case 110: {//8
                  strcpy (stringDatCom, stringDat8);
                  serOut ();
          flag = 0;
                  sleep_ms (60);
                  }
                  break;
        case 108: {//9
                  strcpy (stringDatCom, stringDat9);
                  serOut ();
          flag = 0;
                  sleep_ms (60);
                  }
                  break;
     default:  {
                  flag = 0;
          return 0;
                  }
                }
                if (flag == 1)
                {
                if (p_count > 9)
                  {
                  p_count = 1;
                  }
                if (p_count < 1)
                  {
                  p_count = 9;
                  }
        switch (p_count)
        {
        case 1 : {
            strcpy (stringDatCom, stringDat1);
            serOut ();
            }
            break;
        case 2 : {
            strcpy (stringDatCom, stringDat2);
            serOut ();
            }
            break;
        case 3 : {
            strcpy (stringDatCom, stringDat3);
            serOut ();
            }
            break;
        case 4 : {
                        strcpy (stringDatCom, stringDat4);
                        serOut ();
                        }
                        break;
        case 5 : {
                        strcpy (stringDatCom, stringDat5);
                        serOut ();
                        }
                        break;
        case 6 : {
                        strcpy (stringDatCom, stringDat6);
                        serOut ();
                        }
                        break;
        case 7 : {
                        strcpy (stringDatCom, stringDat7);
                        serOut ();
                        }
                        break;
        case 8 : {
                        strcpy (stringDatCom, stringDat8);
                        serOut ();
                        }
                        break;
        case 9 : {
                        strcpy (stringDatCom, stringDat9);
                        serOut ();
                        }
                        break;
        }
                }
        return 0;
}

int main (void)
{
  stdio_init_all();
  gpio_init(in);
  gpio_set_dir(in, GPIO_IN);
//  gpio_pull_up(in);
  gpio_init(out);
  gpio_set_dir(out, GPIO_OUT);
  gpio_put(out, 1);
  while (1)
    {
    while (gpio_get(in) == 1)
        {
        sleep_us(500);
        if (gpio_get(in) == 0)
                {
                sleep_us (1500);
                for (i = 1; i < 8; i++)
                  {
                  sleep_us(3100);
                  stringDat[i] = (gpio_get(in));
                  }
                  res = 0;
                  for (i = 1; i < 8; i++)
                        {
                        switch (i)
                        {
                        case 1 : res = stringDat[i] * 64;
                        break;
                        case 2 : res = res + (stringDat[i] * 32);
                        break;
                        case 3 : res = res + (stringDat[i] * 16);
                        break;
                        case 4 : res = res + (stringDat[i] * 8);
                        break;
                        case 5 : res = res + (stringDat[i] * 4);
                        break;
                        case 6 : res = res + (stringDat[i] * 2);
                        break;
                        case 7 : res = res + (stringDat[i] * 1);
                        break;
                        }
          }
//        res = 86;
        decode (res);
        sleep_ms (10);
        }
        }
    }
  return 0 ;
}


CMakeLists.txt

cmake_minimum_required(VERSION 3.13)

include(pico_sdk_import.cmake)

project(test_project C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()

add_executable(bo_kont_dab_pico bo_kont_dab_pico.c)
# pico_enable_stdio_usb(test 1)
# pico_enable_stdio_uart(test 1)

pico_add_extra_outputs(bo_kont_dab_pico)

target_link_libraries(bo_kont_dab_pico pico_stdlib)