final

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG

Files at this revision

API Documentation at this revision

Comitter:
abp123
Date:
Thu Oct 25 12:32:13 2018 +0000
Commit message:
final version;

Changed in this revision

BSP_DISCO_F746NG.lib Show annotated file Show diff for this revision Revisions of this file
LCD_DISCO_F746NG.lib Show annotated file Show diff for this revision Revisions of this file
Readme.md Show annotated file Show diff for this revision Revisions of this file
Resume.md Show annotated file Show diff for this revision Revisions of this file
TS_DISCO_F746NG.lib Show annotated file Show diff for this revision Revisions of this file
head.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
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