22
33// Array of characters, in order, the first item is located on the magnet on the
44// character drum
5- const char SplitFlapModule::chars[37 ] = {' ' , ' A' , ' B' , ' C' , ' D' , ' E' , ' F' , ' G' , ' H' , ' I' , ' J' , ' K' , ' L' ,
6- ' M' , ' N' , ' O' , ' P' , ' Q' , ' R' , ' S' , ' T' , ' U' , ' V' , ' W' , ' X' , ' Y' ,
7- ' Z' , ' 0' , ' 1' , ' 2' , ' 3' , ' 4' , ' 5' , ' 6' , ' 7' , ' 8' , ' 9' };
8- const int SplitFlapModule::numChars = sizeof (SplitFlapModule::chars) / sizeof (SplitFlapModule::chars[0 ]);
9- int SplitFlapModule::charPositions[37 ]; // to be written in init function
5+ const char SplitFlapModule::StandardChars[37 ] = {' ' , ' A' , ' B' , ' C' , ' D' , ' E' , ' F' , ' G' , ' H' , ' I' , ' J' , ' K' , ' L' ,
6+ ' M' , ' N' , ' O' , ' P' , ' Q' , ' R' , ' S' , ' T' , ' U' , ' V' , ' W' , ' X' , ' Y' ,
7+ ' Z' , ' 0' , ' 1' , ' 2' , ' 3' , ' 4' , ' 5' , ' 6' , ' 7' , ' 8' , ' 9' };
108
11- bool hasErrored = false ;
9+ const char SplitFlapModule::ExtendedChars[48 ] = {
10+ ' ' , ' A' , ' B' , ' C' , ' D' , ' E' , ' F' , ' G' , ' H' , ' I' , ' J' , ' K' , ' L' , ' M' , ' N' , ' O' ,
11+ ' P' , ' Q' , ' R' , ' S' , ' T' , ' U' , ' V' , ' W' , ' X' , ' Y' , ' Z' , ' 0' , ' 1' , ' 2' , ' 3' , ' 4' ,
12+ ' 5' , ' 6' , ' 7' , ' 8' , ' 9' , ' \' ' , ' :' , ' ?' , ' !' , ' .' , ' -' , ' /' , ' $' , ' @' , ' #' , ' %' ,
13+ };
1214
13- // Not used but useful to have
14- // const int SplitFlapModule::motorPins[] = {P06, P05, P04, P03}; // List of
15- // pins to set as OUTPUT const int SplitFlapModule::HallEffectPIN = P17; //Input
16- // pin for Hall effect sensor
15+ bool hasErrored = false ;
1716
1817// Default Constructor
19- SplitFlapModule::SplitFlapModule () : address(0 ), position(0 ), stepNumber(0 ), stepsPerRot(0 ) { // default values
20- magnetPosition = 710 ; // sort of guessing
18+ SplitFlapModule::SplitFlapModule ()
19+ : address(0 ), position(0 ), stepNumber(0 ), stepsPerRot(0 ), chars(StandardChars), numChars(37 ), charSetSize(37 ) {
20+ magnetPosition = 710 ;
2121}
2222
2323// Constructor implementation
24- SplitFlapModule::SplitFlapModule (uint8_t I2Caddress, int stepsPerFullRotation, int stepOffset, int magnetPos)
25- : address(I2Caddress), position(0 ), stepNumber(0 ), stepsPerRot(stepsPerFullRotation) {
24+ SplitFlapModule::SplitFlapModule (
25+ uint8_t I2Caddress, int stepsPerFullRotation, int stepOffset, int magnetPos, int charsetSize
26+ )
27+ : address(I2Caddress), position(0 ), stepNumber(0 ), stepsPerRot(stepsPerFullRotation), charSetSize(charsetSize) {
2628 magnetPosition = magnetPos + stepOffset;
29+
30+ chars = (charsetSize == 48 ) ? ExtendedChars : StandardChars;
31+ numChars = (charsetSize == 48 ) ? 48 : 37 ;
2732}
2833
2934void SplitFlapModule::writeIO (uint16_t data) {
@@ -49,6 +54,13 @@ void SplitFlapModule::writeIO(uint16_t data) {
4954
5055// Init Module, Setup IO Board
5156void SplitFlapModule::init () {
57+ float stepSize = (float ) stepsPerRot / (float ) numChars;
58+ float currentPosition = 0 ;
59+ for (int i = 0 ; i < numChars; i++) {
60+ charPositions[i] = (int ) currentPosition;
61+ currentPosition += stepSize;
62+ }
63+
5264 uint16_t initState = 0b1111111111100001 ; // Pin 15 (17) as INPUT, Pins 1-4 as OUTPUT
5365 writeIO (initState);
5466
@@ -67,19 +79,11 @@ void SplitFlapModule::init() {
6779 delay (initDelay);
6880
6981 stop ();
70-
71- // Generate Character Position Array
72- float stepSize = (float ) stepsPerRot / (float ) numChars;
73- float currentPosition = 0 ;
74- for (int i = 0 ; i < numChars; i++) {
75- charPositions[i] = (int ) currentPosition;
76- currentPosition += stepSize;
77- }
7882}
7983
8084int SplitFlapModule::getCharPosition (char inputChar) {
8185 inputChar = toupper (inputChar);
82- for (int i = 0 ; i < numChars ; i++) {
86+ for (int i = 0 ; i < charSetSize ; i++) {
8387 if (chars[i] == inputChar) {
8488 return charPositions[i];
8589 }
0 commit comments