|
|
@@ -0,0 +1,83 @@ |
|
|
|
// WiringPi test program: Kernel char device interface / sysfs successor |
|
|
|
// Compile: gcc -Wall wiringpi_test1_device.c -o wiringpi_test1_device -lwiringPi |
|
|
|
|
|
|
|
#include <wiringPi.h> |
|
|
|
#include <stdio.h> |
|
|
|
#include <stdlib.h> |
|
|
|
#include <signal.h> |
|
|
|
#include <string.h> |
|
|
|
#include <time.h> |
|
|
|
#include <sys/time.h> |
|
|
|
|
|
|
|
|
|
|
|
//const int GPIO = 24; //LED |
|
|
|
const int GPIO = 19; |
|
|
|
const int GPIOIN = 26; |
|
|
|
const int ToggleValue = 4; |
|
|
|
|
|
|
|
void CheckGPIO(int out) { |
|
|
|
int in = digitalRead(GPIOIN); |
|
|
|
int read = digitalRead(GPIO); |
|
|
|
|
|
|
|
int pass = 0; |
|
|
|
if (out==in && in==read) { |
|
|
|
pass = 1; |
|
|
|
} |
|
|
|
printf("GPIO%d = %d (GPIO%d = %d) -> %s\n", GPIOIN, in, GPIO, read, pass ? "passed":"failed" ); |
|
|
|
} |
|
|
|
|
|
|
|
void digitalWriteEx(int pin, int mode) { |
|
|
|
digitalWrite(pin, mode); |
|
|
|
printf("out = %d ", mode); |
|
|
|
delayMicroseconds(5000); |
|
|
|
CheckGPIO(mode); |
|
|
|
} |
|
|
|
|
|
|
|
void pullUpDnControlEx (int pin ,int mode) { |
|
|
|
pullUpDnControl (pin, mode); |
|
|
|
int out = mode==PUD_UP ? 1:0; |
|
|
|
printf("in = %4s ", mode==PUD_UP ? "up":"down"); |
|
|
|
delayMicroseconds(5000); |
|
|
|
CheckGPIO(out); |
|
|
|
} |
|
|
|
|
|
|
|
int main (void) { |
|
|
|
|
|
|
|
printf("WiringPi GPIO test program (using GPIO%d (output) and GPIO%d (input) via sys)\n", GPIO, GPIOIN); |
|
|
|
|
|
|
|
if (wiringPiSetupSys() == -1) { |
|
|
|
printf("wiringPiSetupGpioDevice failed\n\n"); |
|
|
|
exit(EXIT_FAILURE); |
|
|
|
} |
|
|
|
pinMode(GPIOIN, INPUT); |
|
|
|
pinMode(GPIO, OUTPUT); |
|
|
|
|
|
|
|
printf("toggle %d times ...\n", ToggleValue); |
|
|
|
for (int loop=1; loop<ToggleValue; loop++) { |
|
|
|
digitalWriteEx(GPIO, LOW); |
|
|
|
delayMicroseconds(600000); |
|
|
|
digitalWriteEx(GPIO, HIGH); |
|
|
|
delayMicroseconds(600000); |
|
|
|
} |
|
|
|
|
|
|
|
digitalWrite(GPIO, LOW); |
|
|
|
|
|
|
|
printf("\nWiringPi GPIO test program (using GPIO%d (input pull up/down) and GPIO%d (input) via sys)\n", GPIO, GPIOIN); |
|
|
|
pullUpDnControl (GPIO, PUD_UP); |
|
|
|
pinMode(GPIO, INPUT); |
|
|
|
delayMicroseconds(3000000); |
|
|
|
pullUpDnControl (GPIOIN, PUD_OFF); |
|
|
|
|
|
|
|
for (int loop=1; loop<ToggleValue; loop++) { |
|
|
|
pullUpDnControlEx (GPIO, PUD_DOWN); |
|
|
|
delayMicroseconds(600000); |
|
|
|
pullUpDnControlEx (GPIO, PUD_UP); |
|
|
|
delayMicroseconds(600000); |
|
|
|
} |
|
|
|
|
|
|
|
//Error wrong direction - only for fun |
|
|
|
digitalWrite(GPIO, LOW); |
|
|
|
|
|
|
|
return(EXIT_SUCCESS); |
|
|
|
} |
|
|
|
|