diff --git a/arduino/Screen code/Screen-code-full/Screen-code-full.ino b/arduino/Screen code/Screen-code-full/Screen-code-full.ino index 60c88df..4fd63fe 100644 --- a/arduino/Screen code/Screen-code-full/Screen-code-full.ino +++ b/arduino/Screen code/Screen-code-full/Screen-code-full.ino @@ -39,5 +39,5 @@ void loop() { // writeText(Answer[0], 2, 50, 300, 4000); displayText.writeText(Question[i], 3, 0, 0, 0, true, false); displayText.writeText(Answer[i], 3, 0, 200, 0, true, true); - delay(20000); + delay(2000); } diff --git a/arduino/Screen code/Screen-code-full/displayText.cpp b/arduino/Screen code/Screen-code-full/displayText.cpp index 1971152..6c12cab 100644 --- a/arduino/Screen code/Screen-code-full/displayText.cpp +++ b/arduino/Screen code/Screen-code-full/displayText.cpp @@ -11,14 +11,15 @@ void DisplayText::writeText(char* text, int size, int posX, int posY, int screen if (center) { posX = centerText(text); } - if (bottom) { - posY = bottomText(text); - } + // if (bottom) { + // posY = bottomText(text); + // } tft.setCursor(posX, posY); tft.setTextSize(size); printWordsFull(text); delay(screenTime); } + //to center the text when enabled in the public function int DisplayText::centerText(char* text) { int16_t x1, y1; @@ -27,49 +28,49 @@ int DisplayText::centerText(char* text) { int x = (tft.width() - w) / 2; return x; } -//to dijsplay the text at the bottom when enabled in the public function -int DisplayText::bottomText(char* text) { - int16_t x1, y1; - uint16_t w, h; - tft.getTextBounds(text, 0, 0, &x1, &y1, &w, &h); - int y = (tft.height() - h); - return y; -} + +// //to display the text at the bottom when enabled in the public function +// int DisplayText::bottomText(char* text) { +// int16_t x1, y1; +// uint16_t w, h; +// tft.getTextBounds(text, 0, 0, &x1, &y1, &w, &h); +// int y = (tft.height() - h); +// return y; +// } //attempt to write the text out in full (wip) void DisplayText::printWordsFull(char* text) { - - char* textArray[100]; - int i = 0; - //copy the text into a variable so the string can be re-used later - char* textCopy = strdup(text); - //split the text into words and put them into a array + const int screenWidth = 320; // replace with your TFT display width + const int lineHeight = 22; // replace with your text line height + char* word = strtok(text, " "); + char line[100] = ""; + int lineCount = 0; + while (word != NULL) { - textArray[i] = word; - word = strtok(NULL, " "); - i++; - } + char tempLine[100]; + strcpy(tempLine, line); + strcat(tempLine, word); + strcat(tempLine, " "); - int lineWidth = 0; - int maxLineWidth = 320; // replace with the width of your TFT display - int charWidth = 11; // replace with the width of your characters - for (int j = 0; j < i; j++) { - //count the amount of letters in the word - int wordLength = strlen(textArray[j]); + int16_t x1, y1; + uint16_t w, h; + tft.getTextBounds(tempLine, 0, 0, &x1, &y1, &w, &h); - // If the word won't fit on the current line, move to the next line - if (lineWidth + wordLength * charWidth > maxLineWidth) { - tft.println(); - //reset lineWidth - lineWidth = 0; + if (w > screenWidth && strlen(line) > 0) { + tft.setCursor(0, lineHeight * lineCount); + tft.println(line); + lineCount++; + strcpy(line, word); + strcat(line, " "); + } else { + strcpy(line, tempLine); } - //print the text - tft.print(textArray[j]); - tft.print(" "); - lineWidth += (wordLength + 1) * charWidth; // +1 for the space - } - //removes textCopy out of the memory - free(textCopy); + word = strtok(NULL, " "); + } + + // print the last line + tft.setCursor(0, lineHeight * lineCount); + tft.println(line); } \ No newline at end of file diff --git a/arduino/Screen code/Screen-code-full/displayText.h b/arduino/Screen code/Screen-code-full/displayText.h index 7103044..a29b070 100644 --- a/arduino/Screen code/Screen-code-full/displayText.h +++ b/arduino/Screen code/Screen-code-full/displayText.h @@ -8,7 +8,7 @@ class DisplayText { private: Adafruit_ST7796S_kbv& tft; int centerText(char* text); - int bottomText(char* text); + // int bottomText(char* text); void printWordsFull(char* text); public: