cartreader/Cart_Reader/README.md

90 lines
3.3 KiB
Markdown
Raw Normal View History

2022-06-09 01:44:49 +02:00
## This Arduino sketch is licensed under the GNU GENERAL PUBLIC LICENSE Version 3 (GPL v3)
### This means that you are free to:
- use, modify and distribute this software, even commercially
### Under the following terms:
- state changes
- disclose source
- same license
### Limitations:
- Liability
- Warranty
More details: https://www.gnu.org/licenses/gpl-3.0.en.html
##
2017-02-15 20:42:36 +01:00
Every submodule has it's own setup_XX() function that configures the needed pins and a submenu that lets you choose what you want to do.
The code directly addresses the pins via the DDR, PIN and PORT registers.
2021-11-20 12:36:31 +01:00
Please also refer to the [pinout Open Office sheet](https://github.com/sanni/cartreader/blob/master/pinout.ods).
2017-02-15 20:42:36 +01:00
```
void setup_N64_Controller() {
// Output a low signal
PORTH &= ~(1 << 4);
// Set Controller Data Pin(PH4) to Input
DDRH &= ~(1 << 4);
}
```
Would be the same as this in a more traditional Arduino sketch:
```
int dataPin = 7;
void setup(){
// Output a low signal
digitalWrite(dataPin, LOW);
// Set controller data pin to input
pinMode(dataPin, INPUT);
}
```
To preserve memory every string is saved into the flash of the Arduino, also called progmem. This is done by using the F() macro.
```
println_Msg(F("Press Button."));
```
Also all the menus are stored in progmem and are only recalled to sram when needed.
```
// N64 controller menu items
const char N64ContMenuItem1[] PROGMEM = "Test Controller";
const char N64ContMenuItem2[] PROGMEM = "Read ControllerPak";
const char N64ContMenuItem3[] PROGMEM = "Write ControllerPak";
const char* const menuOptionsN64Controller[] PROGMEM = {N64ContMenuItem1, N64ContMenuItem2, N64ContMenuItem3, FSTRING_RESET};
2017-02-15 20:42:36 +01:00
```
2019-02-08 23:39:20 +01:00
In an effort to keep the codebase as portable as possible instead of using the functions supplied by the OLED library directly to print out text, auxiliary functions like `println_Msg` are being used. So if you want to change to another display library you don't need to change all the code but only the helper functions.
2017-02-15 20:42:36 +01:00
```
void print_Msg(long unsigned int message) {
if (ENABLE_OLED)
2017-02-15 20:42:36 +01:00
display.print(message);
if (ENABLE_SERIAL)
2017-02-15 20:42:36 +01:00
Serial.print(message);
}
```
2022-10-08 16:25:41 +02:00
Before uploading the code to your Arduino you need to select your hardware version in Cart_Reader.ino
2017-02-15 20:42:36 +01:00
```
2022-10-08 16:25:41 +02:00
//******************************************
// !!! CHOOSE HARDWARE VERSION !!!
//******************************************
// Remove // in front of the line with your hardware version
// #define HW5
// #define HW4
#define HW3
// #define HW2
// #define HW1
// #define SERIAL_MONITOR
2021-11-15 12:34:18 +01:00
2017-02-15 20:42:36 +01:00
```
2021-11-15 12:34:18 +01:00
For more info please have a look at [this wiki article](https://github.com/sanni/cartreader/wiki/How-to-flash-the-Arduino).
2019-10-04 12:57:52 +02:00
Needed libraries(already included in the portable Arduino IDE under Releases)
SD lib: https://github.com/greiman/SdFat
2022-08-08 19:54:00 +02:00
LCD lib: https://github.com/olikraus/U8g2_Arduino
Neopixel lib: https://github.com/adafruit/Adafruit_NeoPixel
Rotary Enc lib: https://github.com/mathertel/RotaryEncoder
SI5351 lib: https://github.com/etherkit/Si5351Arduino
2022-10-12 10:16:08 +02:00
RTC lib: https://github.com/adafruit/RTClib (needs BusIO lib: https://github.com/adafruit/Adafruit_BusIO)
Frequency Counter lib: https://github.com/PaulStoffregen/FreqCount