Добавил:
oih07968
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:lab2 / lab2
.c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <bcm2835.h>
#define PIN RPI_V2_GPIO_P1_32
#define PWM_CHANNEL 0
#define RANGE 100
int main(int argc, char **argv) {
if (!bcm2835_init()) {
return 1;
}
if (argc == 3) {
if(!strcmp(argv[1], "write")) {
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);
int value = atoi(argv[2]);
if (value == 0) {
bcm2835_gpio_write(PIN, LOW);
} else if(value == 1) {
bcm2835_gpio_write(PIN, HIGH);
} else {
printf("Unknown value.");
}
} else if (!strcmp(argv[1], "pwn")) {
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_ALT0);
bcm2835_pwm_set_clock(BCM2835_PWM_CLOCK_DIVIDER_16);
bcm2835_pwm_set_mode(PWM_CHANNEL, 1, 1);
bcm2835_pwm_set_range(PWM_CHANNEL, RANGE);
int value = atoi(argv[2]);
if (value >= 0 && value <= RANGE) {
bcm2835_pwm_set_data(PWM_CHANNEL, value);
} else {
printf("Unknown value.");
}
} else {
printf("Unknown command.");
}
} else {
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_ALT0);
bcm2835_pwm_set_clock(BCM2835_PWM_CLOCK_DIVIDER_16);
bcm2835_pwm_set_mode(PWM_CHANNEL, 1, 1);
bcm2835_pwm_set_range(PWM_CHANNEL, RANGE);
bcm2835_pwm_set_data(PWM_CHANNEL, 20);
}
bcm2835_close();
return 0;
}