Hi, I am new to this group. Following is a code I tried from Derek Malloy’s videos, to read the gpio pin values. When I run this program I get “Segmentation fault”. I can’t make out how it happens. Can anybody help me out?
`
#include <stdio.h>
#include <string.h>
#define MAX 128
int readButton(int);
int main()
{
int i = 1000;
while(i–)
readButton(60);
return 0;
}
int readButton(int pin)
{
char setValue[4], GPIOPin[4], GPIODirection[MAX], GPIOValue[MAX];
FILE *GPIOHandler;
int i;
sprintf(GPIOPin, “%d”, pin);
sprintf(GPIODirection, “/sys/class/gpio/gpio%s/direction”, GPIOPin);
sprintf(GPIOValue, “/sys/class/gpio/gpio%s/value”, GPIOPin);
if ((GPIOHandler = fopen("/sys/class/gpio/export", “ab”)) == NULL)
{
fprintf(stderr, “Failed to export the GPIO\n”);
return 1;
}
strcpy(setValue, GPIOPin);
fwrite(GPIOPin, sizeof(char), 2, GPIOHandler);
fclose(GPIOHandler);
if ((GPIOHandler = fopen(GPIODirection, “rb+”)) == NULL)
{
fprintf(stderr, “Failed to set the direction\n”);
return 1;
}
strcpy(setValue, “in”);
fwrite(&setValue, sizeof(char), 3, GPIOHandler);
fclose(GPIOHandler);
if ((GPIOHandler = fopen(GPIOValue, “rb+”)) == NULL)
{
fprintf(stderr, “Failed to set read file\n”);
return 1;
}
fread(&setValue, sizeof(char), 1, GPIOHandler);
fclose(GPIOHandler);
printf(“The value of the pin is %s\n”, setValue[0]);
if ((GPIOHandler = fopen("/sys/class/gpio/unexport", “ab”)) == NULL)
{
fprintf(stderr, “Failed to unxport GPIO \n”);
return 1;
}
strcpy(setValue, GPIOPin);
fwrite(&setValue, sizeof(char), 2, GPIOHandler);
fclose(GPIOHandler);
return 0;
}
`