/*
cd4051.c
Raspberry Pi driving the CD4051 multiplexer
to compile : cc cd4051.c -o cd4051 -lwiringPi
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <wiringPi.h>
// Define Pin
#define BCD 0 // GPIO 0
#define INH 3 // GPIO
3
#define COM 4 // GPIO 4
int CD4051Read(int ch)
{
unsigned int mask;
int i;
int ret;
digitalWrite(INH,1);
for(i=0;i<3;i++) {
mask=(1 << i);
digitalWrite(BCD+i,0);
if (ch & mask)
digitalWrite(BCD+i,1);
}
digitalWrite(INH,0);
usleep(1);
ret=digitalRead(COM);
return(ret);
}
int main(int argc, char **argv) {
int endFlag=1;
pid_t result_pid;
int status;
int ret;
int ch;
if (wiringPiSetup() == -1){
printf("wiringPiSetup init error\n");
exit(1);
}
pinMode(BCD, OUTPUT);
pinMode(BCD+1, OUTPUT);
pinMode(BCD+2, OUTPUT);
pinMode(INH, OUTPUT);
pinMode(COM, INPUT);
while(endFlag){
result_pid =
fork();
if (result_pid
== 0) { // 子プロセス開始
while(1){
for(ch=0;ch<8;ch++){
ret=CD4051Read(ch);
if (ret == 1) break;
usleep(5000);
}
if (ret == 1) break;
}
exit(ch);
}
wait(&status);
if
(WIFEXITED(status)) {
printf("Push Button is %d\n",WEXITSTATUS(status));
//何か処理をここに
sleep(1);
if
(WEXITSTATUS(status) == 7) endFlag=0;
}
}
exit(0);
}
|