Biblioteki WiringPi mają wbudowaną obsługę PiFaceDigital, dlatego w łatwy sposób można obsłużyć te rozszerzenie do Raspberry. Niestety szybkie wysyłanie danych przez SPI mocno obciąża procesor, dlatego nie polecam załączać więcej niż 2 soft PWM. Aby uruchomić PiFace za pomocą WiringPi wystarczy wpisać:
wiringPiSetupSys () ;
piFaceSetup (200) ;
Gdzie 200 oznacza port wyjściowy o numerze 0. Następnie należy nasz plik skompilować przy użyciu komendy:
cc -o wyk pwm.c -lwiringPi -lpthread -lwiringPiDev
i uruchomić program za pomocą:
Program powinien zadeklarować piny 0,1,4,5,6,7 jako wyjścia, a piny 2 i 3 jako SoftPwm.
Działający program pwm.c można zobaczyć poniżej:
#include <wiringPi.h>
#include <softPwm.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <piFace.h>
#define PIFACE_BASE 200
int main (void)
{
int i, j,pin ;
printf ("Raspberry Pi PiFace + PWM test program\n") ;
wiringPiSetupSys () ;
piFaceSetup (PIFACE_BASE) ;
pullUpDnControl (PIFACE_BASE + 0, PUD_UP) ;
digitalWrite (PIFACE_BASE + 0, 0) ;
pullUpDnControl (PIFACE_BASE + 1, PUD_UP) ;
digitalWrite (PIFACE_BASE + 1, 0) ;
pullUpDnControl (PIFACE_BASE + 4, PUD_UP) ;
digitalWrite (PIFACE_BASE + 4, 0) ;
pullUpDnControl (PIFACE_BASE + 5, PUD_UP) ;
digitalWrite (PIFACE_BASE + 5, 0) ;
pullUpDnControl (PIFACE_BASE + 6, PUD_UP) ;
digitalWrite (PIFACE_BASE + 6, 0) ;
pullUpDnControl (PIFACE_BASE + 7, PUD_UP) ;
digitalWrite (PIFACE_BASE + 7, 0) ;
softPwmCreate (PIFACE_BASE+2, 0, 100) ;
softPwmCreate (PIFACE_BASE+3, 0, 100) ;
for (;;)
{
digitalWrite (PIFACE_BASE + 0, 0) ;
digitalWrite (PIFACE_BASE + 1, 0) ;
softPwmWrite (PIFACE_BASE+2, 50) ;
softPwmWrite (PIFACE_BASE+3, 50) ;
digitalWrite (PIFACE_BASE + 4, 0) ;
digitalWrite (PIFACE_BASE + 5, 0) ;
digitalWrite (PIFACE_BASE + 6, 0) ;
digitalWrite (PIFACE_BASE + 7, 0) ;
delay(200);
digitalWrite (PIFACE_BASE + 0, 1) ;
digitalWrite (PIFACE_BASE + 1, 1) ;
digitalWrite (PIFACE_BASE + 4, 1) ;
digitalWrite (PIFACE_BASE + 5, 1) ;
digitalWrite (PIFACE_BASE + 6, 1) ;
digitalWrite (PIFACE_BASE + 7, 1) ;
}
return 0 ;
}
|