Teraz program sterujący trzema urządzeniami pwm. Jak to zrobić mając tylko dwa kanały pwm?
Da się, choć sterowanie nie będzie całkowicie niezależne. Dwa urządzenia muszą działać naprzemiennie, nigdy oba w tym samym czasie, na przykład sygnalizator normalnej pracy i sygnalizator awarii. Inny przypadek to dwa urządzenia które wymagają sterowania takim samym sygnałem, na przykład sygnalizator wewnątrz budynku i sygnalizator na zewnątrz.
W prosty sposób można rozbudować ten przykład do czterech urządzeń, pamiętając o wspomnianych wyżej ograniczeniach.
Program, jak poprzednio, pwm2.c i skrypt do jego kompilacji cpwm2
Programujemy pwm, sygnał będziemy pobierać z pinów 1, 23 i 24 (numeracja wiringPi, nie BCM).
Na pinach 23 i 24 będzie taki sam sygnał, to jeden kanał, PWM1:
pinMode(1, PWM_OUTPUT); pinMode(23, PWM_OUTPUT); pinMode(24, PWM_OUTPUT); pwmSetMode(PWM_MODE_MS); pwmSetClock(1920); pwmSetRange(200);Teraz generujemy na pinach 1, 23 i 24 sygnały, z dwu różnych kanałów:
printf("Aktywne piny 1, 23 i 24\n");fflush(0); for(i=0;i<2;i++) { pwmWrite(1,5); pwmWrite(23,15); sleep(1); pwmWrite(1,25); pwmWrite(23,20); sleep(1); }Wyłączamy pwm na pinie 24, aktywne będą tylko urządzenia podpięte do pinów 1 i 23:
printf("Aktywne piny 1 i 23\n");fflush(0); for(i=0;i<2;i++) { pinMode(24, OUTPUT); pwmWrite(1,5); pwmWrite(23,15); sleep(1); pwmWrite(1,25); pwmWrite(23,20); sleep(1); }Włączamy pwm na pinie 24. Niestety musimy ponownie zaprogramować generator:
printf("Aktywne piny 1, 23 i 24\n");fflush(0); pinMode(24, PWM_OUTPUT); pwmSetMode(PWM_MODE_MS); pwmSetClock(1920); pwmSetRange(200); for(i=0;i<2;i++) { pwmWrite(1,5); pwmWrite(23,15); sleep(1); pwmWrite(1,25); pwmWrite(23,20); sleep(1); }Urządzenia podpięte do alternatywnych pinów tego samego kanału mogą działać naprzemiennie, z różnymi sygnałami, równocześnie, sterowane tym samym sygnałem, albo być selektywnie włączane lub wyłączane, wystarczy przeprogramowanie trybu pracy pinu.