Skip to content

Commit

Permalink
Merge pull request #1 from TrackPlatformTeam/development
Browse files Browse the repository at this point in the history
api-v4.1.2-hardware
  • Loading branch information
AJIOB authored May 11, 2018
2 parents f9c9e20 + b8cf442 commit 9e54fdb
Show file tree
Hide file tree
Showing 322 changed files with 2,212 additions and 12,331 deletions.
9 changes: 0 additions & 9 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,9 +0,0 @@
[submodule "cxx_serial_support"]
path = code/c++/cxx-api/serial_support
url = https://github.com/wjwwood/serial.git
[submodule "cxx_gamepad_support"]
path = code/c++/cxx-gamepad-app/gamepad_support
url = https://github.com/AJIOB/libstem_gamepad.git
[submodule "cxx_libcrc"]
path = code/c++/cxx-api/libcrc
url = https://github.com/lammertb/libcrc.git
File renamed without changes.
29 changes: 29 additions & 0 deletions Arduino/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Arduino Mega 2560

В данном разделе расположены прошивки для Arduino Mega 2560 модуля.

## Зависимости

Все зависимости требуется устанавливать как библиотеки для `Arduino IDE`

* Модуль для расчета CRC `FastCRC` ([ссылка для скачивания](https://github.com/FrankBoesing/FastCRC))
* Модуль для поддержки диспея `Adafruit SSD1306` ([ссылка для скачивания](https://github.com/adafruit/Adafruit_SSD1306))
* Базовый модуль для поддержки диспея (требуется для `Adafruit SSD1306`) `Adafruit GFX Library` ([ссылка для скачивания](https://github.com/adafruit/Adafruit-GFX-Library))
* Правка исходных кодов Arduino IDE в соответствии с [этой](https://playground.arduino.cc/Main/Printf) статьей (требуется при включенных отладочных сообщениях)

## Сборка

Утилиты для сборки:

* Arduino IDE
* Microsoft Visual Studio with C++ compiler
* Visual Micro plug-in ([можно скачать отсюда](http://www.visualmicro.com/page/Arduino-Visual-Studio-Downloads.aspx))

Для сборки откройте файл `trackPlatform.sln` в установленной выше Microsoft Visual Studio. Далее следуйте стандартной процедуре сборки проекта в Visual Studio.

P.S. **Внимание!!!** Для корректной работы прошивки в версии сборки ВСЕГДА указывать `Release`, даже с включенными при компиляции отладочными сообщениями.

## Прошивка

В Visual Studio в панеле VisualMicro выберите требуемый (к которому подключена Arduino для прошивки) последовательный порт, и нажмите на иконку запуска (`Build and run`).

Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@ enum ControllerEnum {
};

enum SensorsEnum {
distance_sensor = '\001', //get value from single distance senceor
distance_sensor_all = '\002', //get value from all distance senceors
line_sensor = '\003', //get value from single line senceor
line_sensor_all = '\004' //get value from all line senceors
distance_sensor = '\001', //get value from single distance sensor
distance_sensor_all = '\002', //get value from all distance sensors
line_sensor = '\003', //get value from single line sensor
line_sensor_all = '\004', //get value from all line sensors
raw_distance_sensor = '\x05', //get raw value from single distance sensor
raw_distance_sensor_all = '\x06', //get raw value from all distance sensors
raw_line_sensor = '\x07', //get raw value from single line sensor
raw_line_sensor_all = '\x08', //get raw value from all line sensors
};

enum AreaType {
Expand Down
192 changes: 192 additions & 0 deletions Arduino/config/Constants.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
#include "Constants.h"

/* Buffer initialisation */
namespace
{
const uint8_t kUsbIconBuffer[] PROGMEM = {
0x00, 0x00, 0x0F, 0xF0, 0x08, 0x10, 0x08, 0x10, 0x0A, 0x50, 0x08, 0x10, 0x08, 0x10, 0x3F, 0xFC,
0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x30, 0x0C, 0x10, 0x08, 0x1F, 0xF8, 0x00, 0x00
};
const uint8_t kBluetoothIconBuffer[] PROGMEM = {
0x00, 0x00, 0x01, 0x80, 0x01, 0xC0, 0x09, 0x60, 0x0D, 0x30, 0x07, 0x60, 0x03, 0xC0, 0x01, 0x80,
0x03, 0xC0, 0x07, 0x60, 0x0D, 0x30, 0x09, 0x60, 0x01, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00
};
const uint8_t kWiFiIconBuffer[] PROGMEM = {
0x00, 0x00, 0x60, 0x00, 0x7C, 0x00, 0x07, 0x00, 0x61, 0xC0, 0x78, 0x60, 0x0E, 0x30, 0x03, 0x10,
0x61, 0x98, 0x78, 0xC8, 0x0C, 0x4C, 0x06, 0x64, 0x62, 0x24, 0x73, 0x36, 0x73, 0x36, 0x00, 0x00
};
const uint8_t kStatusGoodIconBuffer[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70,
0x30, 0xE0, 0x39, 0xC0, 0x1F, 0x80, 0x0F, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t kStatusBadIconBuffer[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x1E, 0x3C, 0x1F, 0x7C, 0x0F, 0xF8, 0x07, 0xF0,
0x03, 0xE0, 0x07, 0xF0, 0x0F, 0xF8, 0x1F, 0x7C, 0x1E, 0x3C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00
};
const uint8_t kStatusResolvingIconBuffer[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x04, 0x30, 0x28, 0x08, 0x30, 0x04, 0x38, 0x04, 0x00, 0x04,
0x20, 0x00, 0x20, 0x1C, 0x20, 0x0C, 0x10, 0x14, 0x0C, 0x20, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00
};
//const uint8_t kLineBuffer[] PROGMEM = {
// 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0xFE, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
// 0x00, 0x00, 0x00, 0x00, 0x0C, 0x06, 0x03, 0x3F, 0x31, 0x1B, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00
//};

const uint8_t* const kStatusIcons[] = {
kStatusGoodIconBuffer,
kStatusBadIconBuffer,
kStatusResolvingIconBuffer
};

const uint8_t kDisplayPinConfig[] = {
46,
47
};
}

/* Bluetooth (Hardware Serial3) */
// const uint8_t Constants::bluetooth_RX = 15;
// const uint8_t Constants::bluetooth_TX = 14;
const uint32_t Constants::kBluetoothSerialSpeed = 9600;

/* Wi-fi (Hardware Serial2) */
// const uint8_t Constants::wifi_RX = 17;
// const uint8_t Constants::wifi_TX = 16;
const uint32_t Constants::kWifiSerialSpeed = 115200;
const uint32_t Constants::kWifiHandshakeWaitMs = 30000;

/* USB (Hardware Serial) */
// const uint8_t Constants::usb_RX = 0;
// const uint8_t Constants::usb_TX = 1;
const uint32_t Constants::kUsbSerialSpeed = 9600;

/* Debug serial (Hardware Serial1) */
//const uint8_t Constants::dbg_uart_RX = 19;
//const uint8_t Constants::dbg_uart_TX = 18;
const uint32_t Constants::kDbgUartSpeed = 9600;

/* Movement controller (L298N) */
const uint8_t Constants::kLeftEngineEnable = 11;
const uint8_t Constants::kLeftEngineStraightPin = 7;
const uint8_t Constants::kLeftEngineReversePin = 6;
const uint8_t Constants::kRightEngineStraightPin = 5;
const uint8_t Constants::kRightEngineReversePin = 4;
const uint8_t Constants::kRightEngineEnable = 10;

/* Distanse controller */
const uint8_t Constants::kDistanceSensorReadPin = A2;
const uint8_t Constants::kDistanceSensorAPin = 33;
const uint8_t Constants::kDistanceSensorBPin = 32;
const uint8_t Constants::kDistanceSensorCPin = A3;

/* Line controller */
// A = 0, B = 1, C = 2
const uint8_t Constants::kLineSensorReadPin = A0;
const uint8_t Constants::kLineSensorAPin = 31;
const uint8_t Constants::kLineSensorBPin = 30;
const uint8_t Constants::kLineSensorCPin = A1;

/* Servo controller */
const uint8_t Constants::kServoHorizontalPin = 34;
const uint8_t Constants::kServoVerticalPin = 35;

/* Display SSD1306 controller */
//const uint8_t Constants::kDisplaySpiMosiPin = 51;
//const uint8_t Constants::kDisplaySpiClkPin = 52;
const uint8_t Constants::kDisplayDcPin = 49;
const uint8_t Constants::kDisplayCsPin = 48;
const uint8_t Constants::kDisplayResetPin = -1;

const char Constants::kCommandsDelimetr = ';';
const char Constants::kCommandsStopSymbol = '|';
const uint32_t Constants::kCommandsWaitTime = 50;

/* Class constants */
const uint8_t Constants::kMinSpeed = 0;
const uint8_t Constants::kMaxSpeed = 255;
const uint16_t Constants::kServoDelay = 20;

const uint8_t Constants::kCountDistanceSensors = 5;
const int16_t Constants::kSensorDelay = 10;

const uint8_t Constants::kCountLineSensors = 5;
const uint16_t Constants::kMinimalLineBound = 270;

const uint32_t Constants::kWaitCommandTimeInMs = 5000;

const String Constants::kGoodAnswer = "OK";
const String Constants::kBadAnswer = "ERROR";

/* USB image */
const ImageConfiguration Constants::kUsbImageConfiguration =
{
0,
0,
16,
16,
};
const ImageConfiguration Constants::kBluetoothImageConfiguration =
{
0,
16,
16,
16,
};
const ImageConfiguration Constants::kWifiImageConfiguration =
{
0,
32,
16,
16,
};
const ImageConfiguration Constants::kStatusImageConfiguration =
{
0,
48,
16,
16,
};
const ImageConfiguration Constants::kLineImageConfiguration =
{
17,
0,
1,
64,
};
const ImageConfiguration Constants::kPrintAreaImageConfiguration =
{
19,
0,
109,
64,
};

const uint8_t* Constants::kUsbImage = kUsbIconBuffer;
const uint8_t* Constants::kBluetoothImage = kBluetoothIconBuffer;
const uint8_t* Constants::kWifiImage = kWiFiIconBuffer;
const uint8_t* const* Constants::kStatusImages = kStatusIcons;
const uint8_t Constants::kStatusImagesNum = sizeof(kStatusIcons) / sizeof(kStatusIcons[0]);

const uint8_t* Constants::kDisplayTogglePins = kDisplayPinConfig;
const uint8_t Constants::kDisplayTogglePinAmount = sizeof(kDisplayPinConfig) / sizeof(kDisplayPinConfig[0]);

const String Constants::kBluetoothHeader = "Bluetooth";
const String Constants::kBluetoothAp = "TrackPlatformBT";
const String Constants::kBluetoothPassword = "7777";

const String Constants::kWifiHeader = "Wi-Fi";
const String Constants::kWifiAp = "TrackPlatformWiFi";
const String Constants::kWifiPassword = "1234567890";
const String Constants::kWifiIp = "192.168.4.1";

const String Constants::kDebugHeader = "Debug";

const String Constants::kHardwareInfoHeader = "Firmware";

Constants::Constants()
{
}

Constants::~Constants()
{
}
35 changes: 35 additions & 0 deletions code/Arduino/config/Constants.h → Arduino/config/Constants.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once
#include <Arduino.h>
#include "ImageConfiguration.h"

class Constants
{
Expand All @@ -11,6 +12,7 @@ class Constants
// static const uint8_t wifi_RX;
// static const uint8_t wifi_TX;
static const uint32_t kWifiSerialSpeed;
static const uint32_t kWifiHandshakeWaitMs;

// static const uint8_t usb_RX;
// static const uint8_t usb_TX;
Expand Down Expand Up @@ -40,6 +42,10 @@ class Constants
static const uint8_t kServoHorizontalPin;
static const uint8_t kServoVerticalPin;

static const uint8_t kDisplayDcPin;
static const uint8_t kDisplayCsPin;
static const uint8_t kDisplayResetPin;

static const char kCommandsDelimetr;
static const char kCommandsStopSymbol;
static const uint32_t kCommandsWaitTime;
Expand All @@ -59,6 +65,35 @@ class Constants
static const String kGoodAnswer;
static const String kBadAnswer;

static const ImageConfiguration kUsbImageConfiguration;
static const ImageConfiguration kBluetoothImageConfiguration;
static const ImageConfiguration kWifiImageConfiguration;
static const ImageConfiguration kStatusImageConfiguration;
static const ImageConfiguration kLineImageConfiguration;
static const ImageConfiguration kPrintAreaImageConfiguration;

static const uint8_t* kUsbImage;
static const uint8_t* kBluetoothImage;
static const uint8_t* kWifiImage;
static const uint8_t* const* kStatusImages;
static const uint8_t kStatusImagesNum;

static const uint8_t* kDisplayTogglePins;
static const uint8_t kDisplayTogglePinAmount;

static const String kBluetoothHeader;
static const String kBluetoothAp;
static const String kBluetoothPassword;

static const String kWifiHeader;
static const String kWifiAp;
static const String kWifiPassword;
static const String kWifiIp;

static const String kDebugHeader;

static const String kHardwareInfoHeader;

Constants();
~Constants();
};
Expand Down
16 changes: 16 additions & 0 deletions Arduino/config/ImageConfiguration.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/**
* @(#) ImageConfiguration.h
*/

#ifndef IMAGECONFIGURATION_H_H
#define IMAGECONFIGURATION_H_H

struct ImageConfiguration
{
const int16_t x_pos;
const int16_t y_pos;
const int16_t x_size;
const int16_t y_size;
};

#endif
21 changes: 21 additions & 0 deletions Arduino/connection/Bluetooth.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include "ConnectorEnum.h"
#include "../peripheral/display/DisplayManager.h"
#include "Bluetooth.h"

bool Bluetooth::is_inited_ = false;

#define MODULE_SERIAL Serial2

Bluetooth::Bluetooth(unsigned long speed) : IConnector(&MODULE_SERIAL)
{
if (!is_inited_)
{
is_inited_ = true;
MODULE_SERIAL.begin(speed);
DisplayManager::get_manager()->init_connector(ConnectorEnum::bluetooth_connector);
}
}

Bluetooth::~Bluetooth()
{
}
File renamed without changes.
Loading

0 comments on commit 9e54fdb

Please sign in to comment.