Расширенный ввод-вывод

Soft PWM #

Для работы с функциями программной имитации PWM используйте инструкцию #include <softPwm.h>.

softPwmCreate() #

Инициализирует процесс программной имитации функции широтно-импульсной модуляции выходного сигнала для указанного в параметре выходного контакта.

Синтаксис #

int softPwmCreate(int pin, int value, int range)

Параметры #

pin - номер контакта.

value - ширина импульса (0-range).

range - период ШИМ (рекомендуется использовать значение из интервала 100-255)

Возврат #

0 при успешном выполнении, или отрицательное значение в случае ошибки.

softPwmWrite() #

Изменяет ширину импульса программной имитации функции широтно-импульсной модуляции выходного сигнала для указанного в параметре выходного контакта.

Синтаксис #

void softPwmWrite(int pin, int value)

Параметры #

pin - номер контакта.

value - ширина импульса (0-range).

Возврат #

Ничего.

softPwmStop() #

Завершает программную имитацию функции широтно-импульсной модуляции выходного сигнала для указанного в параметре выходного контакта.

Синтаксис #

void softPwmStop(int pin)

Параметры #

pin - номер контакта.

Возврат #

Ничего.

Пример использования Soft PWM #

Код управляет изменением цветов RGB-светодиода подключенного к контактам PA8 - красный, PA9 - зеленый и PA10 - синий.

#include <stdlib.h>
#include "wiringRP.h"
#include "softPwm.h"

// Глобальные переменные и константы
const int LED_R = 8;
const int LED_G = 9;
const int LED_B = 10;

void setup() {
    // Инициализация библиотек wiringRP
    if(setupWiringRP(WRP_MODE_SUNXI) < 0)
        exit(EXIT_FAILURE);

    // Инициализация пользовательских объектов
    pinMode(LED_R, OUTPUT);
    pinMode(LED_G, OUTPUT);
    pinMode(LED_B, OUTPUT);

    softPwmCreate(LED_R, 0, 255);
    softPwmCreate(LED_G, 0, 255);
    softPwmCreate(LED_B, 0, 255);
}

void loop() {
    // плавное включение/выключение красного цвета
    for (int i = 0; i <= 255; i++) {
        softPwmWrite(LED_R, i);
        delay(2);
    }
    for (int i = 255; i >= 0; i--) {
        softPwmWrite(LED_R, i);
        delay(2);
    }
    // плавное включение/выключение зеленого цвета
    for (int i = 0; i <= 255; i++) {
        softPwmWrite(LED_G, i);
        delay(2);
    }
    for (int i = 255; i >= 0; i--) {
        softPwmWrite(LED_G, i);
        delay(2);
    }
    // плавное включение/выключение синего цвета
    for (int i = 0; i <= 255; i++) {
        softPwmWrite(LED_B, i);
        delay(2);
    }
    for (int i = 255; i >= 0; i--) {
        softPwmWrite(LED_B, i);
        delay(2);
    }
}

ONDESTROY() {
    // Освобождение занятых ресурсов, выключение напряжения на пинах
    softPwmStop(LED_R);
    softPwmStop(LED_G);
    softPwmStop(LED_B);

    digitalWrite(LED_R, LOW);
    digitalWrite(LED_G, LOW);
    digitalWrite(LED_B, LOW);

    pinMode(LED_R, DISABLE);
    pinMode(LED_G, DISABLE);
    pinMode(LED_B, DISABLE);
    // Завершение работы библиотек
    releaseWiringRP();

    exit(0);    // выход из программы
}

MAIN_WIRINGRP();

Soft Tone #

Для работы с функциями программной имитации функции частотно-импульсной модуляции используйте инструкцию #include <softTone.h>.

softToneCreate() #

Инициализирует процесс программной имитации функции частотно-импульсной модуляции выходного сигнала для указанного в параметре выходного контакта.

Синтаксис #

int softToneCreate(int pin)

Параметры #

pin - номер контакта.

Возврат #

0 при успешном выполнении, или отрицательное значение в случае ошибки.

softToneWrite() #

Изменяет частоту импульса программной имитации функции частотно-импульсной модуляции выходного сигнала для указанного в параметре выходного контакта.

Синтаксис #

void softToneWrite(int pin, int freq)

Параметры #

pin - номер контакта.

freq - частота импульса (0-5000).

Возврат #

Ничего.

softToneStop() #

Завершает программную имитацию функции частотно-импульсной модуляции выходного сигнала для указанного в параметре выходного контакта.

Синтаксис #

void softToneStop(int pin);

Параметры #

pin - номер контакта.

Возврат #

Ничего.

Пример использования Soft Tone #

Код управляет генератором частот для воспроизведения мелодии на пьезоэлектрическом динамике подключенном к контакту PA8.

#include <stdlib.h>
#include "wiringRP.h"
#include "softTone.h"

// Глобальные переменные и константы
const int frq[17] = {440, 165, 440, 440, 165, 440, 330, 294, 262, 494, 440, 494, 262, 294, 330, 165, 440};
const int pause[17] = {250, 250, 250, 250, 250, 250, 125, 125, 125, 125, 125, 125, 125, 125, 250, 250, 250};
const int TONE_PIN = 8;

void setup() {
    // Инициализация библиотек wiringRP
    if(setupWiringRP(WRP_MODE_SUNXI) < 0)
        exit(EXIT_FAILURE);
    // Инициализация пользовательских объектов
    pinMode(TONE_PIN, OUTPUT);
    softToneCreate(TONE_PIN);
}

void loop() {
    // Основной цикл программы
    for (int j = 0; j < 17; j++) {
        softToneWrite(TONE_PIN, frq[j]);
        delay(pause[j]);
        softToneWrite(TONE_PIN, 0);
        delay(pause[j]);
    }
    delay(500);
}

ONDESTROY(){
    // Освобождение занятых ресурсов, выключение напряжения на пинах
    digitalWrite(TONE_PIN, LOW);
    pinMode(TONE_PIN, DISABLE);
    // Завершение работы библиотек
    releaseWiringRP();

    exit(0);    // выход из программы
}

MAIN_WIRINGRP();

Soft Servo #

Для работы с функциями программной имитации импульсов для управления сервоприводами используйте инструкцию #include <softServo.h>.

softServoSetup() #

Инициализирует процесс программной имитации импульсов для управления сервоприводами, подключенными к выходным контактам.

Синтаксис #

int softServoSetup(int p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7)

Параметры #

p0 - номер контакта для 1-го сервопривода. p1 - номер контакта для 2-го сервопривода. p2 - номер контакта для 3-го сервопривода. p3 - номер контакта для 4-го сервопривода. p4 - номер контакта для 5-го сервопривода. p5 - номер контакта для 6-го сервопривода. p6 - номер контакта для 7-го сервопривода. p7 - номер контакта для 8-го сервопривода.

Для неиспользуемых параметров необходимо указать значение -1.

Возврат #

0 при успешном выполнении, или отрицательное значение в случае ошибки.

softServoWrite() #

Изменяет длительность управляющего импульса для указанного в параметре выходного контакта.

Синтаксис #

void softServoWrite(int pin, int value)

Параметры #

pin - номер контакта.

value - значение для вычисления импульса (-250 - 1250).

Возврат #

Ничего.

Пример использования Soft Servo #

Код управляет изменением угла поворота вала ротора сервопривода sg90 подключенного к контакту PA8.

#include <stdlib.h>
#include "wiringRP.h"
#include "softServo.h"

// Глобальные переменные и константы
const int SERVO_PIN = 8;

void setup() {
    // Инициализация библиотек wiringRP
    if(setupWiringRP(WRP_MODE_SUNXI) < 0)
        exit(EXIT_FAILURE);
    // Инициализация пользовательских объектов
    softServoSetup(SERVO_PIN, -1, -1, -1, -1, -1, -1, -1);
}

void loop() {
    // Основной цикл программы

    // Поворот серводвигателя против часовой стрелки
    for (int i = -250; i < 1250; i += 5) {
        softServoWrite(SERVO_PIN, i);
        delay(30);
    }
    // Поворот серводвигателя по часовой стрелке
    for (int i = 1250; i > -250; i -= 5) {
        softServoWrite(SERVO_PIN, i);
        delay(30);
    }
    delay(2000);
}


ONDESTROY(){
    // Освобождение занятых ресурсов, выключение напряжения на пинах
    digitalWrite(SERVO_PIN, LOW);
    pinMode(SERVO_PIN, DISABLE);
    // Завершение работы библиотек
    releaseWiringRP();

    exit(0);    // выход из программы
}

MAIN_WIRINGRP();


79 просмотров0 комментариев

Комментарии (0)

Для участия в обсуждении Вы должны быть авторизованным пользователем
Разделы

Навигация

ВойтиРегистрация