Skip to content

Instantly share code, notes, and snippets.

@alfredkrohmer
Created August 6, 2017 15:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alfredkrohmer/aa11d4136a2160338061989d31dcadf7 to your computer and use it in GitHub Desktop.
Save alfredkrohmer/aa11d4136a2160338061989d31dcadf7 to your computer and use it in GitHub Desktop.
Send an arbitrary series of 0's and 1's to a GPIO with given intervals between the level change (e.g. for sending a code over a 433 MHz sender)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char **argv) {
if(argc < 4 || argc % 2) {
printf(
"Usage: %s <path to GPIO value file> <interval 1> <interval 2> ... <interval n>\n\n"
"Provide the path to the 'value' file of the GPIO in sysfs and an even number of intervals\n", argv[0]);
return 1;
}
int fd = open(argv[1], O_WRONLY);
if(fd == -1) {
perror("open");
return 1;
}
char *nums = "10";
for(int j = 0; j < 5; j++) {
for(int i = 0; i < argc - 2; i++) {
if(write(fd, nums + (i % 2), 1) != 1) {
perror("write");
return 1;
}
usleep(atoi(argv[i+2]));
}
}
if(close(fd)) {
perror("close");
return 1;
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment