Проверка скетча передатчика

guliyev34
Offline
Зарегистрирован: 17.03.2015

Здравствуйте, уважаемые форумчане! Возникла проблема. Был написан скетч, проверена работа вся через монитор последовательного порта. Что делает данное устройство: подключается к ардуино нано 2 джойстика (на каждом из джойстиков есть кнопка), также подключается модуль радиопередатчика nRF24L01, и кнопка обычная. В общем один джойстик отвечает за движение авто прямо и назад, другой за движение влево и вправо, и кнопка за включение фар. Кнопки на джойстиках отвечают за включение поворотников. Джойстики дают значения (-1 , 0, 1). Кнопки на джойстиках (1, 0). И кнопка фар (0, 1, 2). ВСе эти данные заносятся в массив port, и происходит отправка по радиоканалу всего массива. Попросили написать данный скетч, скинул товарищу, он загрузил, подключил все вроде как надо, но сказал что МК стал греться сильно, теперь не включается. Плюс вроде как радиомодуль вышел из строя. Я весь скетч проверял, только через монитор порта, все работало, все было идеально. А тут такое.. Что сгорела видимо ардуино, и плюс модуль радио. Может ли случиться из-за скетча такое? Вот скетч, может в нем дело? Или все же товарищ мог не правильно подключить схему? Помогите пожалуйста.. Скетч ниже.

/*
 * Скетч передатчика! Состоит на данный момент из платы Arduino Nano, радиопередатчика nRF24L01, джойстика (с кнопкой - котороая служит для вкл/откл фар)
 * Подключение радиомодуля: CE - 7 пин; CSN (CS/SS) - 8 пин; SСK - 13 пин; MOSI - 11 пин; MISO - 12 пин;
 * Подключение 1 джойстика: HOR/X - A0 пин; VER/Y - A1; MS(кнопка левого поворота) - 2 пин;
 * Подключение 2 джойстика: MS (кнопка правого поворота) - 3 пин;
 * Подключение кнопки смены состояния фар: 4 пин
 * Подключение кнопки для мигалки: 5 пин
 */

//---------Подключение библиотек------------//
#include <SPI.h>                                //Библиотека SPI позволяет контроллеру Arduino взаимодействовать с устройствами поддерживающими SPI протокол
#include <nRF24L01.h>                           //Библиотека работы с радиомодулем
#include <RF24.h>                               //Библиотека работы с радиомодулем

//---------Настройка радиомодуля------------//
const uint64_t pipe= {0xF0F0F0F0E3LL};          //Задаем номер канала для связи передатчика и приёмника - и там, и там он должен быть одинаковым. ПЕРВЫЕ 0x И ПОСЛЕНИЕ LL НЕ МЕНЯТЬ!!!
RF24 radio(7,8);                                //7 - Выбор режима: приёмник / передатчик... 8 -  Шина SPI - выбор устройства

//----------Порты ввода/вывода--------------//
#define xPin A0                                 //Подключение HOR/X контакта джойстика к пину А0 Ардуино
#define yPin A1                                 //Подключение VER/Y контакта джойстика к пину А1 Ардуино
#define pLevPin 2                               //Подключение контакта кнопки джойстика к пину D2 Ардуино (отвечает за левый поворот)
#define pPravPin 3                              //Подключение контакта кнопки джойстика к пину D3 Ардуино (отвечает за правый поворот)
#define buttonPin 4                             //Подключение контакта кнопки к пину D4 Ардуино (отвечает за состояние фар)
#define migalkaPin 5                            //Подключение контакта кнопки к пину D5 Ардуино (отвечает за включение мигалки)

//--------Переменные и константы------------//
int port[7];                                    //Массив данных для хранения инфрмации с джойстика, кнопок и т.п.
int xPosition = 0;                              //Текущее значение джойстика по оси Х (от 0 до 1023)
int yPosition = 0;                              //Текущее значение джойстика по оси Y (от 0 до 1023)
int buttonState = 0;                            //Текущее положение кнопки состояния фар
int xDirection = 0;                             //Преобразованное значение джойстика по оси Х (от -1 до 1)
int yDirection = 0;                             //Преобразованное значение джойстика по оси Y (от -1 до 1)
int pLev = 0;                                   //Состояние нажатия кнопки джойстика (левый поворот)
int pPrav = 0;                                  //Состояние нажатия кнопки джойстика (правый поворот)
int migalkaState = 0;                           //Текущее положение кнопки состояния мигалки

int buttonLight = 0;                            //Фары (0 - выкл, 1 - габариты, 2 - габариты + фары)
int migalkaPower = 0;                           //Мигалка (0 - выкл, 1 - вкл)

bool buttonMode = false;                        //Текущий режим кнопки (Исключение дребезга)
bool migalkaMode = false;                       //Текущий режим мигалки (Исключение дребезга)

const int X_THRESHOLD_LOW = 500;                //Минимальное значение в состоянии покоя джойстика по Х
const int X_THRESHOLD_HIGH = 530;               //Максимальное значение в состоянии покоя джойстика по Х
const int Y_THRESHOLD_LOW = 480;                //Минимальное значение в состоянии покоя джойстика по Y
const int Y_THRESHOLD_HIGH = 510;               //Максимальное значение в состоянии покоя джойстика по Y

//----------Начальные настройки-------------//
void setup()
{
  Serial.begin(9600);                           //Инициализация обмена данными по серийному протоколу со скоростью 9600
  
  pinMode(xPin, INPUT);                         //Настройка порта xPin на вход
  pinMode(yPin, INPUT);                         //Настройка порта xPin на вход
  pinMode(buttonPin, INPUT);                    //Настройка порта buttonPin на вход
  pinMode(buttonPin, INPUT_PULLUP);             //Активация подтягивающего резистора на пине кнопки
  pinMode(migalkaPin, INPUT);                   //Настройка порта migalkaPin на вход
  pinMode(migalkaPin, INPUT_PULLUP);            //Активация подтягивающего резистора на пине кнопки  
  pinMode(pLevPin, INPUT);                      //Настройка порта pLevPin на вход
  pinMode(pLevPin, INPUT_PULLUP);               //Активация подтягивающего резистора на пине кнопки джойстика
  pinMode(pPravPin, INPUT);                     //Настройка порта pPravPin на вход
  pinMode(pPravPin, INPUT_PULLUP);              //Активация подтягивающего резистора на пине кнопки джойстика  
  
  radio.begin();                                //Запуск работы радиомодуля
  delay(100);                                   //Даем паузу на включение
  radio.enableDynamicPayloads();                //Функция активации передачи
  radio.openWritingPipe(pipe);                  //Открытие канала для передачи
  radio.startListening();                       //Старт режима приема
}

//----------Основной цикл работы-------------//
void loop()
{
  //-Считывание показаний джойстика-//
  xPosition = analogRead(xPin);                 //Считывание значений джойстика по оси Х
  yPosition = analogRead(yPin);                 //Считывание значений джойстика по оси У
  pLev = !(digitalRead(pLevPin));               //Считывание состояния нажатия кнопки джойстика + инверсия состояния кнопки. Нажата - 1, не нажата - 0
  pPrav = !(digitalRead(pPravPin));             //Считывание состояния нажатия кнопки джойстика + инверсия состояния кнопки. Нажата - 1, не нажата - 0  
  buttonState = (digitalRead(buttonPin));       //Считывание состояния нажатия кнопки. Нажата - 1, не нажата - 0
  migalkaState = (digitalRead(migalkaPin));     //Считывание состояния нажатия кнопки. Нажата - 1, не нажата - 0

  if (pPrav == 1) { pLev = 0 ; }                //Если включили правый поворот, то выключаем левый (для ложного срабатывания)
  if (pLev == 1)  { pPrav = 0; }                //Если включили левый поворот, то выключаем правый (для ложного срабатывания)
  
  //-Преобразование показаний джойстика-//
  if (xPosition > X_THRESHOLD_HIGH)             //Если показание больше спокойного состояния, то значение = 1
      { xDirection = 1; } 
  else if (xPosition < X_THRESHOLD_LOW)         //Если показание меньше спокойного состояния, то значение = -1
      { xDirection = -1;}
  else xDirection = 0;                          //Если входит в промежуток спокойного состояния, то значение = 0
  
  if (yPosition > Y_THRESHOLD_HIGH)             //Если показание больше спокойного состояния, то значение = 1
      { yDirection = 1; } 
  else if (yPosition < Y_THRESHOLD_LOW)         //Если показание меньше спокойного состояния, то значение = -1
      { yDirection = -1; }
  else yDirection = 0;                          //Если входит в промежуток спокойного состояния, то значение = 0
  
  //-Изменение состояния фар при нажатии кнопки-//
  if(buttonState == 1 && buttonMode == false)   //Если была нажата кнопка, и режим еще не менялся
    {  
      if (buttonLight < 2)                      //Если не дошло до крайнего состояния
      { buttonLight++ ; }                       //Изменяем 
      else {buttonLight = 0; }                  //Если дошло - обнуляем (выкл. фар)                  
      buttonMode = true;                        //Меняем режим
    }
  if(buttonState == 0 && buttonMode == true)    //Если кнопка отпущена и режим менялся
    { buttonMode = false; }                     //Меняем режим на начальный 

  //----------Изменение состояния мигалки------//
  if(migalkaState == 1 && migalkaMode == false) //Если была нажата кнопка, и режим еще не менялся
    {  
      migalkaPower = !migalkaPower;             //Изменяем                
      migalkaMode = true;                       //Меняем режим
    }
  if(migalkaState == 0 && migalkaMode == true)  //Если кнопка отпущена и режим менялся
    { migalkaMode = false; }                    //Меняем режим на начальный 
        
  //-Формирование данных для отправки--//
  port[0] = xDirection;                         //Добавление в массив значений по оси Х
  port[1] = yDirection;                         //Добавление в массив значений по оси Y
  port[2] = buttonLight;                        //Добавление в массив состояния фар
  port[3] = migalkaPower;                       //Добавление в массив состояние мигалки
  port[4] = pLev;                               //Добавление в массив состояние левого поворота
  port[5] = pPrav;                              //Добавление в массив состояние правого поворота
    
  //-Отправка данных на приемную часть-//
  radio.stopListening();                        //Останавливаем прием
  radio.write(&port, sizeof(port));             //Отправляем данные
  radio.startListening();                       //Прием данных + очистка буфера
   
  //-Для проверки (калибровки) джойстика и остальной работы-//
/*//  (для проверки удалить комментарий)
  Serial.print("X1: ");                         //Вывод строки
  Serial.print(xPosition);                      //Вывод значения Х
  Serial.print(" | Y1: ");                      //Вывод строки
  Serial.print(yPosition);                      //Вывод значения У 
  Serial.print(" | X: ");                       //Вывод строки
  Serial.print(xDirection);                     //Вывод значения Х измененного
  Serial.print(" | Y: ");                       //Вывод строки
  Serial.print(yDirection);                     //Вывод значения У измененного
  Serial.print(" | Light: ");                   //Вывод строки
  Serial.println(buttonLight);                  //Вывод состояния фары (1 - вкл, 0 - откл)
  delay(100);                                   //Добавляем задержку между считыванием данных  
 //(для проверки удалить комментарий) */  
}

 

5N62V
Offline
Зарегистрирован: 25.02.2016

guliyev34 пишет:

 А тут такое.. Что сгорела видимо ардуино, и плюс модуль радио. Может ли случиться из-за скетча такое? 

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А никаких данных по подключению нет?