bo_kont_dab.c

#include <stdio.h>
#include <wiringPi.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>

int btn_pin = 22;//Physical 31
int pinIOn = 3;//Physica l5
int pinO = 24;//Physical 35
int p_count = 1;
int flag = 0;
char i_c = '0';
char stringCom[12] = "mpc play 1";
char stringComStop[10] = "mpc stop";
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)
{
  if (wiringPiSetup () == -1)
    return 1 ;
  pinMode (pinO, OUTPUT);
  digitalWrite (pinO, 1);
  delay (100);
  digitalWrite (pinO, 0);
  delay (9);
  digitalWrite (pinO, 1);
  usleep (4500);
   for (i = 0; i < 8; i++)
    {
    if (stringAdd[i] == '1')
        {
        digitalWrite (pinO, 0);
        usleep (530);
        digitalWrite (pinO, 1);
        usleep (1600);
        }
    else
        {
        digitalWrite (pinO, 0);
        usleep (530);
        digitalWrite (pinO, 1);
        usleep (530);
        }
    }
    for (i = 0; i < 8; i++)
    {
    if (stringAdd[i] == '0')
        {
        digitalWrite (pinO, 0);
        usleep (530);
        digitalWrite (pinO, 1);
        usleep (1600);
        }
    else
        {
        digitalWrite (pinO, 0);
        usleep (530);
        digitalWrite (pinO, 1);
        usleep (530);
        }
    }
    for (i = 0; i < 8; i++)
    {
    if (stringDatCom[i] == '1')
        {
        digitalWrite (pinO, 0);
        usleep (530);
        digitalWrite (pinO, 1);
        usleep (1600);
        }
    else
        {
        digitalWrite (pinO, 0);
        usleep (530);
        digitalWrite (pinO, 1);
        usleep (530);
        }
    }
    for (i = 0; i < 8; i++)
    {
    if (stringDatCom[i] == '0')
        {
        digitalWrite (pinO, 0);
        usleep (530);
        digitalWrite (pinO, 1);
        usleep (1600);
        }
    else
        {
         digitalWrite (pinO, 0);
         usleep (530);
         digitalWrite (pinO, 1);
         usleep (530);
        }
    }
    digitalWrite (pinO, 0);
    usleep (560);
    digitalWrite (pinO, 1);
    delay (20);
    return 0 ;
}



int decode (int res)
    {
        flag = 1;
    if (digitalRead (pinIOn) == 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
          delay (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 ;
          delay (60);
          }
          break;
    case 122: {//2
          strcpy (stringDatCom, stringDat2);
                  serOut ();
          flag = 0;
          delay (60);
          }
          break;
    case 120: {//3
          strcpy (stringDatCom, stringDat3);
                  serOut ();
          flag = 0;
          delay (60);
          }
          break;
    case 118: {//4
                   strcpy (stringDatCom, stringDat4);
                  serOut ();
          flag = 0;
                  delay (60);
                  }
                  break;
        case 116: {//5
                  strcpy (stringDatCom, stringDat5);
                  serOut ();
          flag = 0;
                  delay (60);
                  }
                  break;
        case 114: {//6
                  strcpy (stringDatCom, stringDat6);
                  serOut ();
          flag = 0;
                  delay (60);
                  }
                  break;
    case 112: {//7
                  strcpy (stringDatCom, stringDat7);
                  serOut ();
          flag = 0;
                  delay (60);
                  }
                  break;
        case 110: {//8
                  strcpy (stringDatCom, stringDat8);
                  serOut ();
          flag = 0;
                  delay (60);
                  }
                  break;
        case 108: {//9
                  strcpy (stringDatCom, stringDat9);
                  serOut ();
          flag = 0;
                  delay (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)
{
  if (wiringPiSetup () == -1)
    return 1 ;
  pinMode (btn_pin, INPUT);
  pinMode (pinO, OUTPUT);
//  printf ("%s + %s", stringDatCom, stringDatOn);
  while (1)
    {
    while (digitalRead (btn_pin) == 1)
        {
        delay(0.5);
        pinMode (btn_pin, INPUT);
        if (digitalRead (btn_pin) == 0)
                {
                delay (1.5);
                for (i = 1; i < 8; i++)
                  {
                  delay(3.4);
                  stringDat[i] = (digitalRead (btn_pin));
                  }
                  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;
                        }
          }
        decode (res);
        delay (10);
        }
        }
    }
  return 0 ;
}


Compile med: gcc -o bo_kont_dab bo_kont_dab.c -lwiringPi

Bemærk: dette er ekspermentel software der er ingen garanti for brugbarhed, det kan derimod sandsynligvis være skadeligt, kun til brug i Danmark.