final
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG
Revision 0:af94a5725e48, committed 2018-10-25
- Comitter:
- abp123
- Date:
- Thu Oct 25 12:32:13 2018 +0000
- Commit message:
- final version;
Changed in this revision
diff -r 000000000000 -r af94a5725e48 BSP_DISCO_F746NG.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BSP_DISCO_F746NG.lib Thu Oct 25 12:32:13 2018 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/ST/code/BSP_DISCO_F746NG/#df2ea349c37a
diff -r 000000000000 -r af94a5725e48 LCD_DISCO_F746NG.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LCD_DISCO_F746NG.lib Thu Oct 25 12:32:13 2018 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/ST/code/LCD_DISCO_F746NG/#d44525b1de98
diff -r 000000000000 -r af94a5725e48 Readme.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Readme.md Thu Oct 25 12:32:13 2018 +0000 @@ -0,0 +1,117 @@ +# Denne tekstfil gennemgår funktioner, variabler, arbejdsmetoder mm. følgende +strukturen af selve programmet +Navn - Andreas Bissenbach Petersen +Start Dato - 15 Oktober 2018 + +##Index## +Afsnit-Beskrivelse +1 -Generel information +2 -Klasser og biblioteker +3 -Printf tekst funktioner +4 -Wait funktion +5 -Variabler +6 -Voids +7 -Goto, labels og loops +8 -Trådet programmering +9 -Sensorer +10 -Fremgangsmåder +11 -Diskussion og problemstillinger +12 -Log + +1.#Generel information +Projektet består af to filer, en main fil(cpp), hvor den overordnede struktur er +og en header fil(h), hvor variabler, tråde og lign. opholder sig. +Denne informationstekst har til formål at give et kort udkast af selve projektets +struktur og forklaring hvordan opgaven er løst. + +2.#Klasser og biblioteker +De biblioteker, somn er indkluderet har vær især en række klasser, som bruges til +løsning af opgaven. Bibliotekerne er bestående af hhv: Touchscreen, +LCD(liquid crystal display - display) og en utility pakke(BSP). +##Hvorfor hente andres biblioteker og klasser? +Grunden til at jeg Henter andres biblioteker er, at samt opgavens omfang og tid til udvikling et omstændigt +og brugbart program, vurderes det bedst at bruge andres og rette fokus på udvikling og læring. + +3.#Printf tekst funktioner +\r - Bruges til at gå til start af linje +\n - Går til ny/næste linje +\0 - Betyder null, kan være brugbar i eksempelvis if statements + +Udover disse, har jeg gjort brug af diverse konverterings funktioner +eksempelvis, skal der implementeres en int variabel i output, udføres det således: +printf("Eksempel tekst: %d", IntegerVariabel), hvor variablen indsættes hvor %d er. +Kan variablen ikke parses, kan man eksempelvis sætte "(int)" alt efter behovet af +konverteringsbehov + +4.#Wait() funktionen +Denne funktion kan bruges til flere formål. Mest at bestemme i hvilket tempo koden +kører i, men også en slags sikkerhed så programmet kan kompile ordenligt og mindske +fejl når programmet køres. + +5.#Variabler +Variablerne er for det meste opstillet i header filen. Her er de grupperet efter funktion +og herefter grupperet efter variabel type. De forskellige variabler er angivet således: + +Konstanter - en fast værdi som ikke skal ændres, bruges eksempelvis i formler +Double - Typen som nemmest kan parses gennem output når det gælder temperaturer +Int - Den mest hyppige variabel, bruges mest når tallet ikke har komma +float - Bruges hvis den kan parses i output, kan indeholde flere decimaler end double +Char og Char array - enkel og flere bogstaver/tal. char defineres i output med '' + +6.#Voids +Hvorfor bruge voids frem for klasser, objekter, int funktioner mm? +jeg har vurderet, at voids i denne sammenhæng er et godt værktøj til denne opgave. +Med Voids kan man lave parameter overførsel, skabe god struktur(Navngivning, nem instantiering) +og så kræver voids ikke, at man returnerer noget. +En klasse kan skal således udskrives sådan: +void TestVoid(){} +TestKlasse TestObject; +TestObject.TestVoid(); +Hvor en simpel void bare kan være: void test(){} uden at instantiere objektet fra klassen + +7.#Goto, labels og loops +Jeg har valgt at bruge goto statements for at gøre brug af boardets userbutton. Til userbutton +har jeg tilsat bool værdier, hvor disse, bestemmer hvor i programmet jeg er. Dette giver +overskuelighed hvor man kan opstille og sammenligne værdier. Det blev for mig oplagt, da +der skal vælges mellem fahrenheit og celcius. + +8.#Trådet programmering +Med trådet programmering er det muligt at have funktioner kørende uafhængigt af hinanden. +Til input er dette meget brugbar, når det gælder loops. Dette skyldes, når man sidder i en +uendelig while loop, bliver koden kørt igen og igen, som også blokerer for user input. +Med trådet programmering, kan der være en løsning til dette. + +9.#Fremgangsmåder +##Direkte kompilering - Jeg fandt ud af, at det i større grad ville være hurtigere +at omdirigere browser til at hente bin filen fra mbed direkte ind i kontrolleren + +##Sikkerhed - Hver gang større ændringer laves eller filer slettes, kopierer jeg mit projekt +ind i et test projekt. Her kan jeg ændre, uden at være bange for at miste data. +Udover dette, kopierer jeg mit projekt ind i en tekstfil som jeg opbevarer i foldere, +dette er også brugbart til dokumentation, historik og forståelse.Jeg laver ikke for mange +ændringer, før jeg kompilerer, så jeg har styr over hvad der er blevet ændret. + +10.#Sensorer +Hovedsageligt, har jeg brugt analog inputs(A0, A1, A3).De bliver instantieret som objekt, gennem den +hentede AnalogIn klasse som: AnalogIn LightSensor(A0), AnalogIn lyd(A1), AnalogIn lys(A3) +objekt, inde i () er analog addressen til sensoren og AnalogIn er klassen fra biblioteket. + +11.#Diskussion og problemstillinger +I starten brugte jeg noget tid på først at læse og forstå C++ før jeg gik igang. Der blev +savnet intellisense fra visual studio efter noget tid, og jeg prøvede at implementere embedded +programmering i visual studio, men vurderede at det var for stor en opgave at få det opsat. +Der var problemer med trådet programmering da jeg ikke havde viden/biblioteker til +at instantiere og håndtere denne funktion. Undervejs havde jeg en del problemer med min +controller, da ikke alle analog porte fungerede. Fandt ud af undervejs, at det var selve +boardet som ikke kunne få ordenlig forbindelse til mit base shield. + +12.#Log +16 Oktober 2018 - Tæller program laves +17 Oktober 2018 - Serial input/output testes +17 Oktober 2018 - Blink funktion med knap udvikles +18 Oktober 2018 - Temperatur på display udvikles +19 Oktober 2018 - Selve hovedprojektet igangsættes +22 Oktober 2018 - Alle sensorer fungerer +23 Oktober 2018 - Trådet programmering fungerer +24 Oktober 2018 - Program finpudses og opstilles +
diff -r 000000000000 -r af94a5725e48 Resume.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resume.md Thu Oct 25 12:32:13 2018 +0000 @@ -0,0 +1,38 @@ +Et resume over præsentationen for at +hjælpe med at huske hvad der skete + +Dine kommentarer er mellem # tegn + +#Mangel af Opgave beskrivelse# +Svar: +--I pdf filen evaluering står der således: +Struktureret program dokumentation: +Beskrivelse af program +Tilslutning af sensor +Startdato + navn +Log over ændringer / problemer / fremtidige +ændringer-- + +Jeg ser ikke krav til jeg gentager opgavens beskrivelse +men herimod program beskrivelse, hele readme.md filen er +baseret på beskrivelse af mit program + +#For mange waits i main# +Svar: +Der er i forvejen få ting i main, jeg ville demonstrerer +at der bliver ventet mellem hver void. Hvis det er i bedre smag +kan disse nemt rykkes over i main i stedet + +#Mangel på format/struktur i program# +Svar: +Jeg ser ingen grund til, hvorfor dette skulle trække ned +I øvrigt tager det ca 1 sekund at formatere(ctrl+a og ctrl+shit+f) +Og jeg mener, at du mindst en gang har set min kode gennem forløbet +og har ikke fået nogle tips/hints til at ændre dette + +#For uoverskueligt med goto statements# +Svar: +Da disse hop strækker sig over ganske få linjer +vurderede jeg, at goto var et udmærket værktøj(som du var enig i) + +
diff -r 000000000000 -r af94a5725e48 TS_DISCO_F746NG.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TS_DISCO_F746NG.lib Thu Oct 25 12:32:13 2018 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/ST/code/TS_DISCO_F746NG/#fe0cf5e2960f
diff -r 000000000000 -r af94a5725e48 head.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/head.h Thu Oct 25 12:32:13 2018 +0000 @@ -0,0 +1,129 @@ +//Klasser fra biblioteker +Thread thread; +InterruptIn button(USER_BUTTON); +DigitalOut led(LED1); +AnalogIn temp(A3); +AnalogIn lyd(A1); +AnalogIn LightSensor(A0); +LCD_DISCO_F746NG lcd; +TS_DISCO_F746NG ts; + +//Variabler +const int R0 = 100000; +const int B=4275; + +bool btnPress = true; + +double temperature; +double fahrenheit; + +//Variabler Til display & Info fra user input +int Bnr; +int Lnr; +int inp; +//variabler til data iteration +int i; +//antal er sat til 1, for at tage 1 sæt af gangen +int antal = 1; +char cAntal[5]; +//lys +float LVal; +//lyd +int lydstyrke; +int cPut; +//til display, unsigned int 8 bit(255 i decimanl) +uint8_t text[30]; + +//Voids +//Denne funktion bruger parameter overførsel for at håndtere vores indput fra putty/console +void Num(char ln[], int M) +{ + //i2 for at have sin egen itererings variabel, da i, er brugt andre steder til for loops + int i2 = 0; + char c; + //imens i2 variablen er mindre end max værdien og vores input ikke er i begyndelsen af linjen, + //tilføjes en char til vores array(string) + while (i2 < M && (c = getchar()) != '\r') + //Tilføjer alle chars med optælling + ln[i2++] = c; + ln[i2] = '\0'; +} +//Parameter overfører bygnings og lokale nummer til display +void DisplayVoid(int B, int L) +{ + lcd.Clear(LCD_COLOR_DARKBLUE); + lcd.SetBackColor(LCD_COLOR_DARKBLUE); + lcd.SetTextColor(LCD_COLOR_WHITE); + sprintf((char*)text, "Bygning: %d", B); + lcd.DisplayStringAt(0, LINE(1), (uint8_t *)&text, LEFT_MODE); + sprintf((char*)text, "Lokale: %d", L); + lcd.DisplayStringAt(0, LINE(2), (uint8_t *)&text, LEFT_MODE); +} +//Denne void bruges til Tråd +void InputThread() +{ + while (1) { + wait(0.5); + //getchar() skal defineres til int for at kunne parses. Chars i c programmering parses som int + inp = getchar(); + //input skal være lig den definerede værdi og vil ikke returnere noget hvis det er tomt/null + if (inp == '1' && inp != (int)"\0") + printf("Temperatur i hex: %x\n", (int)temp.read_u16()); + else if (inp == '2' && inp != (int)"\0") + printf("Lyd: %d\n", lydstyrke); + else if (inp == '3' && inp != (int)"\0") + printf("Lys: %f\n", LVal); + //returnerer intet, hvis ovenstående statements ikke bliver mødt + else + printf(""); + } +} + +void TempVoid() +{ +//Defineres ud i et, uden del-variabler(undtagen konstanter), så værdien bliver dynamisk + temperature=1.0/(log(R0*(65535.0/((double)temp.read_u16())-1.0)/R0)/B+1/298.15)-273.15; + fahrenheit = temperature * 1.8 + 32; + if(btnPress == true) { + sprintf((char*)text, "Temperatur: %f", temperature); + lcd.DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE); + } else if(btnPress == false) { + sprintf((char*)text, "Fahrenheit: %f", fahrenheit ); + lcd.DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE); + } +} + +void LydVoid() +{ + lydstyrke = (int)lyd.read_u16(); + if(lydstyrke != 0 && lydstyrke > 25000) { + sprintf((char*)text, "Sound is too high"); + lcd.DisplayStringAt(0, LINE(6), (uint8_t *)&text, CENTER_MODE); + wait(2.00); + } else if(lydstyrke != 0 && lydstyrke <25000) { + sprintf((char*)text, "Sound level is ok"); + lcd.DisplayStringAt(0, LINE(6), (uint8_t *)&text, CENTER_MODE); + wait(0.25); + } +} + +void LysVoid() +{ + LVal = (float)(1023-LightSensor.read())*10/LightSensor.read(); + if(LVal <= 55000) { + sprintf((char*)text, "It's bright now "); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); + } else if(LVal > 55000) { + sprintf((char*)text, "It's getting dark "); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); + } +} +//Til user button +void pressed() +{ + btnPress = false; +} +void pressed2() +{ + btnPress = true; +}
diff -r 000000000000 -r af94a5725e48 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Oct 25 12:32:13 2018 +0000 @@ -0,0 +1,71 @@ +//Include filer +#include "mbed.h" +#include "TS_DISCO_F746NG.h" +#include "LCD_DISCO_F746NG.h" +#include "head.h" + +int main() +{ + //for loop der itererer data fra user input + for (i = 0; i < antal; i++) { + printf("\nIndtast Bygning nummer:"); + //Num void + Num(cAntal, 4); + // atoi = konverter string til int(ASCII to integer) + Bnr = atoi(cAntal); + printf("Indtast Lokale nummer:"); + Num(cAntal, 5); + Lnr = atoi(cAntal); + } + //Udskriver den indtastede information + printf("Info:\n"); + printf("Bygning %d\n", Bnr); + printf("Lokale %d\n", Lnr); + printf("Tast 1 for temperatur(hex), 2 for lyd, 3 for lys: "); + //Her starter jeg min thread i baggrunden + thread.start(InputThread); + wait(0.1); + //Hvis der ikke er fundet resultater fra user input, udløser displayet en fejlbesked + if (Bnr == NULL || Lnr == NULL) { + lcd.Clear(LCD_COLOR_RED); + lcd.SetBackColor(LCD_COLOR_RED); + lcd.SetTextColor(LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"Fejl, ingen input", CENTER_MODE); + wait(1); + } else + //Hvis der ikke er fejl, aktiveres Display void + DisplayVoid(Bnr, Lnr); + //User button med bool variabel, aktiverer temperatur, lyd og lys voids +label: + while(btnPress == true) { + //bool til false + button.fall(&pressed); + wait(0.1); + TempVoid(); + wait(0.1); + LydVoid(); + wait(0.1); + LysVoid(); + wait(0.1); + } +label2: + while(btnPress == false) { + //bool til true + button.fall(&pressed2); + wait(0.1); + TempVoid(); + wait(0.1); + LydVoid(); + wait(0.1); + LysVoid(); + wait(0.1); + } + //Bool variablen styrer hvilket sted i programmet vi er + if(btnPress == true) + goto label; + else if (btnPress == false) + goto label2; +} + + +
diff -r 000000000000 -r af94a5725e48 mbed-os.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Thu Oct 25 12:32:13 2018 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#e1bea44212b8275f7d8ce7253e758c2e25c57482