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)