Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
--- /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
--- /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
--- /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
+
--- /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) + +
--- /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
--- /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;
+}
--- /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;
+}
+
+
+
--- /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