Skip to main content

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

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();