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.
English