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: diff --git a/docs/LearningProcessBram/Sprint1/FirstDocumentation.md b/docs/LearningProcessBram/Sprint1/FirstDocumentation.md index 579cdd6..60abfc7 100644 --- a/docs/LearningProcessBram/Sprint1/FirstDocumentation.md +++ b/docs/LearningProcessBram/Sprint1/FirstDocumentation.md @@ -1,162 +1,235 @@ -## Bram's Learning Curve -Here i post my progress on learning and mastering arduino. I originally did the Gamedevelopment study but decided to switch to "Technische Informatica". That is why i need to learn everything from scratch, and everything is new to me. -This is the reason that i made these documents, in order to track my progression in this new study. +## Bram's Learning Curve +Here I post my progress on learning and mastering Arduino. I originally did the Game development study but decided to switch to "Technische Informatica". That is why I need to learn everything from scratch, and everything is new to me. +This is the reason that I made these documents, in order to track my progression in this new study. -### Buzzer -For one of my first projects I wanted to learn how to use a buzzer with different notes. -To achieve this, i went on a search accross sites to see how i can use frequenties to make different sounds. -Then i came accross a teaching site (https://www.codingkids.nl/arduino-buzzer.html) that taught me the language to communicate to the buzzer what frequenties to use. This way i can make any sound come out of this simple buzzer. +### Buzzer +For one of my first projects, I wanted to learn how to use a buzzer with different notes. +To achieve this, I went on a search across sites to see how I can use frequencies to make different sounds. +Then I came across a teaching site (https://www.codingkids.nl/arduino-buzzer.html) that taught me the language to communicate to the buzzer what frequencies to use. This way I can make any sound come out of this simple buzzer. -### Arduino Video -I watched a video about using arduino and took alot op notes along the way. -The link is: (https://www.youtube.com/watch?v=BLrHTHUjPuw). +### Arduino Video +I watched a video about using Arduino and took a lot of op notes along the way. +The link is: (https://www.youtube.com/watch?v=BLrHTHUjPuw). -\/\/arduino information: +\/\/Arduino information: -\/pinnumber(locatie, in-/output) +\/pinnumber(locatie, in-/output) -\/digitalwrite(locatie, high/low) +\/digitalwrite(locatie, high/low) -\/delay(time in millisec) +\/delay(time in millisec) -\/int... <- variable -\/with a decimal its a double -> 1,2 -\/a character is a char -> "a" +\/int... <- variable -\/\/serial communications: -\/setup: -Serial.begin(9600) -> the text speed -Serial.sprintLn(text) +\/with a decimal its a double -> 1,2 -\/Loop: -Serial.print("text") -Serial.printLn(....) -> variable because no " +\/a character is a char -> "a" -\/Ctrl + shift + M = serial monitor. -The text speed needs to be the same as given. +\/\/serial communications: -\/\/If Statements: -if(condition){ - action -}else{ - action -} +\/setup: +Serial.begin(9600) -> the text speed +Serial.sprintLn(text) -\/&& = "and" -\/|| = "or" +\/Loop: +Serial.print("text") +Serial.printLn(....) -> variable because no " -\/\/For loops: -For(int*i; i <= 10 ; i++){ - serial.print(i) -} +\/Ctrl + shift + M = serial monitor. +The text speed needs to be the same as given. -\/The fading of led's: -examples, basics, fade +\/\/If Statements: -\/ servo's -examples, servo, sweep +if(condition){ -### Linux and raspberryPI. -To gain more knowledge about linux, i first asked my class mates if they could get me started. -They showed me how to gain acces to a server, and told me how to navigate through files. -By doing this i got taught the following commands: + action -~ $ 'ls -la' = show file / volders -~ $ 'top' = see currently running programs -~ $ 'cd ' = change directory -~ $ 'mkdir name' = make directory -~ $ 'touch name' = make file -~ $ 'ping ip addres' -~ $ 'ssh username@ip address' = open ssh connection. +}else{ -From here i went and looked up several linux video's wich taught me the following: -.... + action -### Air, temperature, and all sort of stuff. -After the linux coding i decided to take a step back and began gaining experience with sensors. -I began trying to make our group project's "node" for myself. -I did this by using one of the main sensors and tried programing it in myself. -I used this website for the information and for the right library:(https://randomnerdtutorials.com/esp32-dht11-dht22-temperature-humidity-sensor-arduino-ide/). -Aside from the website i used my teammates for help where it was needed. -I wanted to make my own spin on the original design by including a button to activate the sensor and an LED to show if its on. -The rest of the tutorial was clear and worked like a charm. -the code used looks like this: -``` -#include "DHT.h" +} -#define DHTPIN 4 -#define DHTTYPE DHT11 +\/&& = "and" -DHT dht(DHTPIN, DHTTYPE); +\/|| = "or" -void setup() { -Serial.begin(9600); -Serial.println(F("DHTxx test!")); -dht.begin(); -} +\/\/For loops: -void loop() { - delay(2000); - float h = dht.readHumidity(); -float t = dht.readTemperature(); -float f = dht.readTemperature(true); +For(int*i; i <= 10 ; i++){ - if (isnan(h) || isnan(t) || isnan(f)) { - Serial.println(F("Failed to read from DHT sensor!")); - return; - } + serial.print(i) -float hif = dht.computeHeatIndex(f, h); -float hic = dht.computeHeatIndex(t, h, false); +} -Serial.print(F("Humidity: ")); -Serial.print(h); -Serial.print(F("% Temperature: ")); -Serial.print(t); -Serial.print(F("°C ")); -Serial.print(f); -Serial.print(F("°F Heat index: ")); -Serial.print(hic); -Serial.print(F("°C ")); -Serial.print(hif); -Serial.println(F("°F")); -} -``` -And The fysical board looks like this: +\/The fading of led's: -And here it looks in action: +examples, basics, fade -Later on i could expand this code and the fysical product to include the rest of the sensors. +\/ servo's + +examples, servo, sweep + +### Linux and raspberry PI. + +To gain more knowledge about Linux, I first asked my classmates if they could get me started. + +They showed me how to gain access to a server and told me how to navigate through files. + +By doing this I got taught the following commands: + +~ $ 'ls -la' = show file / folders + +~ $ 'top' = see currently running programs + +~ $ 'cd ' = change directory + +~ $ 'mkdir name' = make directory + +~ $ 'touch name' = make file + +~ $ 'ping ip addres' + +~ $ 'ssh username@ip address' = open ssh connection. + +### Air, temperature, and all sort of stuff. + +After the Linux coding I decided to take a step back and began gaining experience with sensors. +I began trying to make our group project's "node" for myself. +I did this by using one of the main sensors and tried programing it myself. +I used this website for the information and for the right library:(https://randomnerdtutorials.com/esp32-dht11-dht22-temperature-humidity-sensor-arduino-ide/). +Aside from the website I used my teammates for help where it was needed. +I wanted to make my own spin on the original design by including a button to activate the sensor and an LED to show if its on. +The rest of the tutorial was clear and worked like a charm. +the code used looks like this: -### Buzzers .pt 2 -I found out how to make multiple buzzers go off with the press of one button and increase as mutch as there are pins. -I tried to not look up anything for this one, but did ask questions form time to time. -I designed it to work with scaning if there is and input and then output this signal to activate the buzzers. -This output signal can activate over multiple pins so this one button can set off all sorts of stuff. -The code is short and simple: ``` -int button = 20; -int buzzerone = 12; -int buzzertwo = 11; +#include "DHT.h" +#define DHTPIN 4 +#define DHTTYPE DHT11 +DHT dht(DHTPIN, DHTTYPE); -void setup() { - // put your setup code here, to run once: -pinMode(button, INPUT); -pinMode(buzzerone, OUTPUT); -pinMode(buzzertwo, OUTPUT); -} +void setup() { +//the serial port: +Serial.begin(9600); -void loop() { - - if(digitalRead(button) == HIGH){ - digitalWrite(buzzerone, HIGH); - digitalWrite(buzzertwo, HIGH); - }else{ - digitalWrite(buzzerone, LOW); - digitalWrite(buzzertwo, LOW); - } -} +//the initial test if the code works +Serial.println(F("DHTxx test!")); +//the library start +dht.begin(); +} + + + +void loop() { + delay(2000); + //a float has decimal numbers and the library reads the measurements. + float h = dht.readHumidity(); + float t = dht.readTemperature(); + float f = dht.readTemperature(true); + +//isnan = there is no reading , the || is "or" + if (isnan(h) || isnan(t) || isnan(f)) { + + Serial.println(F("Failed to read from DHT sensor!")); + + return; + } + float hif = dht.computeHeatIndex(f, h); + float hic = dht.computeHeatIndex(t, h, false); + + //all serial.ptint's send stuff to the serial board to showcase. + Serial.print(F("Humidity: ")); + Serial.print(h); + Serial.print(F("% Temperature: ")); + Serial.print(t); + Serial.print(F("°C ")); + Serial.print(f); + Serial.print(F("°F Heat index: ")); + Serial.print(hic); + Serial.print(F("°C ")); + Serial.print(hif); + Serial.println(F("°F")); +} ``` +And the physical board looks like this: +![Physical DHT11 board off]() +And here it looks in action: +![physical DHT11 board on]() -and the fysical design looks like this: ... \ No newline at end of file +Later on, I could expand this code and the physical product to include the rest of the sensors. + + + +### Buzzers .pt 2 +I found out how to make multiple buzzers go off with the press of one button and increase as Mutch as there are pins. +I tried to not look up anything for this one but did ask questions from time to time. +I designed it to work with scanning if there is any input and then output this signal to activate the buzzers. +This output signal can activate over multiple pins so this one button can set off all sorts of stuff. +The code is short and simple: + +``` +//set up some variables +int button = 20; +int buzzerone = 12; +int buzzertwo = 11; + +void setup() { +//put down some pins that will output , and some that input. +pinMode(button, INPUT); +pinMode(buzzerone, OUTPUT); +pinMode(buzzertwo, OUTPUT); +} + + + +void loop() { + //read is there is input on the button pin, if so send output to the other pins., otherwise keep them off. + if(digitalRead(button) == HIGH){ + digitalWrite(buzzerone, HIGH); + digitalWrite(buzzertwo, HIGH); + }else{ + digitalWrite(buzzerone, LOW); + digitalWrite(buzzertwo, LOW); + } +} +``` + +Here I made the physical design but instead of buzzers i used lights in order to show it working. +![board turned off.]() +And here is the the board working: +![board working and turned on.]() + +### Python For Dummies. +My job was to make a connection between the WebSocket and the database we had set up, and to do this we wanted to use python. +I had never used python before and was totally new to the entire code structure and wording. +Because I was totally new to all of python, I asked ChatGPT for and example and some concrete code. +I asked it my question which was the assignment I was given and tried to reverse learn this way. +I went and looked up fitting tutorials on W3SChools. +The following were used: + +(https://www.w3schools.com/python/python_mysql_getstarted.asp) + +(https://websockets.readthedocs.io/en/stable/) + +(https://www.w3schools.com/python/python_mysql_insert.asp) + +(https://www.w3schools.com/python/python_json.asp) + +After still not getting it very well i asked Dano (a teammate of mine) if he could teach me some basics, and so we did. +He taught me how to make a simple calculator and told me why my code worked the way it did. +(This was the code: +print("1 = + 2 = -") +c = int(input()) +print("first number") +a = input() +print("second number") +b= input() +if c == 1: + print(int(a) + int(b)) +elif c == 2: + print(int(a) - int(b)) +) + +Even if it looked simple, this was the ignition I needed to understand python better and continue my own research. \ No newline at end of file diff --git a/docs/LearningProcessBram/Sprint1/assets/Buzzer board off.jpg b/docs/LearningProcessBram/Sprint1/assets/Buzzer board off.jpg new file mode 100644 index 0000000..d8c24c6 Binary files /dev/null and b/docs/LearningProcessBram/Sprint1/assets/Buzzer board off.jpg differ diff --git a/docs/LearningProcessBram/Sprint1/assets/Buzzer board on.jpg b/docs/LearningProcessBram/Sprint1/assets/Buzzer board on.jpg new file mode 100644 index 0000000..5ea433c Binary files /dev/null and b/docs/LearningProcessBram/Sprint1/assets/Buzzer board on.jpg differ diff --git a/docs/LearningProcessBram/Sprint1/assets/DHT11 state 1.jpg b/docs/LearningProcessBram/Sprint1/assets/DHT11 state 1.jpg new file mode 100644 index 0000000..aa11cdf Binary files /dev/null and b/docs/LearningProcessBram/Sprint1/assets/DHT11 state 1.jpg differ diff --git a/docs/LearningProcessBram/Sprint1/assets/DHT11 state 2.jpg b/docs/LearningProcessBram/Sprint1/assets/DHT11 state 2.jpg new file mode 100644 index 0000000..895c526 Binary files /dev/null and b/docs/LearningProcessBram/Sprint1/assets/DHT11 state 2.jpg differ diff --git a/docs/assets/Technical/Enquete box.f3d b/docs/assets/Technical/Enquete box.f3d new file mode 100644 index 0000000..05ea452 Binary files /dev/null and b/docs/assets/Technical/Enquete box.f3d differ diff --git a/docs/node-documentation/TFT-screen.md b/docs/node-documentation/TFT-screen.md index ffe63b0..1b4c733 100644 --- a/docs/node-documentation/TFT-screen.md +++ b/docs/node-documentation/TFT-screen.md @@ -67,16 +67,18 @@ We aren't using the cs2 and the pen pin because we arent utilizing the touch fun ```mermaid classDiagram -displayTex <|-- Adafruit_ST7796S_kbv -loop <-- displayTex +displayText <|-- Adafruit_ST7796S_kbv -class displayTex{ + +class displayText{ +text +color +size +posx +posy +void writeText() + -int bottomText(char* text) + -void printWordsFull(char* text) -int centerText(char* text) diff --git a/docs/rpi-documentation/websockets.md b/docs/rpi-documentation/websockets.md index e69d2b8..c10d5e6 100644 --- a/docs/rpi-documentation/websockets.md +++ b/docs/rpi-documentation/websockets.md @@ -9,6 +9,8 @@ There are different languages to serve websockets with, but we are going to use ## Issues +Not all ports are open so we need to make a reverse proxy to use websockets. + ### Ports We can only use certain ports like 113, 80, 443. These are common ports and are not blocked by firewalls. Something in the network is blocking all other ports which makes it hard to use websockets. diff --git a/teamdocumentatie/dailyStandupNotes.md b/teamdocumentatie/dailyStandupNotes.md index 6e431f9..7ddcdd9 100644 --- a/teamdocumentatie/dailyStandupNotes.md +++ b/teamdocumentatie/dailyStandupNotes.md @@ -28,4 +28,11 @@ and im going to continue with working on the connection between the websocket an Sam is going to finish the code for the big questionaire screen. Dano is going to be writing some documentation and will be working with classes in arduino. Bram will do research on python to finish the connection to the database and the websocket. +} + +12 - 3 - 2024 { + Sam is going to continue to build his custom library for out custom questionaire screen. + Sietse is going to make a class in python. + Dano is making classes for the code of the node. + Bram is correcting some of his documentation and will continue the coding in python( to still make the connection between the database and the websocket.) } \ No newline at end of file