Topic: воспроизведение звуков
Добрый день, кто может помочь с воспроизведением звуков. Собран и запущен Танк, все прекрасно работает, но не знаю как добавить звук работающего мотора и выстрела. А также как организовать имитацию отката танка при выстреле?
Исходный код ниже:
//////////////////////////////////////////////
// RemoteXY include library //
//////////////////////////////////////////////
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__HARDSERIAL
#include <RemoteXY.h>
// настройки соединения
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 9600
#include <Servo.h>
// конфигурация интерфейса
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255,7,0,0,0,147,0,8,216,0,
1,8,56,18,12,12,1,31,81,0,
2,0,82,57,16,5,2,26,31,31,
79,78,0,79,70,70,0,5,37,8,
15,30,30,246,117,31,4,0,85,6,
10,44,49,136,129,0,55,14,13,3,
17,208,178,209,139,209,129,209,130,209,
128,208,181,208,187,0,129,0,85,3,
9,3,17,208,191,209,131,209,136,208,
186,208,176,0,129,0,57,35,10,3,
17,208,177,208,176,209,136,208,189,209,
143,0,129,0,84,52,12,3,17,209,
129,209,130,208,176,209,128,209,130,208,
181,209,128,0,1,0,45,39,12,12,
3,31,76,0,1,0,67,39,12,12,
3,31,82,0 };
// структура определяет все переменные вашего интерфейса управления
struct {
// input variable
uint8_t button_1; // =1 если кнопка нажата, иначе =0
uint8_t switch_1; // =1 если переключатель включен и =0 если отключен
int8_t joystick_1_x; // =-100..100 координата x положения джойстика
int8_t joystick_1_y; // =-100..100 координата y положения джойстика
int8_t slider_2; // =0..100 положение слайдера
uint8_t button_2; // =1 если кнопка нажата, иначе =0
uint8_t button_3; // =1 если кнопка нажата, иначе =0
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
/* определяем пины управления светодиодом пушки */
#define PIN_BUTTON_1 A0
/* определяем пины управления мотором башни */
#define PIN_BUTTON_2 9
#define PIN_BUTTON_3 10
/* определяем управление пушкой */
Servo myservo;
/* определяем пины управления реле стартера */
#define PIN_SWITCH_1 12
/* определяем пины управления правым мотором */
#define PIN_MOTOR_RIGHT_UP 2
#define PIN_MOTOR_RIGHT_DN 4
#define PIN_MOTOR_RIGHT_SPEED 3
/* определяем пины управления левым мотором */
#define PIN_MOTOR_LEFT_UP 7
#define PIN_MOTOR_LEFT_DN 8
#define PIN_MOTOR_LEFT_SPEED 6
/* определяем два массива с перечислением пинов для каждого мотора */
unsigned char RightMotor[3] =
{PIN_MOTOR_RIGHT_UP, PIN_MOTOR_RIGHT_DN, PIN_MOTOR_RIGHT_SPEED};
unsigned char LeftMotor[3] =
{PIN_MOTOR_LEFT_UP, PIN_MOTOR_LEFT_DN, PIN_MOTOR_LEFT_SPEED};
/*
управление скоростью мотора
motor - ссылка на массив пинов
v - скорость мотора, может принимать значения от -100 до 100
*/
void Wheel (unsigned char * motor, int v)
{
if (v>100) v=100;
if (v<-100) v=-100;
if (v>0) {
digitalWrite(motor[0], HIGH);
digitalWrite(motor[1], LOW);
analogWrite(motor[2], v*2.55);
}
else if (v<0) {
digitalWrite(motor[0], LOW);
digitalWrite(motor[1], HIGH);
analogWrite(motor[2], (-v)*2.55);
}
else {
digitalWrite(motor[0], LOW);
digitalWrite(motor[1], LOW);
analogWrite(motor[2], 0);
}
}
void setup()
{
/* инициализация модуля RemoteXY */
RemoteXY_Init ();
/* инициализация пинов */
pinMode (PIN_MOTOR_RIGHT_UP, OUTPUT);
pinMode (PIN_MOTOR_RIGHT_DN, OUTPUT);
pinMode (PIN_MOTOR_LEFT_UP, OUTPUT);
pinMode (PIN_MOTOR_LEFT_DN, OUTPUT);
pinMode (PIN_BUTTON_1, OUTPUT);
pinMode (PIN_BUTTON_2, OUTPUT);
pinMode (PIN_BUTTON_3, OUTPUT);
pinMode (PIN_SWITCH_1, OUTPUT);
/* определяем пины управления пушкой */
// TODO you setup code
myservo.attach(5);
RemoteXY.slider_2 = 0;
}
void loop()
{
/* обработчик событий модуля RemoteXY */
RemoteXY_Handler ();
// TODO you loop code
// используйте структуру RemoteXY для передачи данных
/* управления пушкой */
int ms = RemoteXY.slider_2;
ms = map(ms, 0, 100, 5, 175);
myservo.write(ms);
/* управляем светодиода пушки */
digitalWrite(PIN_BUTTON_1, (RemoteXY.button_1==0)?LOW:HIGH);
/* управляем мотором башни */
digitalWrite(PIN_BUTTON_2, (RemoteXY.button_2==0)?LOW:HIGH);
digitalWrite(PIN_BUTTON_3, (RemoteXY.button_3==0)?LOW:HIGH);
/* управляем реле стартера */
digitalWrite(PIN_SWITCH_1, (RemoteXY.switch_1==0)?LOW:HIGH);
/* управляем правым мотором */
Wheel (RightMotor, RemoteXY.joystick_1_y - RemoteXY.joystick_1_x);
/* управляем левым мотором */
Wheel (LeftMotor, RemoteXY.joystick_1_y + RemoteXY.joystick_1_x);
}