remove old folder

This commit is contained in:
interfisch 2022-07-14 17:09:36 +02:00
parent 4176c9bd7e
commit a5d4d1ab22
9 changed files with 951 additions and 980 deletions

View File

@ -1,6 +0,0 @@
.pio
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch

View File

@ -1,67 +0,0 @@
# Continuous Integration (CI) is the practice, in software
# engineering, of merging all developer working copies with a shared mainline
# several times a day < https://docs.platformio.org/page/ci/index.html >
#
# Documentation:
#
# * Travis CI Embedded Builds with PlatformIO
# < https://docs.travis-ci.com/user/integration/platformio/ >
#
# * PlatformIO integration with Travis CI
# < https://docs.platformio.org/page/ci/travis.html >
#
# * User Guide for `platformio ci` command
# < https://docs.platformio.org/page/userguide/cmd_ci.html >
#
#
# Please choose one of the following templates (proposed below) and uncomment
# it (remove "# " before each line) or use own configuration according to the
# Travis CI documentation (see above).
#
#
# Template #1: General project. Test it using existing `platformio.ini`.
#
# language: python
# python:
# - "2.7"
#
# sudo: false
# cache:
# directories:
# - "~/.platformio"
#
# install:
# - pip install -U platformio
# - platformio update
#
# script:
# - platformio run
#
# Template #2: The project is intended to be used as a library with examples.
#
# language: python
# python:
# - "2.7"
#
# sudo: false
# cache:
# directories:
# - "~/.platformio"
#
# env:
# - PLATFORMIO_CI_SRC=path/to/test/file.c
# - PLATFORMIO_CI_SRC=examples/file.ino
# - PLATFORMIO_CI_SRC=path/to/test/directory
#
# install:
# - pip install -U platformio
# - platformio update
#
# script:
# - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N

View File

@ -1,10 +0,0 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}

View File

@ -1,39 +0,0 @@
This directory is intended for project header files.
A header file is a file containing C declarations and macro definitions
to be shared between several project source files. You request the use of a
header file in your project source file (C, C++, etc) located in `src` folder
by including it, with the C preprocessing directive `#include'.
```src/main.c
#include "header.h"
int main (void)
{
...
}
```
Including a header file produces the same results as copying the header file
into each source file that needs it. Such copying would be time-consuming
and error-prone. With a header file, the related declarations appear
in only one place. If they need to be changed, they can be changed in one
place, and programs that include the header file will automatically use the
new version when next recompiled. The header file eliminates the labor of
finding and changing all the copies as well as the risk that a failure to
find one copy will result in inconsistencies within a program.
In C, the usual convention is to give header files names that end with `.h'.
It is most portable to use only letters, digits, dashes, and underscores in
header file names, and at most one dot.
Read more about using header files in official GCC documentation:
* Include Syntax
* Include Operation
* Once-Only Headers
* Computed Includes
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html

View File

@ -1,46 +0,0 @@
This directory is intended for project specific (private) libraries.
PlatformIO will compile them to static libraries and link into executable file.
The source code of each library should be placed in a an own separate directory
("lib/your_library_name/[here are source files]").
For example, see a structure of the following two libraries `Foo` and `Bar`:
|--lib
| |
| |--Bar
| | |--docs
| | |--examples
| | |--src
| | |- Bar.c
| | |- Bar.h
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
| |
| |--Foo
| | |- Foo.c
| | |- Foo.h
| |
| |- README --> THIS FILE
|
|- platformio.ini
|--src
|- main.c
and a contents of `src/main.c`:
```
#include <Foo.h>
#include <Bar.h>
int main (void)
{
...
}
```
PlatformIO Library Dependency Finder will find automatically dependent
libraries scanning project source files.
More information about PlatformIO Library Dependency Finder
- https://docs.platformio.org/page/librarymanager/ldf.html

View File

@ -1,30 +0,0 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
;RF24@>=1.3.4 <- vorher benutzt
[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = arduino
upload_protocol = serial
monitor_speed = 115200
build_flags =
-D HAVE_HWSERIAL1
-D HAVE_HWSERIAL3
lib_deps =
https://github.com/maniacbug/RF24

View File

@ -1,768 +0,0 @@
#include <Arduino.h>
//Arduino IDE Settings:
//https://github.com/rogerclarkmelbourne/Arduino_STM32 in arduino/hardware
//Board: Generic STM32F103C series
//Upload method: serial
//20k RAM 64k Flash
// RX ist A10, TX ist A9 (3v3 level)
//to flash set boot0 (the one further away from reset button) to 1 and press reset, flash, program executes immediately
//set boot0 back to 0 to run program on powerup
//Flashing the hoverbrett controller (bluepill):
/*
* connect uart adapter to serial port cable (the one with more red heatshrink)
* (disconnect xt30 power connector)
* set jumper on usb uart adapter to output 5V
* hold boot0 button (black, the outermost) while powering up (or restarting with small button next to it)
* flash
*/
//PA2 may be defective on my bluepill
#define SERIAL_CONTROL_BAUD 115200 // [-] Baud rate for HoverSerial (used to communicate with the hoverboard)
#define SERIAL_BAUD 115200 // [-] Baud rate for built-in Serial (used for the Serial Monitor)
#define START_FRAME 0xABCD // [-] Start frme definition for reliable serial communication
//#define DEBUG
//#define PARAMETEROUTPUT
//void ReceiveSerial2();
//void SendSerial2(int16_t uSpeedLeft, int16_t uSpeedRight);
// Structs for serial communication
typedef struct{
uint8_t idx = 0; // Index for new data pointer
uint16_t bufStartFrame; // Buffer Start Frame
byte *p; // Pointer declaration for the new received data
byte incomingByte;
byte incomingBytePrev;
long lastValidDataSerial_time;
} SerialRead;
SerialRead Serialcom;
typedef struct{
uint16_t start;
int16_t speedLeft;
int16_t speedRight;
uint16_t checksum;
} SerialCommand;
SerialCommand Command;
typedef struct{ //match this struct to hoverboard-firmware SerialFeedback struct in main.c
uint16_t start;
int16_t cmd1;
int16_t cmd2;
int16_t speedL_meas; //left speed is positive when driving forward
int16_t speedR_meas; //right speed is negatie when driving forward
int16_t batVoltage;
int16_t boardTemp;
int16_t curL_DC; //negative values are current consumed. positive values mean generated current
int16_t curR_DC;
uint16_t cmdLed;
uint16_t checksum;
} SerialFeedback;
SerialFeedback FeedbackESC;
SerialFeedback NewFeedbackESC;
void SendSerial(SerialCommand &scom, int16_t uSpeedLeft, int16_t uSpeedRight, HardwareSerial &SerialRef);
bool ReceiveSerial(SerialRead &sread, SerialFeedback &Feedback,SerialFeedback &NewFeedback, HardwareSerial &SerialRef);
uint8_t error = 0;
#define IMU_NO_CHANGE 2 //IMU values did not change for too long
uint8_t imu_no_change_counter = 0;
#define PIN_LED PC13
#define PIN_VBAT PA0 //battery voltage after voltage divider
//#define VBAT_DIV_FACTOR 0.010700 //how much voltage (V) equals one adc unit. measured at 40V and averaged
#define VBAT_DIV_FACTOR 0.01399535423925667828 //how much voltage (V) equals one adc unit. 3444=48.2V
#define PIN_CURRENT PA1 //output of hall sensor for current measurement
#define CURRENT_OFFSET 2048 //adc reading at 0A, with CJMCU-758 typically at Vcc/2. measured with actual voltage supply in hoverbrett
#define CURRENT_FACTOR 0.38461538461538461538 //how much current (A) equals one adc unit. 2045-2032=13 at 5A
float vbat=0; //battery voltage
float ibat=0; //battery current
long last_adcupdated=0;
#define ADC_UPDATEPERIOD 10 //in ms
#define SENDPERIOD 20 //ms. delay for sending speed and steer data to motor controller via serial
//Status information sending
#define PARAMETERSENDPERIOD 50 //delay for sending stat data via nrf24
long last_parametersend=0;
#define CONTROLUPDATEPERIOD 10
long last_controlupdate = 0;
#define PIN_GAMETRAK_LENGTH PA1 //yellow (connector) / orange (gametrak module wires): length
#define PIN_GAMETRAK_VERTICAL PA3 //orange / red: vertical
#define PIN_GAMETRAK_HORIZONTAL PA4 //blue / yellow: horizontal
#define GT_LENGTH_OFFSET 4090 //adc offset value (rolled up value)
#define GT_LENGTH_MIN 220 //length in mm at which adc values start to change
#define GT_LENGTH_SCALE -0.73 //(offset-adcvalue)*scale = length[mm] (+length_min)
//2720 at 1000mm+220mm -> 1370 for 1000mm ->
#define GT_LENGTH_MAXLENGTH 2500 //maximum length in [mm]. maximum string length is around 2m80
uint16_t gt_length=0; //0=rolled up, 1unit = 1mm
#define GT_VERTICAL_CENTER 2048 //adc value for center position
#define GT_VERTICAL_RANGE 2047 //adc value difference from center to maximum (30 deg)
int8_t gt_vertical=0; //0=center. joystick can rotate +-30 degrees. -127 = -30 deg
//left = -30 deg, right= 30deg
#define GT_HORIZONTAL_CENTER 2048 //adc value for center position
#define GT_HORIZONTAL_RANGE 2047 //adc value difference from center to maximum (30 deg)
int8_t gt_horizontal=0; //0=center
uint16_t gt_length_set=1000; //set length to keep [mm]
#define GT_LENGTH_MINDIFF 10 //[mm] threshold, do not move within gt_length_set-GT_LENGTH_MINDIFF and gt_length_set+GT_LENGTH_MINDIFF
float gt_speed_p=0.7; //value to multipy difference [mm] with -> out_speed
float gt_speedbackward_p=0.7;
float gt_steer_p=2.0;
#define GT_SPEED_LIMIT 300 //maximum out_speed value +
#define GT_SPEEDBACKWARD_LIMIT 100//maximum out_speed value (for backward driving) -
#define GT_STEER_LIMIT 300 //maximum out_steer value +-
#define GT_LENGTH_MAXIMUMDIFFBACKWARD -200 //[mm]. if gt_length_set=1000 and GT_LENGTH_MAXIMUMDIFFBACKWARD=-200 then only drives backward if lenght is greater 800
//#include <IMUGY85.h>
//https://github.com/fookingthg/GY85
//ITG3200 and ADXL345 from https://github.com/jrowberg/i2cdevlib/tree/master/Arduino
//https://github.com/mechasolution/Mecha_QMC5883L //because QMC5883 on GY85 instead of HMC5883, source: https://circuitdigest.com/microcontroller-projects/digital-compass-with-arduino-and-hmc5883l-magnetometer
//in qmc5883L library read values changed from uint16_t to int16_t
#define IMUUPDATEPERIOD 10 //ms
//long last_imuupdated = 0;
//#define MAX_YAWCHANGE 90 //in degrees, if exceeded in one update intervall error will be triggered
/*
IMUGY85 imu;
double ax, ay, az, gx, gy, gz, roll, pitch, yaw, mx, my, mz, ma;
double old_ax, old_ay, old_az, old_gx, old_gy, old_gz, old_roll, old_pitch, old_yaw, old_mx, old_my, old_mz, old_ma;
double setYaw = 0;
float magalign_multiplier = 0; //how much the magnetometer should influence steering, 0=none, 1=stay aligned
*/
// Lenovo Trackpoint pinout
//from left to right. pins at bottom. chips on top
//1 GND (black)
//2 Data
//3 Clock
//4 Reset
//5 +5V (red)
//6 Right BTN
//7 Middle BTN
//8 Left BTN
//pinout: https://martin-prochnow.de/projects/thinkpad_keyboard
//see also https://github.com/feklee/usb-trackpoint/blob/master/code/code.ino
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(PB0, PB1); //ce, cs
//SCK D13 (Pro mini), A5 (bluepill)
//Miso D12 (Pro mini), A6 (bluepill)
//Mosi D11 (Pro mini), A7 (bluepill)
// Radio pipe addresses for the 2 nodes to communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
#define NRF24CHANNEL 75
struct nrfdata {
uint8_t steer;
uint8_t speed;
uint8_t commands; //bit 0 set = motor enable
uint8_t checksum;
};
nrfdata lastnrfdata;
long last_nrfreceive = 0; //last time values were received and checksum ok
long nrf_delay = 0;
#define MAX_NRFDELAY 100 //ms. maximum time delay at which vehicle will disarm
boolean radiosendOk=false;
//command variables
boolean motorenabled = false; //set by nrfdata.commands
long last_send = 0;
int16_t out_speedl = 0; //between -1000 and 1000
int16_t out_speedr = 0;
int16_t lastsend_out_speedl = 0; //last value transmitted to motor controller
int16_t lastsend_out_speedr = 0;
int16_t set_speed = 0;
int16_t set_steer = 0;
uint8_t out_checksum = 0; //0= disable motors, 255=reserved, 1<=checksum<255
#define NRFDATA_CENTER 127
//boolean armed = false;
boolean lastpacketOK = false;
//Gametrak
//boolean armed_gt = false;
uint8_t controlmode=0;
#define MODE_DISARMED 0
#define MODE_RADIONRF 1
#define MODE_GAMETRAK 2
// Global variables
/*
uint8_t idx = 0; // Index for new data pointer
uint16_t bufStartFrame; // Buffer Start Frame
byte *p; // Pointer declaration for the new received data
byte incomingByte;
byte incomingBytePrev;
*/
void setup() {
Serial1.begin(SERIAL_BAUD); //Debug and Program. A9=TX1, A10=RX1 (3v3 level)
Serial3.begin(SERIAL_CONTROL_BAUD); //control. B10=TX3, B11=RX3 (Serial3 is Usart 3)
//Serial2 may be dead on my board?
analogReadResolution(12); //set resolution to 12 bit 0 - 4095
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, HIGH);
pinMode(PIN_VBAT,INPUT_ANALOG);
pinMode(PIN_CURRENT,INPUT_ANALOG);
pinMode(PIN_GAMETRAK_LENGTH,INPUT_ANALOG);
pinMode(PIN_GAMETRAK_VERTICAL,INPUT_ANALOG);
pinMode(PIN_GAMETRAK_HORIZONTAL,INPUT_ANALOG);
#ifdef DEBUG
Serial1.println("Initializing nrf24");
#endif
Serial1.println("radio begin");
radio.begin();
//Serial1.println("set rate");
radio.setDataRate( RF24_250KBPS ); //set to slow data rate. default was 1MBPS
//radio.setDataRate( RF24_1MBPS );
//Serial1.println("set channel");
radio.setChannel(NRF24CHANNEL); //0 to 124 (inclusive)
//Serial1.println("set retries and payload");
radio.setRetries(15, 15); // optionally, increase the delay between retries & # of retries
radio.setPayloadSize(8); // optionally, reduce the payload size. seems to improve reliability
//Serial1.println("open pipe");
radio.openWritingPipe(pipes[0]); //write on pipe 0
radio.openReadingPipe(1, pipes[1]); //read on pipe 1
//Serial1.println("start listening");
radio.startListening();
#ifdef DEBUG
Serial1.println("Initialized");
#endif
}
void loop() {
//ReceiveSerial2(); // Check for new received data
bool newData=ReceiveSerial(Serialcom,FeedbackESC, NewFeedbackESC, Serial3); // Check for new received data
if (millis() - last_adcupdated > ADC_UPDATEPERIOD) { //update analog readings
vbat=analogRead(PIN_VBAT)*VBAT_DIV_FACTOR;
ibat=(analogRead(PIN_CURRENT)-CURRENT_OFFSET)*CURRENT_FACTOR;
gt_length = constrain(( analogRead(PIN_GAMETRAK_LENGTH))*GT_LENGTH_SCALE - (GT_LENGTH_SCALE*GT_LENGTH_OFFSET) +GT_LENGTH_MIN, 0,GT_LENGTH_MAXLENGTH);
if (gt_length<=GT_LENGTH_MIN){
gt_length=0; //if below minimum measurable length set to 0mm
}
gt_vertical = constrain(map(analogRead(PIN_GAMETRAK_VERTICAL)-((int16_t)GT_VERTICAL_CENTER), +GT_VERTICAL_RANGE,-GT_VERTICAL_RANGE,-127,127),-127,127); //left negative
gt_horizontal = constrain(map(analogRead(PIN_GAMETRAK_HORIZONTAL)-((int16_t)GT_HORIZONTAL_CENTER), +GT_HORIZONTAL_RANGE,-GT_HORIZONTAL_RANGE,-127,127),-127,127); //down negative
last_adcupdated = millis();
/*
Serial1.print("gt_length=");
Serial1.print(gt_length);
Serial1.print(", gt_vertical=");
Serial1.print(gt_vertical);
Serial1.print(", gt_horizontal=");
Serial1.println(gt_horizontal);*/
/*
Serial1.print("PIN_GAMETRAK_LENGTH=");
Serial1.print(analogRead(PIN_GAMETRAK_LENGTH));
Serial1.print(", PIN_GAMETRAK_VERTICAL=");
Serial1.print(analogRead(PIN_GAMETRAK_VERTICAL));
Serial1.print(", PIN_GAMETRAK_HORIZONTAL=");
Serial1.println(analogRead(PIN_GAMETRAK_HORIZONTAL));*/
}
//NRF24
nrf_delay = millis() - last_nrfreceive; //update nrf delay
if ( radio.available() )
{
//Serial1.println("radio available ...");
lastpacketOK = false; //initialize with false, if checksum ok gets set to true
digitalWrite(PIN_LED, !digitalRead(PIN_LED));
radio.read( &lastnrfdata, sizeof(nrfdata) );
if (lastnrfdata.speed == NRFDATA_CENTER && lastnrfdata.steer == NRFDATA_CENTER) { //arm only when centered
controlmode = MODE_RADIONRF;//set radionrf mode at first received packet
}
uint8_t calcchecksum = (uint8_t)((lastnrfdata.steer + 3) * (lastnrfdata.speed + 13));
if (lastnrfdata.checksum == calcchecksum) { //checksum ok?
lastpacketOK = true;
last_nrfreceive = millis();
//parse commands
motorenabled = (lastnrfdata.commands & (1 << 0))>>0; //check bit 0
}
/*
#ifdef DEBUG
Serial1.print("Received:");
Serial1.print(" st=");
Serial1.print(lastnrfdata.steer);
Serial1.print(", sp=");
Serial1.print(lastnrfdata.speed);
Serial1.print(", c=");
Serial1.print(lastnrfdata.commands);
Serial1.print(", chks=");
Serial1.print(lastnrfdata.checksum);
Serial1.print("nrfdelay=");
Serial1.print(nrf_delay);
Serial1.println();
#endif
*/
//y positive = forward
//x positive = right
/*
setYaw+=((int16_t)(lastnrfdata.steer)-NRFDATA_CENTER)*10/127;
while (setYaw<0){
setYaw+=360;
}
while (setYaw>=360){
setYaw-=360;
}*/
/*
Serial1.print("setYaw=");
Serial1.print(setYaw);
Serial1.print(" Yaw=");
Serial1.println(yaw);*/
}
if (controlmode == MODE_RADIONRF && nrf_delay >= MAX_NRFDELAY) { //too long since last sucessful nrf receive
controlmode = MODE_DISARMED;
#ifdef DEBUG
Serial1.println("nrf_delay>=MAX_NRFDELAY, disarmed!");
#endif
}
if (controlmode == MODE_RADIONRF) { //is armed in nrf mode
if (lastpacketOK) { //if lastnrfdata is valid
if (millis() - last_controlupdate > CONTROLUPDATEPERIOD) {
last_controlupdate = millis();
//out_speed=(int16_t)( (lastnrfdata.y-TRACKPOINT_CENTER)*1000/TRACKPOINT_MAX );
//out_steer=(int16_t)( -(lastnrfdata.x-TRACKPOINT_CENTER)*1000/TRACKPOINT_MAX );
set_speed = (int16_t)( ((int16_t)(lastnrfdata.speed) - NRFDATA_CENTER) * 1000 / 127 ); //-1000 to 1000
set_steer = (int16_t)( ((int16_t)(lastnrfdata.steer) - NRFDATA_CENTER) * 1000 / 127 );
//align to compass
/*
double yawdiff = (setYaw - 180) - (yaw - 180); //following angle difference works only for angles [-180,180]. yaw here is [0,360]
yawdiff += (yawdiff > 180) ? -360 : (yawdiff < -180) ? 360 : 0;
//yawdiff/=2;
int yawdiffsign = 1;
if (yawdiff < 0) {
yawdiffsign = -1;
}
yawdiff = yawdiff * yawdiff; //square
yawdiff = constrain(yawdiff * 1 , 0, 800);
yawdiff *= yawdiffsign; //redo sign
int16_t set_steer_mag = (int16_t)( yawdiff );
float new_magalign_multiplier = map( abs((int16_t)(lastnrfdata.steer) - NRFDATA_CENTER), 2, 10, 1.0, 0.0); //0=normal steering, 1=only mag steering
new_magalign_multiplier = 0; //Force mag off
new_magalign_multiplier = constrain(new_magalign_multiplier, 0.0, 1.0);
magalign_multiplier = min(new_magalign_multiplier, min(1.0, magalign_multiplier + 0.01)); //go down fast, slowly increase
magalign_multiplier = constrain(magalign_multiplier, 0.0, 1.0); //safety constrain again
set_steer = set_steer * (1 - magalign_multiplier) + set_steer_mag * magalign_multiplier;
*/
//calculate speed l and r from speed and steer
#define SPEED_COEFFICIENT_NRF 1 // higher value == stronger
#define STEER_COEFFICIENT_NRF 0.5 // higher value == stronger
out_speedl = constrain(set_speed * SPEED_COEFFICIENT_NRF + set_steer * STEER_COEFFICIENT_NRF, -1500, 1500);
out_speedr = constrain(set_speed * SPEED_COEFFICIENT_NRF - set_steer * STEER_COEFFICIENT_NRF, -1500, 1500);
/*
Serial1.print("Out steer=");
Serial1.println(out_steer);*/
}
}//if pastpacket not ok, keep last out_steer and speed values until disarmed
#ifdef DEBUG
if (!lastpacketOK) {
Serial1.println("Armed but packet not ok");
}
#endif
}
if (controlmode==MODE_DISARMED) { //check if gametrak can be armed
if (gt_length>gt_length_set && gt_length<gt_length_set+10) { //is in trackable length
controlmode=MODE_GAMETRAK; //enable gametrak mode
Serial1.println("Enable Gametrak");
}
}else if (controlmode==MODE_GAMETRAK){ //gametrak control active and not remote active
//Gametrak Control Code
motorenabled=true;
if (gt_length<=GT_LENGTH_MIN){ //let go
Serial1.println("gametrak released");
controlmode=MODE_DISARMED;
motorenabled=false;
}
int16_t _gt_length_diff = gt_length-gt_length_set; //positive if needs to drive forward
if (_gt_length_diff>-GT_LENGTH_MINDIFF & _gt_length_diff<GT_LENGTH_MINDIFF){ //minimum difference to drive
_gt_length_diff=0; //threshold
}
set_steer=constrain((int16_t)(-gt_horizontal*gt_steer_p),-GT_STEER_LIMIT,GT_STEER_LIMIT); //steer positive is left //gt_horizontal left is negative
if (_gt_length_diff>0) { //needs to drive forward
set_speed = constrain((int16_t)(_gt_length_diff*gt_speed_p),0,GT_SPEED_LIMIT);
}else{ //drive backward
if (_gt_length_diff > GT_LENGTH_MAXIMUMDIFFBACKWARD){ //only drive if not pulled back too much
set_speed = constrain((int16_t)(_gt_length_diff*gt_speedbackward_p),-GT_SPEEDBACKWARD_LIMIT,0);
}else{
set_speed = 0; //stop
set_steer = 0;
}
}
//calculate speed l and r from speed and steer
#define SPEED_COEFFICIENT_GT 1 // higher value == stronger
#define STEER_COEFFICIENT_GT 0.5 // higher value == stronger
out_speedl = constrain(set_speed * SPEED_COEFFICIENT_GT + set_steer * STEER_COEFFICIENT_GT, -1000, 1000);
out_speedr = constrain(set_speed * SPEED_COEFFICIENT_GT - set_steer * STEER_COEFFICIENT_GT, -1000, 1000);
}
if (error > 0) { //disarm if error occured
controlmode = MODE_DISARMED; //force disarmed
}
if (controlmode == MODE_DISARMED){ //all disarmed
out_speedl = 0;
out_speedr = 0;
}
if (millis() - last_send > SENDPERIOD) {
//calculate checksum
out_checksum = ((uint8_t) ((uint8_t)out_speedl) * ((uint8_t)out_speedr)); //simple checksum
if (out_checksum == 0 || out_checksum == 255) {
out_checksum = 1; //cannot be 0 or 255 (special purpose)
}
if (!motorenabled) { //disable motors?
out_checksum = 0; //checksum=0 disables motors
}
if (motorenabled) { //motors enabled
//SendSerial2(out_speedl,out_speedr);
SendSerial(Command,out_speedl,out_speedr,Serial3);
} else { //motors disabled
//SendSerial2(0,0);
SendSerial(Command,0,0,Serial3);
}
lastsend_out_speedl = out_speedl; //remember last transmittet values (for stat sending)
lastsend_out_speedr = out_speedr;
last_send = millis();
#ifdef DEBUG
Serial1.print(" out_speedl=");
Serial1.print(out_speedl);
Serial1.print(" out_speedr=");
Serial1.print(out_speedr);
Serial1.print(" checksum=");
Serial1.print(out_checksum);
Serial1.print(" controlmode=");
Serial1.print(controlmode);
Serial1.println();
#endif
}
//
#ifdef PARAMETEROUTPUT
if ( millis() - last_parametersend > PARAMETERSENDPERIOD) {
//Serial.write((uint8_t *) &counter, sizeof(counter));//uint8_t, 1 byte
//Serial.write((uint8_t *) &value1, sizeof(value1)); //uint16_t, 2 bytes
//Serial.write((uint8_t *) &value2, sizeof(value2)); //int16_t, 2 bytes
//Serial.write((uint8_t *) &floatvalue, sizeof(floatvalue)); //float, 4 bytes
uint8_t booleanvalues=0; //reset
booleanvalues |= motorenabled<<0; //bit 0
booleanvalues |= (controlmode&0b00000011)<<1; //bit 1 and 2 (2bit number for controlmodes (3)
Serial.write((uint8_t *) &out_speedl, sizeof(out_speedl)); //int16_t, 2 bytes
Serial.write((uint8_t *) &out_speedr, sizeof(out_speedr)); //int16_t, 2 bytes
Serial.write((uint8_t *) &booleanvalues, sizeof(booleanvalues)); //uint8_t, 1 byte //booleanvalues
Serial.write((uint8_t *) &vbat, sizeof(vbat)); //float, 4 bytes
//Serial.write((uint8_t *) &ibat, sizeof(ibat)); //float, 4 bytes
float yaw_float=yaw;
Serial.write((uint8_t *) &yaw_float, sizeof(yaw_float)); //float, 4 bytes
Serial.write((uint8_t *) &gt_length, sizeof(gt_length)); //uint16_t, 2 bytes
Serial.write((uint8_t *) &gt_horizontal, sizeof(gt_horizontal)); //int8_t, 1 byte
Serial.write((uint8_t *) &gt_vertical, sizeof(gt_vertical)); //int8_t, 1 byte
last_parametersend = millis();
}
#endif
}
/*
void sendRF(nrfstatdata senddata){
#ifdef DEBUG
Serial1.println("Transmitting...");
#endif
radio.stopListening(); //stop listening to be able to transmit
radiosendOk = radio.write( &senddata, sizeof(nrfstatdata) );
if (!radiosendOk){
#ifdef DEBUG
Serial1.println("send failed");
#endif
}
radio.startListening(); //start listening again
}
*/
// ########################## SEND ##########################
void SendSerial(SerialCommand &scom, int16_t uSpeedLeft, int16_t uSpeedRight, HardwareSerial &SerialRef)
{
// Create command
scom.start = (uint16_t)START_FRAME;
scom.speedLeft = (int16_t)uSpeedLeft;
scom.speedRight = (int16_t)uSpeedRight;
scom.checksum = (uint16_t)(scom.start ^ scom.speedLeft ^ scom.speedRight);
SerialRef.write((uint8_t *) &scom, sizeof(scom));
}
/*
void SendSerial2(int16_t uSpeedLeft, int16_t uSpeedRight)
{
// Create command
Command.start = (uint16_t)START_FRAME;
Command.speedLeft = (int16_t)uSpeedLeft;
Command.speedRight = (int16_t)uSpeedRight;
Command.checksum = (uint16_t)(Command.start ^ Command.speedLeft ^ Command.speedRight);
// Write to Serial
Serial2.write((uint8_t *) &Command, sizeof(Command));
}*/
// ########################## RECEIVE ##########################
bool ReceiveSerial(SerialRead &sread, SerialFeedback &Feedback,SerialFeedback &NewFeedback, HardwareSerial &SerialRef)
{
bool _result=1;
// Check for new data availability in the Serial buffer
if ( SerialRef.available() ) {
sread.incomingByte = SerialRef.read(); // Read the incoming byte
sread.bufStartFrame = ((uint16_t)(sread.incomingByte) << 8) | sread.incomingBytePrev; // Construct the start frame
}
else {
return 0;
}
// If DEBUG_RX is defined print all incoming bytes
#ifdef DEBUG_RX
Serial.print(sread.incomingByte);
#endif
// Copy received data
if (sread.bufStartFrame == START_FRAME) { // Initialize if new data is detected
sread.p = (byte *)&NewFeedback;
*sread.p++ = sread.incomingBytePrev;
*sread.p++ = sread.incomingByte;
sread.idx = 2;
} else if (sread.idx >= 2 && sread.idx < sizeof(SerialFeedback)) { // Save the new received data
*sread.p++ = sread.incomingByte;
sread.idx++;
}
// Check if we reached the end of the package
if (sread.idx == sizeof(SerialFeedback)) {
uint16_t checksum;
checksum = (uint16_t)(NewFeedback.start ^ NewFeedback.cmd1 ^ NewFeedback.cmd2
^ NewFeedback.speedR_meas ^ NewFeedback.speedL_meas ^ NewFeedback.batVoltage ^ NewFeedback.boardTemp ^ NewFeedback.curL_DC ^ NewFeedback.curR_DC ^ NewFeedback.cmdLed);
// Check validity of the new data
if (NewFeedback.start == START_FRAME && checksum == NewFeedback.checksum) {
// Copy the new data
memcpy(&Feedback, &NewFeedback, sizeof(SerialFeedback));
sread.lastValidDataSerial_time = millis();
} else {
_result=0;
}
sread.idx = 0; // Reset the index (it prevents to enter in this if condition in the next cycle)
}
/*
// Print data to built-in Serial
Serial1.print("1: "); Serial.print(Feedback.cmd1);
Serial1.print(" 2: "); Serial.print(Feedback.cmd2);
Serial1.print(" 3: "); Serial.print(Feedback.speedR);
Serial1.print(" 4: "); Serial.print(Feedback.speedL);
Serial1.print(" 5: "); Serial.print(Feedback.speedR_meas);
Serial1.print(" 6: "); Serial.print(Feedback.speedL_meas);
Serial1.print(" 7: "); Serial.print(Feedback.batVoltage);
Serial1.print(" 8: "); Serial.println(Feedback.boardTemp);
} else {
Serial1.println("Non-valid data skipped");
}*/
// Update previous states
sread.incomingBytePrev = sread.incomingByte;
return _result; //new data was available
}
/*
void ReceiveSerial2()
{
// Check for new data availability in the Serial buffer
if (Serial2.available()) {
incomingByte = Serial2.read(); // Read the incoming byte
bufStartFrame = ((uint16_t)(incomingBytePrev) << 8) + incomingByte; // Construct the start frame
}
else {
return;
}
// If DEBUG_RX is defined print all incoming bytes
#ifdef DEBUG_RX
Serial.print(incomingByte);
return;
#endif
// Copy received data
if (bufStartFrame == START_FRAME) { // Initialize if new data is detected
p = (byte *)&NewFeedback;
*p++ = incomingBytePrev;
*p++ = incomingByte;
idx = 2;
} else if (idx >= 2 && idx < sizeof(SerialFeedback)) { // Save the new received data
*p++ = incomingByte;
idx++;
}
// Check if we reached the end of the package
if (idx == sizeof(SerialFeedback)) {
uint16_t checksum;
checksum = (uint16_t)(NewFeedback.start ^ NewFeedback.cmd1 ^ NewFeedback.cmd2 ^ NewFeedback.speedR ^ NewFeedback.speedL
^ NewFeedback.speedR_meas ^ NewFeedback.speedL_meas ^ NewFeedback.batVoltage ^ NewFeedback.boardTemp ^ NewFeedback.curL_DC ^ NewFeedback.curR_DC);
// Check validity of the new data
if (NewFeedback.start == START_FRAME && checksum == NewFeedback.checksum) {
// Copy the new data
memcpy(&Feedback, &NewFeedback, sizeof(SerialFeedback));
// Print data to built-in Serial
Serial.print("1: "); Serial.print(Feedback.cmd1);
Serial.print(" 2: "); Serial.print(Feedback.cmd2);
Serial.print(" 3: "); Serial.print(Feedback.speedR);
Serial.print(" 4: "); Serial.print(Feedback.speedL);
Serial.print(" 5: "); Serial.print(Feedback.speedR_meas);
Serial.print(" 6: "); Serial.print(Feedback.speedL_meas);
//Serial.print(" 7: "); Serial.print(Feedback.batVoltage);
//Serial.print(" 8: "); Serial.println(Feedback.boardTemp);
Serial.print(" 9: "); Serial.print(Feedback.curL_DC); //in A, in hoverbrett negative sign for forward
Serial.print(" 10: "); Serial.println(Feedback.curR_DC); //in A, in hoverbrett negative sign for forward
Serial.print(" 9: "); Serial.println(Feedback.curL_DC); //in A, in hoverbrett negative sign for forward
} else {
Serial.println("Non-valid data skipped");
}
idx = 0; // Reset the index (it prevents to enter in this if condition in the next cycle)
}
// Update previous states
incomingBytePrev = incomingByte;
}
*/

View File

@ -1,11 +0,0 @@
This directory is intended for PIO Unit Testing and project tests.
Unit Testing is a software testing method by which individual units of
source code, sets of one or more MCU program modules together with associated
control data, usage procedures, and operating procedures, are tested to
determine whether they are fit for use. Unit testing finds problems early
in the development cycle.
More information about PIO Unit Testing:
- https://docs.platformio.org/page/plus/unit-testing.html

View File

@ -5,6 +5,231 @@
(paper "A4")
(lib_symbols
(symbol "Connector_Generic:Conn_01x04" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes)
(property "Reference" "J" (id 0) (at 0 5.08 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "Conn_01x04" (id 1) (at 0 -7.62 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "~" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_keywords" "connector" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "Generic connector, single row, 01x04, script generated (kicad-library-utils/schlib/autogen/connector/)" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "Connector*:*_1x??_*" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "Conn_01x04_1_1"
(rectangle (start -1.27 -4.953) (end 0 -5.207)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 -2.413) (end 0 -2.667)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 0.127) (end 0 -0.127)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 2.667) (end 0 2.413)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 3.81) (end 1.27 -6.35)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type background))
)
(pin passive line (at -5.08 2.54 0) (length 3.81)
(name "Pin_1" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -5.08 0 0) (length 3.81)
(name "Pin_2" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -5.08 -2.54 0) (length 3.81)
(name "Pin_3" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -5.08 -5.08 0) (length 3.81)
(name "Pin_4" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "Connector_Generic:Conn_01x06" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes)
(property "Reference" "J" (id 0) (at 0 7.62 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "Conn_01x06" (id 1) (at 0 -10.16 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "~" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_keywords" "connector" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "Generic connector, single row, 01x06, script generated (kicad-library-utils/schlib/autogen/connector/)" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "Connector*:*_1x??_*" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "Conn_01x06_1_1"
(rectangle (start -1.27 -7.493) (end 0 -7.747)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 -4.953) (end 0 -5.207)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 -2.413) (end 0 -2.667)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 0.127) (end 0 -0.127)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 2.667) (end 0 2.413)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 5.207) (end 0 4.953)
(stroke (width 0.1524) (type default) (color 0 0 0 0))
(fill (type none))
)
(rectangle (start -1.27 6.35) (end 1.27 -8.89)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type background))
)
(pin passive line (at -5.08 5.08 0) (length 3.81)
(name "Pin_1" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -5.08 2.54 0) (length 3.81)
(name "Pin_2" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -5.08 0 0) (length 3.81)
(name "Pin_3" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -5.08 -2.54 0) (length 3.81)
(name "Pin_4" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -5.08 -5.08 0) (length 3.81)
(name "Pin_5" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin passive line (at -5.08 -7.62 0) (length 3.81)
(name "Pin_6" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "RF:NRF24L01_Breakout" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "U" (id 0) (at -8.89 12.7 0)
(effects (font (size 1.27 1.27)) (justify left))
)
(property "Value" "NRF24L01_Breakout" (id 1) (at 3.81 12.7 0)
(effects (font (size 1.27 1.27)) (justify left))
)
(property "Footprint" "RF_Module:nRF24L01_Breakout" (id 2) (at 3.81 15.24 0)
(effects (font (size 1.27 1.27) italic) (justify left) hide)
)
(property "Datasheet" "http://www.nordicsemi.com/eng/content/download/2730/34105/file/nRF24L01_Product_Specification_v2_0.pdf" (id 3) (at 0 -2.54 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_keywords" "Low Power RF Transciever breakout carrier" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "Ultra low power 2.4GHz RF Transceiver, Carrier PCB" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_fp_filters" "nRF24L01*Breakout*" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "NRF24L01_Breakout_0_1"
(rectangle (start -8.89 11.43) (end 8.89 -11.43)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type background))
)
(polyline
(pts
(xy 4.445 1.905)
(xy 4.445 -1.27)
)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type none))
)
(circle (center 4.445 2.54) (radius 0.635)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type outline))
)
(arc (start 5.715 2.54) (mid 5.3559 3.4509) (end 4.445 3.81)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type none))
)
(arc (start 6.35 1.905) (mid 5.8833 3.9783) (end 3.81 4.445)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type none))
)
(arc (start 6.985 1.27) (mid 6.453 4.548) (end 3.175 5.08)
(stroke (width 0.254) (type default) (color 0 0 0 0))
(fill (type none))
)
)
(symbol "NRF24L01_Breakout_1_1"
(pin power_in line (at 0 -15.24 90) (length 3.81)
(name "GND" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at 0 15.24 270) (length 3.81)
(name "VCC" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin input line (at -12.7 -5.08 0) (length 3.81)
(name "CE" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin input line (at -12.7 0 0) (length 3.81)
(name "~{CSN}" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin input clock (at -12.7 2.54 0) (length 3.81)
(name "SCK" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
(pin input line (at -12.7 7.62 0) (length 3.81)
(name "MOSI" (effects (font (size 1.27 1.27))))
(number "6" (effects (font (size 1.27 1.27))))
)
(pin output line (at -12.7 5.08 0) (length 3.81)
(name "MISO" (effects (font (size 1.27 1.27))))
(number "7" (effects (font (size 1.27 1.27))))
)
(pin output line (at -12.7 -7.62 0) (length 3.81)
(name "IRQ" (effects (font (size 1.27 1.27))))
(number "8" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "Teensy:Teensy3.2" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "U" (id 0) (at 0 39.37 0)
(effects (font (size 1.524 1.524)))
@ -251,20 +476,527 @@
)
)
)
(symbol "power:+3V3" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes)
(property "Reference" "#PWR" (id 0) (at 0 -3.81 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "+3V3" (id 1) (at 0 3.556 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_keywords" "power-flag" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "Power symbol creates a global label with name \"+3V3\"" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "+3V3_0_1"
(polyline
(pts
(xy -0.762 1.27)
(xy 0 2.54)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0 0)
(xy 0 2.54)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0 2.54)
(xy 0.762 1.27)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
)
(symbol "+3V3_1_1"
(pin power_in line (at 0 0 90) (length 0) hide
(name "+3V3" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "power:+5V" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes)
(property "Reference" "#PWR" (id 0) (at 0 -3.81 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "+5V" (id 1) (at 0 3.556 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_keywords" "power-flag" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "Power symbol creates a global label with name \"+5V\"" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "+5V_0_1"
(polyline
(pts
(xy -0.762 1.27)
(xy 0 2.54)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0 0)
(xy 0 2.54)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0 2.54)
(xy 0.762 1.27)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
)
(symbol "+5V_1_1"
(pin power_in line (at 0 0 90) (length 0) hide
(name "+5V" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "power:GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes)
(property "Reference" "#PWR" (id 0) (at 0 -6.35 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "GND" (id 1) (at 0 -3.81 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_keywords" "power-flag" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "Power symbol creates a global label with name \"GND\" , ground" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "GND_0_1"
(polyline
(pts
(xy 0 0)
(xy 0 -1.27)
(xy 1.27 -1.27)
(xy 0 -2.54)
(xy -1.27 -1.27)
(xy 0 -1.27)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
)
(symbol "GND_1_1"
(pin power_in line (at 0 0 270) (length 0) hide
(name "GND" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "power:VCC" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes)
(property "Reference" "#PWR" (id 0) (at 0 -3.81 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "VCC" (id 1) (at 0 3.81 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_keywords" "power-flag" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "ki_description" "Power symbol creates a global label with name \"VCC\"" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "VCC_0_1"
(polyline
(pts
(xy -0.762 1.27)
(xy 0 2.54)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0 0)
(xy 0 2.54)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
(polyline
(pts
(xy 0 2.54)
(xy 0.762 1.27)
)
(stroke (width 0) (type default) (color 0 0 0 0))
(fill (type none))
)
)
(symbol "VCC_1_1"
(pin power_in line (at 0 0 90) (length 0) hide
(name "VCC" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
)
)
)
(no_connect (at 50.8 57.15) (uuid 4b24df59-2825-4b76-af48-9ff6798dfebb))
(wire (pts (xy 99.06 80.01) (xy 115.57 80.01))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 004f8db7-d90d-42f8-8a89-cd52f32aed9e)
)
(wire (pts (xy 99.06 82.55) (xy 115.57 82.55))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 00d10486-2cc7-4055-be39-502e4b3e29fb)
)
(wire (pts (xy 101.6 116.84) (xy 101.6 114.3))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 00e65487-6489-4343-aa2b-4c4da968f5b3)
)
(wire (pts (xy 99.06 77.47) (xy 99.06 62.23))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 0469b202-c86f-4a3b-a5ba-6f456c498b0c)
)
(wire (pts (xy 107.95 87.63) (xy 107.95 102.87))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 15b559fa-11a5-4e4f-8a04-d343de63dbe7)
)
(wire (pts (xy 109.22 92.71) (xy 99.06 92.71))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 183ce7c8-a7f5-421a-95e8-f0a434c8473a)
)
(wire (pts (xy 100.33 59.69) (xy 100.33 74.93))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 1a613bc6-1d83-49de-a5d1-cb6ecebc8fdf)
)
(wire (pts (xy 104.14 121.92) (xy 99.06 121.92))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 2193fd54-9467-445e-a690-7788e71a0a17)
)
(wire (pts (xy 110.49 85.09) (xy 110.49 97.79))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 21c5ca45-d574-4174-9629-f1fa8964149f)
)
(wire (pts (xy 99.06 87.63) (xy 107.95 87.63))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 2636e5b7-1708-4b2c-ac90-573d0c486574)
)
(wire (pts (xy 101.6 129.54) (xy 101.6 132.08))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 26ed8c57-49e1-42ce-ae2d-6b2917a6d6fa)
)
(wire (pts (xy 69.85 116.84) (xy 73.66 116.84))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 2b69187a-65e3-4621-907f-e95ce225511a)
)
(wire (pts (xy 167.64 118.11) (xy 166.37 118.11))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 35011418-c95f-4e19-ab65-884884593f2f)
)
(wire (pts (xy 115.57 77.47) (xy 99.06 77.47))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 36083a5f-d1b2-496e-a363-2dd1343a116a)
)
(wire (pts (xy 58.42 64.77) (xy 58.42 66.04))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 38324222-ebdd-4e06-abe7-ddc1210fdee3)
)
(wire (pts (xy 73.66 118.11) (xy 73.66 116.84))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 3b74f317-e152-453a-8cce-248c8b1dc7b3)
)
(wire (pts (xy 99.06 62.23) (xy 50.8 62.23))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 3cf1e09d-abd0-44db-b881-3e79c937917f)
)
(wire (pts (xy 182.88 107.95) (xy 182.88 113.03))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 3d521624-9ecd-4b1c-bc20-3873f0e399bf)
)
(wire (pts (xy 107.95 113.03) (xy 115.57 113.03))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 3e698a9c-1148-4397-9467-73ed35631fb7)
)
(wire (pts (xy 107.9077 109.2214) (xy 107.95 113.03))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 406162fd-a324-4eeb-b78b-f9c4f3be9ff9)
)
(wire (pts (xy 73.66 109.22) (xy 107.9077 109.2214))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 453d203f-5011-4d6e-8b1a-26937c71c1d3)
)
(wire (pts (xy 167.64 124.46) (xy 167.64 118.11))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 47a08740-6973-4f3d-bc33-da22086387b4)
)
(wire (pts (xy 99.06 127) (xy 168.91 127))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 49b3fc09-ece2-4c43-b960-5ff536d1758f)
)
(wire (pts (xy 115.57 100.33) (xy 109.22 100.33))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 4b8029c5-5ca7-41f3-89ba-c4c7ca60727f)
)
(wire (pts (xy 100.33 74.93) (xy 115.57 74.93))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 4fc5083c-49c2-402b-91da-70ea04d2c119)
)
(wire (pts (xy 99.06 116.84) (xy 101.6 116.84))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 52daab00-3677-4fe6-af22-27984261bd83)
)
(wire (pts (xy 50.8 59.69) (xy 100.33 59.69))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 531a88fb-ecfe-4b8f-a9d8-725644dfe554)
)
(wire (pts (xy 50.8 64.77) (xy 58.42 64.77))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 55316188-1ed6-4c76-bce6-491f0814d6c8)
)
(wire (pts (xy 104.14 118.11) (xy 104.14 121.92))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 5ab123ef-60a2-4f38-8884-167dcfc32060)
)
(wire (pts (xy 110.49 97.79) (xy 115.57 97.79))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 698788a3-ab92-4b7e-98e6-fab2a06de505)
)
(wire (pts (xy 107.95 102.87) (xy 115.57 102.87))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 6afe7f07-b5c5-46e5-8c67-9f3c2f2ccc07)
)
(wire (pts (xy 182.88 113.03) (xy 166.37 113.03))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 6b411294-bda7-48cc-bda7-1623378101a3)
)
(wire (pts (xy 99.06 129.54) (xy 101.6 129.54))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 6cf5d6dd-fbb6-437e-9f93-d98763dddd29)
)
(wire (pts (xy 73.66 109.22) (xy 73.66 111.76))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 6e0e2292-3055-422e-8ec2-8ecd9b40482c)
)
(wire (pts (xy 101.6 50.8) (xy 101.6 49.53))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 7183429d-1ff8-4256-a1db-6a7616e9a998)
)
(wire (pts (xy 109.22 100.33) (xy 109.22 92.71))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 7b0a9257-6c3a-42a8-811b-a01f90d9828d)
)
(wire (pts (xy 110.49 106.68) (xy 110.49 110.49))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 8a1bb529-71e5-4a61-a78d-f45a8413f009)
)
(wire (pts (xy 102.87 119.38) (xy 102.87 115.57))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 97f6d382-da90-4970-9d44-d3b93aae86bc)
)
(wire (pts (xy 166.37 115.57) (xy 168.91 115.57))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid 99d522a8-cdb0-4eb2-913a-15390faac3c7)
)
(wire (pts (xy 86.36 71.12) (xy 86.36 72.39))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid aec8e439-2867-4f73-81ef-139fceac2a57)
)
(wire (pts (xy 73.66 111.76) (xy 69.85 111.76))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid b0bad092-6df4-471b-8d2a-09ba7ff80fd1)
)
(wire (pts (xy 69.85 114.3) (xy 77.47 114.3))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid b1177e5c-b9a9-493e-aa0c-0850b0019a60)
)
(wire (pts (xy 69.85 106.68) (xy 69.85 109.22))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid bd671f12-c259-4c6d-a27f-66521edc446a)
)
(wire (pts (xy 115.57 118.11) (xy 104.14 118.11))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid bfb85001-8d8b-4e2c-bcc8-07ecf2a2f14b)
)
(wire (pts (xy 69.85 106.68) (xy 110.49 106.68))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid c1c32f36-f1a6-4ede-9365-45cd009f0f20)
)
(wire (pts (xy 99.06 85.09) (xy 110.49 85.09))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid c57b6527-2148-4ea7-931d-36e0ce4ce760)
)
(wire (pts (xy 177.8 107.95) (xy 177.8 101.6))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid d18b40ba-97b7-41aa-b920-8af6fc63ded5)
)
(wire (pts (xy 99.06 119.38) (xy 102.87 119.38))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid d3ee5e22-3226-4c44-8f80-fd50ea4805fb)
)
(wire (pts (xy 102.87 115.57) (xy 115.57 115.57))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid f16cd22c-faf5-4570-a34d-f0c5b0ab3166)
)
(wire (pts (xy 166.37 107.95) (xy 177.8 107.95))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid f1ed2fce-d8b1-4c28-aabf-2e3102a1be42)
)
(wire (pts (xy 110.49 110.49) (xy 115.57 110.49))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid f3bc37d3-8f1a-472f-8cff-fa912350b962)
)
(wire (pts (xy 99.06 124.46) (xy 167.64 124.46))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid f7304ba3-4d69-4e35-ae24-014661c784a8)
)
(wire (pts (xy 168.91 115.57) (xy 168.91 127))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid f76df7a0-4a0c-46a8-8647-a0539b0d3e1e)
)
(wire (pts (xy 101.6 49.53) (xy 115.57 49.53))
(stroke (width 0) (type default) (color 0 0 0 0))
(uuid f9e307e6-3dd1-4610-83f2-b27e78ef584c)
)
(label "SDA" (at 69.85 106.68 0)
(effects (font (size 1.27 1.27)) (justify left bottom))
(uuid 90a1896c-1f1e-4f9e-9d9f-3cb028437cc1)
)
(label "SCL" (at 69.85 111.76 0)
(effects (font (size 1.27 1.27)) (justify left bottom))
(uuid ab321462-361e-4835-b9ce-aa1f5f7f4ffb)
)
(symbol (lib_id "power:+3V3") (at 182.88 107.95 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid 0f8cfa67-6c37-4c56-98c0-e134c16a7f3e)
(property "Reference" "#PWR0109" (id 0) (at 182.88 111.76 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "+3V3" (id 1) (at 182.88 102.87 0))
(property "Footprint" "" (id 2) (at 182.88 107.95 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 182.88 107.95 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid 56e45240-b720-42c0-83bf-349a57dd6000))
)
(symbol (lib_id "power:+3V3") (at 86.36 71.12 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid 11c6c966-f405-45ac-8af4-77525c0062ad)
(property "Reference" "#PWR0101" (id 0) (at 86.36 74.93 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "+3V3" (id 1) (at 86.36 66.04 0))
(property "Footprint" "" (id 2) (at 86.36 71.12 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 86.36 71.12 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid 5f68bcda-3546-4f9b-bcc7-32c07c384d80))
)
(symbol (lib_id "Connector_Generic:Conn_01x06") (at 93.98 124.46 180) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid 3616507a-404e-4274-bd2e-b65f2f1e94f1)
(property "Reference" "J2" (id 0) (at 93.98 110.49 0))
(property "Value" "gametrak" (id 1) (at 93.98 113.03 0))
(property "Footprint" "Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical" (id 2) (at 93.98 124.46 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "~" (id 3) (at 93.98 124.46 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid fae56bb7-57cc-49c9-b6bc-2b2c7572cb4d))
(pin "2" (uuid 5a13c6df-701f-44fd-98e4-8c9b38f9866b))
(pin "3" (uuid 851438e6-5f10-4030-bea6-f0be46d599c8))
(pin "4" (uuid f66b56fa-066e-4a44-8a3d-61d4e66309c0))
(pin "5" (uuid 1bbf984a-7d93-4eb5-9cfc-fe624671ca4e))
(pin "6" (uuid 72dc6770-429d-41bb-9334-d150c4e162ea))
)
(symbol (lib_id "power:GND") (at 73.66 118.11 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid 68700896-6ce6-44b0-ac02-9e847f29bf8c)
(property "Reference" "#PWR?" (id 0) (at 73.66 124.46 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "GND" (id 1) (at 73.66 123.19 0))
(property "Footprint" "" (id 2) (at 73.66 118.11 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 73.66 118.11 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid c8d528ba-3961-4b69-9675-6c6f1ce7bccc))
)
(symbol (lib_id "power:+3V3") (at 101.6 114.3 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid 8fe253e7-d29a-4557-be20-dce5f7266292)
(property "Reference" "#PWR0104" (id 0) (at 101.6 118.11 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "+3V3" (id 1) (at 101.6 109.22 0))
(property "Footprint" "" (id 2) (at 101.6 114.3 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 101.6 114.3 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid e9dc1328-1e77-4f1c-8e07-90ab62ecac3f))
)
(symbol (lib_id "Teensy:Teensy3.2") (at 140.97 83.82 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid 947df0d8-493c-4a35-aca7-d69eb00dcd35)
(property "Reference" "U?" (id 0) (at 140.97 41.91 0)
(property "Reference" "U2" (id 0) (at 140.97 41.91 0)
(effects (font (size 1.524 1.524)))
)
(property "Value" "Teensy3.2" (id 1) (at 140.97 45.72 0)
(effects (font (size 1.524 1.524)))
)
(property "Footprint" "" (id 2) (at 140.97 102.87 0)
(effects (font (size 1.524 1.524)))
(effects (font (size 1.524 1.524)) hide)
)
(property "Datasheet" "" (id 3) (at 140.97 102.87 0)
(effects (font (size 1.524 1.524)))
@ -325,13 +1057,229 @@
(pin "9" (uuid a8563204-70f4-4d77-a558-f3190b711e16))
)
(symbol (lib_id "power:GND") (at 58.42 66.04 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid 99281594-4b04-4091-873c-ef1a43d332df)
(property "Reference" "#PWR0102" (id 0) (at 58.42 72.39 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "GND" (id 1) (at 58.42 71.12 0))
(property "Footprint" "" (id 2) (at 58.42 66.04 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 58.42 66.04 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid f71fd012-75cf-4a94-ac61-c01ef3de9386))
)
(symbol (lib_id "RF:NRF24L01_Breakout") (at 86.36 87.63 0) (mirror y) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid a2a0f5cc-b5aa-4e3e-8d85-23bdc2f59aec)
(property "Reference" "U1" (id 0) (at 76.2 86.3599 0)
(effects (font (size 1.27 1.27)) (justify left))
)
(property "Value" "NRF24L01_Breakout" (id 1) (at 76.2 88.8999 0)
(effects (font (size 1.27 1.27)) (justify left))
)
(property "Footprint" "RF_Module:nRF24L01_Breakout" (id 2) (at 82.55 72.39 0)
(effects (font (size 1.27 1.27) italic) (justify left) hide)
)
(property "Datasheet" "http://www.nordicsemi.com/eng/content/download/2730/34105/file/nRF24L01_Product_Specification_v2_0.pdf" (id 3) (at 86.36 90.17 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid 386faf3f-2adf-472a-84bf-bd511edf2429))
(pin "2" (uuid de552ae9-cde6-4643-8cc7-9de2579dadae))
(pin "3" (uuid 72366acb-6c86-4134-89df-01ed6e4dc8e0))
(pin "4" (uuid 7274c82d-0cb9-47de-b093-7d848f491410))
(pin "5" (uuid b66b83a0-313f-4b03-b851-c6e9577a6eb7))
(pin "6" (uuid dad2f9a9-292b-4f7e-9524-a263f3c1ba74))
(pin "7" (uuid 112371bd-7aa2-4b47-b184-50d12afc2534))
(pin "8" (uuid 5c32b099-dba7-4228-8a5e-c2156f635ce2))
)
(symbol (lib_id "power:GND") (at 86.36 102.87 0) (unit 1)
(in_bom yes) (on_board yes)
(uuid ae000762-c3ad-4b38-9916-bc37fd454d17)
(property "Reference" "#PWR0103" (id 0) (at 86.36 109.22 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "GND" (id 1) (at 90.17 102.87 0))
(property "Footprint" "" (id 2) (at 86.36 102.87 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 86.36 102.87 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid db2012c2-1d36-4ca8-b114-91af6d0eeef8))
)
(symbol (lib_id "Connector_Generic:Conn_01x04") (at 45.72 62.23 180) (unit 1)
(in_bom yes) (on_board yes)
(uuid af706b9d-2e5e-46ab-9a95-50062787b0fa)
(property "Reference" "J?" (id 0) (at 45.72 50.8 0))
(property "Value" "serial_esc" (id 1) (at 40.64 53.34 0))
(property "Footprint" "" (id 2) (at 45.72 62.23 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "~" (id 3) (at 45.72 62.23 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid 5042aa84-76f9-413b-aadc-7658cbc67e45))
(pin "2" (uuid e6acf612-6407-4324-875f-1f62f23cedcb))
(pin "3" (uuid bf040bc2-4e16-4c47-9ed2-67d4b1e19c77))
(pin "4" (uuid 152e88e2-10fd-4968-81be-a4dad9cd656d))
)
(symbol (lib_id "power:VCC") (at 259.08 34.29 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid b1c36f6e-75a8-4c4c-8ed4-d43e9de62446)
(property "Reference" "#PWR0108" (id 0) (at 259.08 38.1 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "VCC" (id 1) (at 259.08 29.21 0))
(property "Footprint" "" (id 2) (at 259.08 34.29 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 259.08 34.29 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid 45ca1f4a-173f-4489-88f4-cd794594e9bb))
)
(symbol (lib_id "power:+5V") (at 177.8 101.6 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid ba54f50c-d12f-43c2-8756-845c9dd68f54)
(property "Reference" "#PWR0107" (id 0) (at 177.8 105.41 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "+5V" (id 1) (at 177.8 96.52 0))
(property "Footprint" "" (id 2) (at 177.8 101.6 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 177.8 101.6 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid fa7593ec-8234-4796-9fa6-3876cab5c179))
)
(symbol (lib_id "power:GND") (at 101.6 132.08 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid c85f50b8-8333-412a-940a-b25e6bc9faf2)
(property "Reference" "#PWR0105" (id 0) (at 101.6 138.43 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "GND" (id 1) (at 101.6 137.16 0))
(property "Footprint" "" (id 2) (at 101.6 132.08 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 101.6 132.08 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid ae83c378-a041-4724-a78d-ecaa63c7d735))
)
(symbol (lib_id "Connector_Generic:Conn_01x04") (at 64.77 114.3 180) (unit 1)
(in_bom yes) (on_board yes)
(uuid d29ab708-161a-4071-a560-c882ef4a2aee)
(property "Reference" "J?" (id 0) (at 64.77 102.87 0))
(property "Value" "display" (id 1) (at 59.69 105.41 0))
(property "Footprint" "" (id 2) (at 64.77 114.3 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "~" (id 3) (at 64.77 114.3 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid 966ddd39-479f-4c5c-a820-c16248f60f7b))
(pin "2" (uuid ef8d8aed-1b1e-4df1-9a6e-d9e1993ff692))
(pin "3" (uuid 7f11a61f-d2ef-4b7b-8666-40c44fbcb166))
(pin "4" (uuid 3de85ec2-70e9-4177-b17a-a884cf5e37f0))
)
(symbol (lib_id "power:+3V3") (at 77.47 114.3 0) (unit 1)
(in_bom yes) (on_board yes)
(uuid e621af57-2812-4c4e-aa8c-a74faeb9bc03)
(property "Reference" "#PWR?" (id 0) (at 77.47 118.11 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "+3V3" (id 1) (at 80.01 111.76 0))
(property "Footprint" "" (id 2) (at 77.47 114.3 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 77.47 114.3 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid 32554fc8-cb49-4082-8504-db43b97e1dcd))
)
(symbol (lib_id "power:GND") (at 101.6 50.8 0) (unit 1)
(in_bom yes) (on_board yes) (fields_autoplaced)
(uuid f4dc8ac3-d986-48a0-a66a-459daadef931)
(property "Reference" "#PWR0106" (id 0) (at 101.6 57.15 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Value" "GND" (id 1) (at 101.6 55.88 0))
(property "Footprint" "" (id 2) (at 101.6 50.8 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (id 3) (at 101.6 50.8 0)
(effects (font (size 1.27 1.27)) hide)
)
(pin "1" (uuid 24448553-0091-4116-9d12-831ac18b42ae))
)
(sheet_instances
(path "/" (page "1"))
)
(symbol_instances
(path "/11c6c966-f405-45ac-8af4-77525c0062ad"
(reference "#PWR0101") (unit 1) (value "+3V3") (footprint "")
)
(path "/99281594-4b04-4091-873c-ef1a43d332df"
(reference "#PWR0102") (unit 1) (value "GND") (footprint "")
)
(path "/ae000762-c3ad-4b38-9916-bc37fd454d17"
(reference "#PWR0103") (unit 1) (value "GND") (footprint "")
)
(path "/8fe253e7-d29a-4557-be20-dce5f7266292"
(reference "#PWR0104") (unit 1) (value "+3V3") (footprint "")
)
(path "/c85f50b8-8333-412a-940a-b25e6bc9faf2"
(reference "#PWR0105") (unit 1) (value "GND") (footprint "")
)
(path "/f4dc8ac3-d986-48a0-a66a-459daadef931"
(reference "#PWR0106") (unit 1) (value "GND") (footprint "")
)
(path "/ba54f50c-d12f-43c2-8756-845c9dd68f54"
(reference "#PWR0107") (unit 1) (value "+5V") (footprint "")
)
(path "/b1c36f6e-75a8-4c4c-8ed4-d43e9de62446"
(reference "#PWR0108") (unit 1) (value "VCC") (footprint "")
)
(path "/0f8cfa67-6c37-4c56-98c0-e134c16a7f3e"
(reference "#PWR0109") (unit 1) (value "+3V3") (footprint "")
)
(path "/68700896-6ce6-44b0-ac02-9e847f29bf8c"
(reference "#PWR?") (unit 1) (value "GND") (footprint "")
)
(path "/e621af57-2812-4c4e-aa8c-a74faeb9bc03"
(reference "#PWR?") (unit 1) (value "+3V3") (footprint "")
)
(path "/3616507a-404e-4274-bd2e-b65f2f1e94f1"
(reference "J2") (unit 1) (value "gametrak") (footprint "Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical")
)
(path "/af706b9d-2e5e-46ab-9a95-50062787b0fa"
(reference "J?") (unit 1) (value "serial_esc") (footprint "")
)
(path "/d29ab708-161a-4071-a560-c882ef4a2aee"
(reference "J?") (unit 1) (value "display") (footprint "")
)
(path "/a2a0f5cc-b5aa-4e3e-8d85-23bdc2f59aec"
(reference "U1") (unit 1) (value "NRF24L01_Breakout") (footprint "RF_Module:nRF24L01_Breakout")
)
(path "/947df0d8-493c-4a35-aca7-d69eb00dcd35"
(reference "U?") (unit 1) (value "Teensy3.2") (footprint "")
(reference "U2") (unit 1) (value "Teensy3.2") (footprint "")
)
)
)