1

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

}

2

Re: воспроизведение звуков

пока решил проблему покупкой мп3 плейера под ардуино smile