1 (edited by cadetandrey 2017-01-29 10:23:27)

Topic: помогите плиз

Привет
Сделал авто в топике связь лежит его скетч на реле и мигающие светодиоды.
Все работало.
Поменял реле на мотор драйв l298N
взял ваш пример все соеденил добавил мигалку.
Есть проблема машинка не едет работает либо правая сторона либо левая - короче все криво косо.
Убрал мигалку - все едет отлично.

Опытным путем нашел строку
Timer1.initialize(125000);
если ее закоментить то все едет но диоды не мигают просто горят

Может кто помочь ? в чем тут дело - сам начинающий - еще не рублю )

Андрей

///////////////////////////////////////////// 
//        RemoteXY include library         // 
///////////////////////////////////////////// 

/* определение режима соединения и подключение библиотеки RemoteXY */ 
#define REMOTEXY_MODE__SOFTWARESERIAL 
#include <SoftwareSerial.h> 
#include <RemoteXY.h>
#include <TimerOne.h>

/* настройки соединения */ 
#define REMOTEXY_SERIAL_RX 2 
#define REMOTEXY_SERIAL_TX 3 
#define REMOTEXY_SERIAL_SPEED 9600 

uint8_t  blink_loop = 0;
uint8_t  blink_mode = 0;
uint8_t  modes_count = 0;

void timerIsr()
{
  if (  blink_mode & 1 << (blink_loop & 0x07) ) digitalWrite(11, HIGH), digitalWrite(12, HIGH);
  else  digitalWrite(11, LOW), digitalWrite(12, LOW);
  blink_loop++;
}

/* конфигурация интерфейса  */
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 2,0,10,0,6,13,0,5,32,58
  ,13,37,37,2 };
   
/* структура определяет все переменные вашего интерфейса управления */
struct {

    /* input variable */
  int8_t joystick_1_x; /* =-100..100 координата x положения джойстика */
  int8_t joystick_1_y; /* =-100..100 координата y положения джойстика */

    /* other variable */
  uint8_t connect_flag;  /* =1 if wire connected, else =0 */

} RemoteXY;
#pragma pack(pop)

///////////////////////////////////////////// 
//           END RemoteXY include          // 
///////////////////////////////////////////// 

/* определяем пины управления правым мотором */
#define PIN_MOTOR_RIGHT_UP 5
#define PIN_MOTOR_RIGHT_DN 4
#define PIN_MOTOR_RIGHT_SPEED 9

/* определяем пины управления левым мотором */
#define PIN_MOTOR_LEFT_UP 7
#define PIN_MOTOR_LEFT_DN 6
#define PIN_MOTOR_LEFT_SPEED 10

/* определяем пин управления светодиодом */
//#define PIN_LED 11


/* определяем два массива с перечислением пинов для каждого мотора */
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_LED, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  blink_mode = 0B00000000;
  Timer1.initialize(125000);
  Timer1.attachInterrupt( timerIsr );

  /* инициализация модуля RemoteXY */
  RemoteXY_Init ();

}

void loop()
{
  blink_mode = 0B00001111;
 
  /* обработчик событий модуля RemoteXY */
  RemoteXY_Handler ();

  /* управляем пином светодиода */
//  digitalWrite (PIN_LED, (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);
}