Erklæring af variabler. Void indstil (Indstiller starttidspunkt og måleinterval).

Relaterede dokumenter
Indholdsfortegnelse:

Projekt - RoboNet Del Journal.

// Definition af porte og funktioner

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato:

Internt interrupt - Arduino

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007

ELCANIC A/S. ENERGY METER Type ENG110. Version Inkl. PC program: ENG110. Version Betjeningsvejledning

Start på Arduino og programmering

Programmering i C. Lektion september 2009

Programmering i C. Lektion oktober 2008

Bruger manual AGAM kontrolboks

const int disponibel_10= 10; const int disponibel_11= 11; const int disponibel_12= 12; const int blinkled = 13; // pin 13 er LED på NANO

Frederiksen. Brugsvejledning for GM-tæller X Aa X

QUICK START Updated:

Digital positioner type RE 3446

QUICK START Updated: 18. Febr. 2014

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

Fra programmering til mikroprocessor

LCD intro. LCD Character display-intro. Redigeret 4/6-2019

BRUGERMANUAL DAB DIGITAL RADIO

Video Projector Controller. Brugermanual

KOMPONENT BESKRIVELSE

E-PAD Bluetooth hængelås E-PAD Bluetooth padlock E-PAD Bluetooth Vorhängeschloss

SmartAir TS1000. Daglig brug

Programmeringskursus Kursusaften 3. Programmering for begyndere Brug af Arduino. Display. Kursusaften 3 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato:

Mircobit Kursus Lektion 4 (Du skal her vælge Lets Code Og herefter Block Editor.)

ninasoft Micro Temp. Vandtæt miniature temperatur datalogger.

Programmering i C Intro og grundlæggende C 5. marts 2007

Programmering i C. Lektion december 2008

Et alfabet er en ordnet mængde af bogstaver og andre tegn

BRUGERVEJLEDNING VER.

DAB+ adaptor. Kære kunde,

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

UniFeeder TM. Betjeningsvejledning

SVINGNING. 2 x 5,3 kw AC

Programmering i C Videre med C (2 af 4) 19. marts 2007

Brugermanual for styreskab Master Chain 4.0

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

Arduino Programmering

Microcontroller, Arduino

GSM SMS Modem MODEL: SA RTU-1 V1.01

BRUGSANVISNING BY0011 H610 CAL

up/ansi Eksamensspørgsmål

Indhold. Vejledning til ur - DGT 2010

Mircobit Kursus Lektion 1

Arduinostyret klimaanlæg Afsluttende projekt programmering C

Montage og brugsanvisning

Brugermanual. Aircondition og varmepumpe split system. Energiklasse A

Brug af digitale ind og udgange

ELCANIC A/S Counter Type CNT150 Version 2.00 Inkl. PC programmet: Cnt150 Version 3.00 Betjeningsvejledning

Præsentation af knapper

Brugervejledning. ComX brugervejledning version 4.1

STEVISON BLUETOOTH USB MICRO SD DAB+ FM DIGITAL RADIO

Programmering i C. Lektion september 2009

Mircobit Kursus Lektion 5 (Du skal her vælge Lets Code og nederst Microsoft Block Editor.)

STEVISON BLUETOOTH USB MICRO SD DAB+ FM DIGITAL RADIO

Projekt Når maskinen reagerer - Dataopsamling og aktuatorer

LabQuest Manual Til indsættelse af hukommelseskort (SD-kort) til at forøge dataloggerens hukomelse

X88. X88 er en GSM/SMS baseret fjernstyring med: 8 indgange 8 relæudgange Mulighed for temperaturføler

Programmering for begyndere Lektion 2. Opsamling mm

Operation Manual SMS Air Conditioner Remote Controller Model No.: SR-001

QUICKVEJLEDNING til 9-moduler. Montering

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

CANSAT & ARDUINO step by step

5-LCD FJERNBETJENING. Batterierne skal bortskaffes separat i de særlige batteriaffaldsbeholdere.

Vejledning til betjening af knapper & display

Betjeningsvejledning. SMS modul

Fable Kom godt i gang

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

PERFECT JUMP Böttcher Tomschke Video Hopmålesystem BUOY-X/Y-CO-ORDINATES Installation til Software Version 6.0 GTK 1997

TRÆNINGS COMPUTER PEAK FITNESS R99

QUICKVEJLEDNING til multiguard DIN6. Montering

Example sensors. Accelorometer. Simple kontakter. Lysfølsomme. modstande. RFID reader & tags. Temperaturfølsomme. Flex Sensor.

Programmering i C. Lektion september 2009

Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

QUICKVEJLEDNING til multiguard Master IO. Montering

Konfiguration af BOOX Nova. Der tages forbehold for trykfejl og ændringer i producentens / Googles software.

Help / Hjælp

TS1000 Quick Guide. Daglig brug

Analoge indgange og A/D konvertering. Analoge udgange

Bredbånds-TV. Brugervejledning. ComX brugervejledning version 4.0

Kom godt i gang med Fable-robotten

Manuel opsætning af trådløse højttalere/subwoofere med BeoLab Transmitter 1

Hurtigbrugsanvisning til Dynomet 6.31 for Windows 7

TM4 Central Station. User Manual / brugervejledning K2070-EU. Tel Fax

Quick Setup Guide SB168-ES og M7CL Dansk version

Alt elektronik heri er købt via og arduino udviklingssoftware er hentet fra

1. Manuel og automatisk registrering af punkter Her gennemgås hvordan punkter optages manuelt eller automatisk. Fra køreskærmen trykkes på Værktøj

Infrarød fjernbetjening

Start af nyt schematic projekt i Quartus II

Brugervejledning for Modtager RX 300

Side 1. Installationsvejledning for. systemet. Version 1 December 2004

PC-Logging System MTD-Log. for. NS-Proces-Alarm. ninasoft

Rev.00/2014 BRUGER MANUAL. Universal fjernbetjening for aircon og varmepumpe anlæg COD G

Brugervejledning. Fjernbetjening display MT-5

GSM kontakt med temperaturføler. GSM kontakt med strømsvigt og temperaturføler funktion

Ved indkøring påtrykkes en kendt amplitude (HUSK 50 ohms afslutning) og displayet aflæses.

BH280/BH380 Aflang skærm Brugervejledning

Ofte stillede spørgsmål til Smart Pianist

Transkript:

Indholdsfortegnelse til Bilag 1.: Side 1: Include filer. Side 1: Erklæring af variabler. Side 2: Void indstil (Indstiller starttidspunkt og måleinterval). Side 3: Void indstil (Indstiller starttidspunkt og måleinterval). Side 4: Void indstil (Indstiller starttidspunkt og måleinterval). Side 5: Void indstil (Indstiller starttidspunkt og måleinterval). Side 5: void init (Initialiserer programmet). Side 6: indstil (indstiller ur og måleinterval). Side 6: void timer (Timer tæller sec og sekund 1 op hvert sekundt). Side 6: int input (Konvertere analoge input) Side 7: int input (Konvertere analoge input) Side 8: int output (Udskriver gemte data på Pcen). Side 9: void display (Viser forskellige ting på P5) Side 10: void display (Viser forskellige ting på P5) Side 11: void display (Viser forskellige ting på P5) Side 12: void display (Viser forskellige ting på P5) Side 12: int reset Side 13: void main

//Programnavn: Dataopsamling //Programmør: Ole Rud, Klaus Jørgensen & Jacob Clausen //Dato: 02. Dec. 2002 til 20. Dec. 2002 //Version: 1.0 //Program til opsamling af data fra temperaturmåler //Gemmer opsamlede data sammen med tidregistrering //Viser data på pc'en ved forespørgsel #pragma debug #include <reg515.h> //Definerer Flag osv i microprocessoren #include <stdio.h> //Til printf #include <stdlib.h> //Til random funktionen struct temperaturmaalingsstruct //Repræsenterer en dataopsamling med: unsigned int tid; //Tidsregistrering int pt1000; //Temperaturen fra PT1000'eren i grader C int lm35; //Temperaturen fra LM35'eren i grader C ; xdata struct temperaturmaalingsstruct maalinger[1000] _at_ 0x0000; //Et array af temperaturmålingstructen med 1000 pladser unsigned int sec, frac; //Variabler, brugt af timeren unsigned int starttime,startminut=0; //Start tidspunktet unsigned int mint = 1; //Måle interval unsigned int sekund = 0; //Antallet af sekunder siden start char warning = 0; //Warning er en variabel der er 1 når ram er fuld char w2=0, w3=0; //Hjælpevariabler til infernoet af vildskab 1

void indstil() //Funktion: Indstiller starttidspunkt og måleinterval //Modtager: Tstetryk fra brugeren //Sender: Sætter starttime, startminut og mint int temp = 0,finnish = 0; //variabler til hjælp med indstilling af systemet int i; //tællevariabel til pauserne :) printf("\f***************************************************************************\n"); printf("* Welcome to program **TempCheck** ver. 1b *\n"); printf("* *\n"); printf("* ^^ ^^ *\n"); printf("* (o)(o) *\n"); printf("* *\n"); printf("****************----mmm-------------()-------------mmm-----******************\n\n\n"); printf("take a moment to setup the program.\n"); printf("sit back and follow the instructions on the screen\n\n\n"); printf("to setup the time, press the left button to select hours and minuttes. \n"); printf("and press the right button to accept\n"); printf("\nhour: %02.d",temp); while(!finnish) //Så længe vi ikke er færdige... for(i=0;i<32000;i++); //Pause for at undgå at systemet tæller mere end en op ved hvert tryk if((p1&2)==0) //Hvis knap Right er trykket ned (=færdig med indstilling af timer) starttime = temp; //StartTime sættes lig med det sidst på skærmen viste timetal finnish = 1; //finnish = 1 (=færdig med indstilling af timer) 2

else if ((P1&1)==0) //Hvis knap Left er nede (=timer skal tælles en op) if (temp < 23) //Hvis timer er under 24: temp++; //skal timer tælles en op printf("\b\b%02.d",temp); //og det nye timetal vises på skærmen else //hvis timer er over 24 temp = 0; //starter timer fra 0 igen printf("\b\b%02.d",temp); //og nul udskrives //----------------------Nu til indstilling af minutter temp = 0; //minutter skal starte ved 0 finnish = 0; //vi er ikke færdige med minutter endnu printf("\n\nminuttes: %02.d",temp); while(!finnish) //så længe vi ikke er færdige for(i=0;i<16000;i++); //pause if((p1&2)==0) //Hvis knap Right er trykket ned (=færdig med indstilling af minutter) startminut = temp; //StartMinut sættes lig med det sidst på skærmen viste timetal finnish = 1; //finnish = 1 (=færdig med indstilling af minutter) else if ((P1&1)==0) //hvis knap Left er trykket ned: if (temp < 59) //Hvis minutter er under 59: temp++; //skal minutter tælles en op printf("\b\b%02.d",temp); //og det nye minuttal vises 3

else //Hvis minutter er 60: temp = 0; //starter minut ved 0 igen printf("\b\b%02.d",temp); //og nul udskrives printf("\n\n\nstartime is %02.d : %02.d\n",startTime,startMinut); //--------------------------------Nu til indstilling af måle interval printf("\nsetup measuring interval\n"); temp = mint; //måleinterval skal starte ved 1 finnish = 0; //vi er ikke færdige printf("\nseconds: %02.d",temp); while(!finnish) //så længe vi ikke er færdige for(i=0;i<24000;i++); //pause if((p1&2)==0) //Hvis knap Right er trykket ned (=færdig med indstilling af måle interval) mint = temp; //mint sættes lig med det sidst på skærmen viste interval finnish = 1; //finnish = 1 (=færdig med indstilling af interval) else if ((P1&1)==0) //Hvis knap Left er trykket ned: if (temp < 60) //Hvis intervallet er under 60 sekunder if (temp < 5) //hvis intervallet er under 5 sekunder temp++; //skal intervallet tælles en op printf("\b\b%02.d",temp); //og det nye interval vises på skærmen 4

else //hvis intervallet er 5: temp = temp + 5; //skal intervballet tælles 5 op printf("\b\b%02.d",temp); //og det nye interval vises else //hvis intervallet er 60 temp = mint; //startes forfra ved 1 igen printf("\b\b%02.d",temp); //og et skrives ud printf("\n\nthank you! Measureing will happen every %d second(s) now",mint); void init() //Funktion: Initialiserer programmet; //Modtager: Intet (bliver kaldt af main) //Sender: Sætter flag og variabler og Kalder Indstil printf("press the right button when ready..."); while((p1&2)!=0); //Venter på brugeren melder sig klar ved tryk på knap R (f.eks. kan det anbefales at //sklifte til hyperterminal) P5 = 0; //Displayet slukkes for at vise at programmet er igang TI = 1; //Seriel interrupt transfer interrupt enables ADM = 0; //Fortløbende konvertering slås fra (ADC'en konverterer kun ved forespørgsel) MX2 = 0; //Analog indgang vælges MX1 = 0; // - - MX0 = 0; // - - 5

indstil(); //Funktionen der indstiller ur og måleinterval EAL = 1; //Enabler generel interrupt(nødvendigt for timeren) TR0 = 1; //Enabler timer0 ET0 = 1; //Enabler timer0 interrupt TMOD = 2; //vælger 8-bit auto reload timer TH0 = 6; //Sætter timer start til 6 bit ==> timeren kalder interrupt hvert 250us frac = 0; //Variabel brugt af timeren sec = 0; // - - void timer() interrupt 1 //Funktion: Timer tæller sec og sekund 1 op hvert sekundt //Modtager: Intet (bliver kaldt af hardwaren via interrupt) //Sender: Sætter sekundvariablerne if (frac++ == 4000) //frac tælles en op og ved 4000 (4000 * 250us = 1 sekund): sec++; //tælles sekundvariablerne 1 op sekund++; frac=0; //og starter forfra int input(int i) //Funktion: Konvertere analoge input (temperaturerne) og gemmer dem // i ram sammen med tidsstempel en gang pr måle interval //Modtager: Variabel der peger på den næste ledige plad i ram //Sender: Variabel der peger på den næste ledige plad i ram int t; 6

if (i<10) //hvis der er flere ledige pladser i ram if(sec>=mint) //hvis det er mint sekunder siden sidste indlæsning MX0=1; MX2=0; //vælger analog indgang 1 (PT1000) DAPR=0; //starter konvertering while(bsy); //venter på konvertering er slut t=addat; maalinger[i].pt1000=((t*10)/51)-10; //omregner konverteringsresultat til grader celcius og gemmer i ram MX0=0; MX2=1; //vælger analog indgang 4 (LM35) DAPR=0; //starter konvertering while(bsy); //venter på konvertering er slut t= ADDAT; maalinger[i].lm35=((t*6)/51)+5; //omregner konverteringsresultat til grader celcius og gemmer i ram maalinger[i].tid=sekund; //gemmer tidsstempel sec = 0; //nulstiller sekundtælleren så der går mint sekunder inden næste indlæsning i++; //sætter i til at pege på den næste ledige plads i ram else if (!warning) //hvis der ikke er flere ledige pladser i ram OG warning ikke er sat printf("\n\n%s\n\n","memory is full!! Measuring has been stopped \a\a\a\a\n"); printf("\nplease press the left button to download data and start measuring again\a\n\a"); warning = 1; //sætter warning til 1, så advarslen kun printes en gang return i; int output(int ramstatus) //Funktion: Udskriver gemte data på PCen (helst i hyperterminal :o) //Modtager: Variabel der peger på den næste ledige plad i ram //Sender: Variabel der peger på den næste ledige plad i ram ("0") 7

int i,time,minut,sekund; printf("\nall data is now being printed on the screen"); printf("\nnotice that measuring is stopped while printing"); printf("\n Tid \t\tpt1000 \t\tlm35\n"); //kolonne overskrifter udskrives for(i=0;i<ramstatus;i++) //løkke der kører en gang for hvert entry i ram time = maalinger[i].tid / 3600; //time sættes til antallet af timer i tidsstemplet time = time + starttime; //time lægges til starttime maalinger[i].tid = maalinger[i].tid % 3600; //tidsstempel sættes til rest efter timerne er trukket fra minut = maalinger[i].tid / 60; //minut sættes til antallet af minutter i tidstemplet minut = minut + startminut; //minut lægges til startminut if (minut >= 60) //hvis minut bliver over 60: minut = minut - 60; //trækkes 60 fra minut time++; //og time tælles en op if (time >= 24) //Hvis time bliver over 24 time = time - 24; //trækkes 24 fra time maalinger[i].tid = maalinger[i].tid % 60; //tidsstempel sættes til rest efter minutterne er trukket fra sekund = maalinger[i].tid; //sekund sættes til resten af tidsstemplet printf("%02.d:%02.d:%02.d \t %d \t\t %d \n",time,minut,sekund, maalinger[i].pt1000, maalinger[i].lm35); //en måling skrives ud på en linie warning = 0; //warnnig sættes til 0 ligemeget forhenværende status sec = 0; //Efter udskrivning skal måleintervallet beregnes fra ny return 0; //Variabel der peger på den næste ledige plad i ram = 0 ==> vi starter forfra med at skrive i ram 8

void display(int i) //Funktion: Viser forskellige ting på P5 // P4 vælger hvad der skal vises // Medmindre der er warning, så skal P5 blinke i et inferno af vildskab //Modtager: Variabel der peger på den næste ledige plad i ram //Sender: Forskellige lysdesigns på P5 int j; if (!warning) if (P4==0) //alle off ==> P5=ramstatus P5=(i/3.92156); //Ved fuld ram (1000) vises 255 (lys i alle 8 dioder) if (P4==1) //1on ==> P5 = PT1000temp binært if (maalinger[i-1].pt1000 >= 0) //Hvis temperaturen er over 0: P5=maalinger[i-1].pt1000; //vises den på P% else P5=0-maalinger[i-1].pt1000+128; //ellers vises den med lys i den 8. diode for at indikere negativ temperatur if (P4==3) //2on ==> P5 = LM35temp binært P5=maalinger[i-1].lm35; //Temperaturen vises på P5 if (P4==7) //3on ==> P5 = forskel mellem LM35 og PT1000 if (maalinger[i-1].lm35 > maalinger[i-1].pt1000) //Hvis LM35 er størst: P5 = maalinger[i-1].lm35 - maalinger[i-1].pt1000; //vises forskellen else P5 = maalinger[i-1].lm35 - maalinger[i-1].pt1000 + 128; //ellers vises forskellen med lys i den 8. diode for at indikere at der er koldere indendørs end udendørs!!! 9

if (P4==255) //8 on ==> P5 = NightRider int n; P5=1; //P5 starter med at være 1 (=lys i 1. diode) for (n=0;n<8;n++) //7 gange: for(j=0;j<8000;j++);//pause P5=P5*2; //P5 fordobles ==> lyset flytter en tak til højre P5=128; //P5 er nu 128 (=lys i 8. diode) for (n=0;n<8;n++) //7 gange: for(j=0;j<8000;j++);//pause P5=P5/2; //P5 halveres ==> lyset flytter en tak til venstre if (P4==127) //7 on ==> P5 = NightRider2 int n,p; p=1; //p starter med at være 1 P5=~p; //P5 = den inverterede værdi af p ==> lys i alle dioder undtagen den 1. for (n=0;n<8;n++) //7 gange: for(j=0;j<8000;j++);//pause p=p*2; //p fordobles P5=~p; //P5 = den inverterede værdi af p ==> det slukkede lys flytter en tak til højre p=128; //p er nu 128 P5=~p; //P5 = den inverterede værdi af p ==> kun den 8. diode er slukket for (n=0;n<8;n++) //7 gange: 10

for(j=0;j<8000;j++);//pause p=p/2; //p halveres P5=~p; //P5 = den inverterede værdi af p ==> det slukkede lys flytter en tak til venstre else //altså hvis warning er 1(=ram er fuld) vises det med følgende lys-inferno: // //w2 tæller 10 gange og w3 er et tilfældigt tal mellem 0 og 4 if (w2 < 10 && w3==0) //så længe w2 er under 10 og P5=15; //P5=15 ==> de fire dioder til venstre lyser P5=240; //P5=250 ==> de fire dioder til højre lyser w2++; //w2 tælles en op else if (w2 < 10 && w3==1) //så lønge w2 er under 10 og w3 er 1: P5=170; //P5=170 ==> første diode lyser, derefter skiftes on/off P5=85; //P5=85 ==> første diode slukket, derefter skiftes on/off w2++; //w2 tælles en op else if (w2 < 10 && w3==2) //så længe w2 er under 10 og w3 er 2: P5=0; //P5=0 ==> alle dioder slukket P5=255; //P5=255 ==> alle dioder lyser w2++; //w2 tælles en op 11

else if (w2 < 10 && w3==3) //så længe w2 er under 10 og w3 er 3: P5=195; //P5=195 ==> de fire yderste dioder lyser P5=60; //P5=60 ==> de fire inderste dioder lyser w2++; //w2 tælles en op else if (w2 < 10 && w3==4) //så længe w2 er under 10 og w3 er 4: P5=204; //P5=204 ==> to dioder lyser, næste to er slukket osv P5=51; //P5=51 ==> to dioder slukket, næste to lyser osv w2++; //w2 tælles en op else //hvis w2 er 10 (=der er blevet blinket 10 gange) w3 = rand() % 5; //w3 sættes til et nyt tilfældigt tal w2 = 0; //w2 starter ved 0 igen int reset() //Funktion: Nulstiller apparatet ved at kalde init og sætte ramstatus tælleren til 0 //Modtager: Intet (bliver kaldt af main) //Sender: Sætter variablen der peger på næste ledige ram-plads til 0 init(); //Kalder initialiseringsfunktionen return 0; //Sætter variablen der peger på næste ledige ram-plads til 0 12

void main() //Funktion: Starter programmet og holder det igang :) //Modtager: Intet (startes automatisk) //Sender: Sender variablen der peger på næste ledige ram-plads til flere funktioner int ramstatus = 0; //ramstatus = 0 ==> vi starter fra bunden i rammen init(); //Initialiserer programmet while(1) //uløkke :) display(ramstatus); //Viser ting på P5 ramstatus = input(ramstatus); //Gemmer ting i ram if((p1&4)==0) //Hvis knap Reset er trykket ned ramstatus = reset(); //genstartes systemet if((p1&1)==0) //Hvis knap Left er trykket ned ramstatus = output(ramstatus); //udskrives ting fra ram 13