Skip to content

Commit 9e54fdb

Browse files
authored
Merge pull request #1 from TrackPlatformTeam/development
api-v4.1.2-hardware
2 parents f9c9e20 + b8cf442 commit 9e54fdb

322 files changed

Lines changed: 2212 additions & 12331 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitmodules

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +0,0 @@
1-
[submodule "cxx_serial_support"]
2-
path = code/c++/cxx-api/serial_support
3-
url = https://github.com/wjwwood/serial.git
4-
[submodule "cxx_gamepad_support"]
5-
path = code/c++/cxx-gamepad-app/gamepad_support
6-
url = https://github.com/AJIOB/libstem_gamepad.git
7-
[submodule "cxx_libcrc"]
8-
path = code/c++/cxx-api/libcrc
9-
url = https://github.com/lammertb/libcrc.git
File renamed without changes.

Arduino/README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Arduino Mega 2560
2+
3+
В данном разделе расположены прошивки для Arduino Mega 2560 модуля.
4+
5+
## Зависимости
6+
7+
Все зависимости требуется устанавливать как библиотеки для `Arduino IDE`
8+
9+
* Модуль для расчета CRC `FastCRC` ([ссылка для скачивания](https://github.com/FrankBoesing/FastCRC))
10+
* Модуль для поддержки диспея `Adafruit SSD1306` ([ссылка для скачивания](https://github.com/adafruit/Adafruit_SSD1306))
11+
* Базовый модуль для поддержки диспея (требуется для `Adafruit SSD1306`) `Adafruit GFX Library` ([ссылка для скачивания](https://github.com/adafruit/Adafruit-GFX-Library))
12+
* Правка исходных кодов Arduino IDE в соответствии с [этой](https://playground.arduino.cc/Main/Printf) статьей (требуется при включенных отладочных сообщениях)
13+
14+
## Сборка
15+
16+
Утилиты для сборки:
17+
18+
* Arduino IDE
19+
* Microsoft Visual Studio with C++ compiler
20+
* Visual Micro plug-in ([можно скачать отсюда](http://www.visualmicro.com/page/Arduino-Visual-Studio-Downloads.aspx))
21+
22+
Для сборки откройте файл `trackPlatform.sln` в установленной выше Microsoft Visual Studio. Далее следуйте стандартной процедуре сборки проекта в Visual Studio.
23+
24+
P.S. **Внимание!!!** Для корректной работы прошивки в версии сборки ВСЕГДА указывать `Release`, даже с включенными при компиляции отладочными сообщениями.
25+
26+
## Прошивка
27+
28+
В Visual Studio в панеле VisualMicro выберите требуемый (к которому подключена Arduino для прошивки) последовательный порт, и нажмите на иконку запуска (`Build and run`).
29+
Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ enum ControllerEnum {
99
};
1010

1111
enum SensorsEnum {
12-
distance_sensor = '\001', //get value from single distance senceor
13-
distance_sensor_all = '\002', //get value from all distance senceors
14-
line_sensor = '\003', //get value from single line senceor
15-
line_sensor_all = '\004' //get value from all line senceors
12+
distance_sensor = '\001', //get value from single distance sensor
13+
distance_sensor_all = '\002', //get value from all distance sensors
14+
line_sensor = '\003', //get value from single line sensor
15+
line_sensor_all = '\004', //get value from all line sensors
16+
raw_distance_sensor = '\x05', //get raw value from single distance sensor
17+
raw_distance_sensor_all = '\x06', //get raw value from all distance sensors
18+
raw_line_sensor = '\x07', //get raw value from single line sensor
19+
raw_line_sensor_all = '\x08', //get raw value from all line sensors
1620
};
1721

1822
enum AreaType {

Arduino/config/Constants.cpp

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
#include "Constants.h"
2+
3+
/* Buffer initialisation */
4+
namespace
5+
{
6+
const uint8_t kUsbIconBuffer[] PROGMEM = {
7+
0x00, 0x00, 0x0F, 0xF0, 0x08, 0x10, 0x08, 0x10, 0x0A, 0x50, 0x08, 0x10, 0x08, 0x10, 0x3F, 0xFC,
8+
0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x30, 0x0C, 0x10, 0x08, 0x1F, 0xF8, 0x00, 0x00
9+
};
10+
const uint8_t kBluetoothIconBuffer[] PROGMEM = {
11+
0x00, 0x00, 0x01, 0x80, 0x01, 0xC0, 0x09, 0x60, 0x0D, 0x30, 0x07, 0x60, 0x03, 0xC0, 0x01, 0x80,
12+
0x03, 0xC0, 0x07, 0x60, 0x0D, 0x30, 0x09, 0x60, 0x01, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00
13+
};
14+
const uint8_t kWiFiIconBuffer[] PROGMEM = {
15+
0x00, 0x00, 0x60, 0x00, 0x7C, 0x00, 0x07, 0x00, 0x61, 0xC0, 0x78, 0x60, 0x0E, 0x30, 0x03, 0x10,
16+
0x61, 0x98, 0x78, 0xC8, 0x0C, 0x4C, 0x06, 0x64, 0x62, 0x24, 0x73, 0x36, 0x73, 0x36, 0x00, 0x00
17+
};
18+
const uint8_t kStatusGoodIconBuffer[] PROGMEM = {
19+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70,
20+
0x30, 0xE0, 0x39, 0xC0, 0x1F, 0x80, 0x0F, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
21+
};
22+
const uint8_t kStatusBadIconBuffer[] PROGMEM = {
23+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x18, 0x1E, 0x3C, 0x1F, 0x7C, 0x0F, 0xF8, 0x07, 0xF0,
24+
0x03, 0xE0, 0x07, 0xF0, 0x0F, 0xF8, 0x1F, 0x7C, 0x1E, 0x3C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00
25+
};
26+
const uint8_t kStatusResolvingIconBuffer[] PROGMEM = {
27+
0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x04, 0x30, 0x28, 0x08, 0x30, 0x04, 0x38, 0x04, 0x00, 0x04,
28+
0x20, 0x00, 0x20, 0x1C, 0x20, 0x0C, 0x10, 0x14, 0x0C, 0x20, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00
29+
};
30+
//const uint8_t kLineBuffer[] PROGMEM = {
31+
// 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0xFE, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
32+
// 0x00, 0x00, 0x00, 0x00, 0x0C, 0x06, 0x03, 0x3F, 0x31, 0x1B, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00
33+
//};
34+
35+
const uint8_t* const kStatusIcons[] = {
36+
kStatusGoodIconBuffer,
37+
kStatusBadIconBuffer,
38+
kStatusResolvingIconBuffer
39+
};
40+
41+
const uint8_t kDisplayPinConfig[] = {
42+
46,
43+
47
44+
};
45+
}
46+
47+
/* Bluetooth (Hardware Serial3) */
48+
// const uint8_t Constants::bluetooth_RX = 15;
49+
// const uint8_t Constants::bluetooth_TX = 14;
50+
const uint32_t Constants::kBluetoothSerialSpeed = 9600;
51+
52+
/* Wi-fi (Hardware Serial2) */
53+
// const uint8_t Constants::wifi_RX = 17;
54+
// const uint8_t Constants::wifi_TX = 16;
55+
const uint32_t Constants::kWifiSerialSpeed = 115200;
56+
const uint32_t Constants::kWifiHandshakeWaitMs = 30000;
57+
58+
/* USB (Hardware Serial) */
59+
// const uint8_t Constants::usb_RX = 0;
60+
// const uint8_t Constants::usb_TX = 1;
61+
const uint32_t Constants::kUsbSerialSpeed = 9600;
62+
63+
/* Debug serial (Hardware Serial1) */
64+
//const uint8_t Constants::dbg_uart_RX = 19;
65+
//const uint8_t Constants::dbg_uart_TX = 18;
66+
const uint32_t Constants::kDbgUartSpeed = 9600;
67+
68+
/* Movement controller (L298N) */
69+
const uint8_t Constants::kLeftEngineEnable = 11;
70+
const uint8_t Constants::kLeftEngineStraightPin = 7;
71+
const uint8_t Constants::kLeftEngineReversePin = 6;
72+
const uint8_t Constants::kRightEngineStraightPin = 5;
73+
const uint8_t Constants::kRightEngineReversePin = 4;
74+
const uint8_t Constants::kRightEngineEnable = 10;
75+
76+
/* Distanse controller */
77+
const uint8_t Constants::kDistanceSensorReadPin = A2;
78+
const uint8_t Constants::kDistanceSensorAPin = 33;
79+
const uint8_t Constants::kDistanceSensorBPin = 32;
80+
const uint8_t Constants::kDistanceSensorCPin = A3;
81+
82+
/* Line controller */
83+
// A = 0, B = 1, C = 2
84+
const uint8_t Constants::kLineSensorReadPin = A0;
85+
const uint8_t Constants::kLineSensorAPin = 31;
86+
const uint8_t Constants::kLineSensorBPin = 30;
87+
const uint8_t Constants::kLineSensorCPin = A1;
88+
89+
/* Servo controller */
90+
const uint8_t Constants::kServoHorizontalPin = 34;
91+
const uint8_t Constants::kServoVerticalPin = 35;
92+
93+
/* Display SSD1306 controller */
94+
//const uint8_t Constants::kDisplaySpiMosiPin = 51;
95+
//const uint8_t Constants::kDisplaySpiClkPin = 52;
96+
const uint8_t Constants::kDisplayDcPin = 49;
97+
const uint8_t Constants::kDisplayCsPin = 48;
98+
const uint8_t Constants::kDisplayResetPin = -1;
99+
100+
const char Constants::kCommandsDelimetr = ';';
101+
const char Constants::kCommandsStopSymbol = '|';
102+
const uint32_t Constants::kCommandsWaitTime = 50;
103+
104+
/* Class constants */
105+
const uint8_t Constants::kMinSpeed = 0;
106+
const uint8_t Constants::kMaxSpeed = 255;
107+
const uint16_t Constants::kServoDelay = 20;
108+
109+
const uint8_t Constants::kCountDistanceSensors = 5;
110+
const int16_t Constants::kSensorDelay = 10;
111+
112+
const uint8_t Constants::kCountLineSensors = 5;
113+
const uint16_t Constants::kMinimalLineBound = 270;
114+
115+
const uint32_t Constants::kWaitCommandTimeInMs = 5000;
116+
117+
const String Constants::kGoodAnswer = "OK";
118+
const String Constants::kBadAnswer = "ERROR";
119+
120+
/* USB image */
121+
const ImageConfiguration Constants::kUsbImageConfiguration =
122+
{
123+
0,
124+
0,
125+
16,
126+
16,
127+
};
128+
const ImageConfiguration Constants::kBluetoothImageConfiguration =
129+
{
130+
0,
131+
16,
132+
16,
133+
16,
134+
};
135+
const ImageConfiguration Constants::kWifiImageConfiguration =
136+
{
137+
0,
138+
32,
139+
16,
140+
16,
141+
};
142+
const ImageConfiguration Constants::kStatusImageConfiguration =
143+
{
144+
0,
145+
48,
146+
16,
147+
16,
148+
};
149+
const ImageConfiguration Constants::kLineImageConfiguration =
150+
{
151+
17,
152+
0,
153+
1,
154+
64,
155+
};
156+
const ImageConfiguration Constants::kPrintAreaImageConfiguration =
157+
{
158+
19,
159+
0,
160+
109,
161+
64,
162+
};
163+
164+
const uint8_t* Constants::kUsbImage = kUsbIconBuffer;
165+
const uint8_t* Constants::kBluetoothImage = kBluetoothIconBuffer;
166+
const uint8_t* Constants::kWifiImage = kWiFiIconBuffer;
167+
const uint8_t* const* Constants::kStatusImages = kStatusIcons;
168+
const uint8_t Constants::kStatusImagesNum = sizeof(kStatusIcons) / sizeof(kStatusIcons[0]);
169+
170+
const uint8_t* Constants::kDisplayTogglePins = kDisplayPinConfig;
171+
const uint8_t Constants::kDisplayTogglePinAmount = sizeof(kDisplayPinConfig) / sizeof(kDisplayPinConfig[0]);
172+
173+
const String Constants::kBluetoothHeader = "Bluetooth";
174+
const String Constants::kBluetoothAp = "TrackPlatformBT";
175+
const String Constants::kBluetoothPassword = "7777";
176+
177+
const String Constants::kWifiHeader = "Wi-Fi";
178+
const String Constants::kWifiAp = "TrackPlatformWiFi";
179+
const String Constants::kWifiPassword = "1234567890";
180+
const String Constants::kWifiIp = "192.168.4.1";
181+
182+
const String Constants::kDebugHeader = "Debug";
183+
184+
const String Constants::kHardwareInfoHeader = "Firmware";
185+
186+
Constants::Constants()
187+
{
188+
}
189+
190+
Constants::~Constants()
191+
{
192+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22
#include <Arduino.h>
3+
#include "ImageConfiguration.h"
34

45
class Constants
56
{
@@ -11,6 +12,7 @@ class Constants
1112
// static const uint8_t wifi_RX;
1213
// static const uint8_t wifi_TX;
1314
static const uint32_t kWifiSerialSpeed;
15+
static const uint32_t kWifiHandshakeWaitMs;
1416

1517
// static const uint8_t usb_RX;
1618
// static const uint8_t usb_TX;
@@ -40,6 +42,10 @@ class Constants
4042
static const uint8_t kServoHorizontalPin;
4143
static const uint8_t kServoVerticalPin;
4244

45+
static const uint8_t kDisplayDcPin;
46+
static const uint8_t kDisplayCsPin;
47+
static const uint8_t kDisplayResetPin;
48+
4349
static const char kCommandsDelimetr;
4450
static const char kCommandsStopSymbol;
4551
static const uint32_t kCommandsWaitTime;
@@ -59,6 +65,35 @@ class Constants
5965
static const String kGoodAnswer;
6066
static const String kBadAnswer;
6167

68+
static const ImageConfiguration kUsbImageConfiguration;
69+
static const ImageConfiguration kBluetoothImageConfiguration;
70+
static const ImageConfiguration kWifiImageConfiguration;
71+
static const ImageConfiguration kStatusImageConfiguration;
72+
static const ImageConfiguration kLineImageConfiguration;
73+
static const ImageConfiguration kPrintAreaImageConfiguration;
74+
75+
static const uint8_t* kUsbImage;
76+
static const uint8_t* kBluetoothImage;
77+
static const uint8_t* kWifiImage;
78+
static const uint8_t* const* kStatusImages;
79+
static const uint8_t kStatusImagesNum;
80+
81+
static const uint8_t* kDisplayTogglePins;
82+
static const uint8_t kDisplayTogglePinAmount;
83+
84+
static const String kBluetoothHeader;
85+
static const String kBluetoothAp;
86+
static const String kBluetoothPassword;
87+
88+
static const String kWifiHeader;
89+
static const String kWifiAp;
90+
static const String kWifiPassword;
91+
static const String kWifiIp;
92+
93+
static const String kDebugHeader;
94+
95+
static const String kHardwareInfoHeader;
96+
6297
Constants();
6398
~Constants();
6499
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* @(#) ImageConfiguration.h
3+
*/
4+
5+
#ifndef IMAGECONFIGURATION_H_H
6+
#define IMAGECONFIGURATION_H_H
7+
8+
struct ImageConfiguration
9+
{
10+
const int16_t x_pos;
11+
const int16_t y_pos;
12+
const int16_t x_size;
13+
const int16_t y_size;
14+
};
15+
16+
#endif

Arduino/connection/Bluetooth.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#include "ConnectorEnum.h"
2+
#include "../peripheral/display/DisplayManager.h"
3+
#include "Bluetooth.h"
4+
5+
bool Bluetooth::is_inited_ = false;
6+
7+
#define MODULE_SERIAL Serial2
8+
9+
Bluetooth::Bluetooth(unsigned long speed) : IConnector(&MODULE_SERIAL)
10+
{
11+
if (!is_inited_)
12+
{
13+
is_inited_ = true;
14+
MODULE_SERIAL.begin(speed);
15+
DisplayManager::get_manager()->init_connector(ConnectorEnum::bluetooth_connector);
16+
}
17+
}
18+
19+
Bluetooth::~Bluetooth()
20+
{
21+
}

0 commit comments

Comments
 (0)