Hjælp til forklaring af C++ projekt.
Hejsa alle.Jeg er ved vejs ende af et skoleophold, hvor vi har haft fire uger til lære og lave et vejrkit i C/C++. Ved hjælp af et kit og pc, så kan man via knapper sætte vindstyrke, lufttryk og vindretning og på pc'en skal man sætte en grafisk system op (i tekstmode) og vise det på skærmen, samt lave en logfil.
Jeg har nu fået møget til at fungere (med meget hjælp fra forskellige kilder), men jeg frygter forsvaret af projektet der kommer en gang i næste uge. Jeg er nemlig i tvivl i en hel del af de funktioner og kommandoer der stå i projektet.
Så hvis en kunne være så elskværdig at skrive en linie eller to til hver lille ting der står (jeg ved det, kæmpe projekt) og forklare hvad de forskellige ting gør.
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <bios.h>
#include <dos.h>
#include <time.h>
#define COM1 0
#define COM2 1
#define SETTINGS _COM_4800 | _COM_CHR8 | _COM_STOP1 | _COM_NOPARITY
#define DataReady 0x100
//Global karakter
unsigned char InDat[4];
/*******************************************************/
/* Initialisering af seriel */
/*******************************************************/
void init(void)
{
_bios_serialcom(_COM_INIT, COM1, SETTINGS);
}
/*******************************************************/
/* Seriel funktion */
/*******************************************************/
void seriel(void)
{
init();
int status;
char i = 0; //S‘tter i til nul.
_bios_serialcom(_COM_RECEIVE, COM1, 0);
_bios_serialcom(_COM_SEND, COM1, 0x7F);
while(i < 3)
{
status = _bios_serialcom(_COM_STATUS, COM1, 0);
if(status & DataReady)
InDat[i++] = _bios_serialcom(_COM_RECEIVE, COM1, 0);
}
}
/*******************************************************/
/* Log */
/*******************************************************/
int log(float vh, float lt)
{
int handle;
char date[30], name[12];
static time_t oldtid;
time_t nytid;
struct time t;
struct date d;
gettime(&t);
getdate(&d);
nytid = time(NULL);
if (nytid > oldtid)
{
oldtid = nytid + 9;
textcolor(LIGHTGRAY);
gotoxy(45, 1);
cprintf("Sidst skrevet til logfilen: %02d:%02d:%02d\n", t.ti_hour, t.ti_min, t.ti_sec);
sprintf(date, "%02d:%02d:%02d;%.2f;%.2f\n", t.ti_hour, t.ti_min, t.ti_sec, vh, lt);
sprintf(name, "%4d%02d%02d.csv", d.da_year, d.da_mon, d.da_day);
handle = open(name, O_CREAT | O_WRONLY | O_APPEND | O_TEXT);
write(handle, date, strlen(date));
close(handle);
}
return(0);
}
/*******************************************************/
/* Sk‘rm Layout */
/*******************************************************/
void layout(void)
{
_setcursortype(_NOCURSOR);
textcolor(CYAN);
gotoxy(5, 3); cprintf("Beskrivelse af nuv‘rende vejrforhold:");
textcolor(LIGHTGREEN);
gotoxy(16, 9); cprintf("Vindhastighed:");
gotoxy(33, 9); cprintf("Tidspunkt:");
gotoxy(47, 9); cprintf("Luftryk:");
gotoxy(59, 9); cprintf("Tidspunkt:");
gotoxy(2, 11); cprintf("Nuv‘rende: ");
gotoxy(2, 12); cprintf("--------------------------------------------------------------------------");
gotoxy(2, 14); cprintf("Maksv‘rdi: ");
gotoxy(2, 15); cprintf("--------------------------------------------------------------------------");
gotoxy(2, 17); cprintf("Minimunv‘rdi: ");
gotoxy(2, 18); cprintf("--------------------------------------------------------------------------");
textcolor(YELLOW);
gotoxy(3, 20); cprintf("Vindhastigheden i forskellige enheder:");
textcolor(WHITE);
gotoxy(5, 23);
cprintf("0 1 2 3 4 5");
gotoxy(5, 25);
cprintf("0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0 2 4 6 8 0");
}
/*******************************************************/
/* Time */
/*******************************************************/
void time(void)
{
char klokken[12];
struct time t;
struct date d;
gettime(&t);
getdate(&d);
sprintf(klokken, "%02d:%02d:%02d\n", t.ti_hour, t.ti_min, t.ti_sec);
textcolor(LIGHTGRAY);
gotoxy(1, 1);
cprintf("%4d-%02d-%02d", d.da_year, d.da_mon, d.da_day);
gotoxy(14, 1); cprintf(klokken);
gotoxy(33, 11); cprintf(klokken);
gotoxy(60, 11); cprintf(klokken);
}
/*******************************************************/
/* Signal/Styrke/Forhold */
/*******************************************************/
void signal(float vh)
{
textcolor(CYAN);
if(vh < 0.3)
{
gotoxy(7, 6);
cprintf("Signal ' ' - Styrke '0' - 'Stille' ");
}
if(vh >= 0.3 & vh < 1.6)
{
gotoxy(7, 6);
cprintf("Signal ' ' - Styrke '1' - 'N‘sten stille' ");
}
if(vh >= 1.6 & vh < 3.40)
{
gotoxy(7, 6);
cprintf("Signal '1' - Styrke '2' - 'Svag vind' ");
}
if(vh >= 3.40 & vh < 5.50)
{
gotoxy(7, 6);
cprintf("Signal '1' - Styrke '3' - 'Let vind' ");
}
if(vh >= 5.50 & vh < 8.0)
{
gotoxy(7, 6);
cprintf("Signal '1' - Styrke '4' - 'J‘vn vind' ");
}
if(vh >= 8.0 & vh < 10.80)
{
gotoxy(7, 6);
cprintf("Signal '2' - Styrke '5' - 'Frisk vind' ");
}
if(vh >= 10.80 & vh < 13.90)
{
gotoxy(7, 6);
cprintf("Signal '2' - Styrke '6' - 'H†rd vind' ");
}
if(vh >= 13.90 & vh < 17.20)
{
gotoxy(7, 6);
cprintf("Signal '3' - Styrke '7' - 'Stiv kuling' ");
}
if(vh >= 17.20 & vh < 20.80)
{
gotoxy(7, 6);
cprintf("Signal '3' - Styrke '8' - 'H†rd kuling' ");
}
if(vh >= 20.80 & vh < 24.50)
{
gotoxy(7, 6);
cprintf("Signal '4' - Styrke '9' - 'Stormende kuling'");
}
if(vh >= 24.50 & vh < 28.50)
{
gotoxy(7, 6);
cprintf("Signal '4' - Styrke '10' - 'Storm' ");
}
if(vh >= 28.50 & vh < 32.80)
{
gotoxy(7, 6);
cprintf("Signal '5' - Styrke '11' - 'St‘rk storm' ");
}
if(vh > 32.80)
{
gotoxy(7, 6);
cprintf("Signal '5' - Styrke '12' - 'Orkan' ");
}
}
/*******************************************************/
/* Vind retning */
/*******************************************************/
void retning(char kompas)
{
textcolor(CYAN);
gotoxy(7, 5); cprintf("Det bl‘ser fra");
switch(kompas)
{
case 0x00: gotoxy(22, 5); cprintf("N "); break;
case 0x01: gotoxy(22, 5); cprintf("NNE"); break;
case 0x03: gotoxy(22, 5); cprintf("NE "); break;
case 0x02: gotoxy(22, 5); cprintf("ENE"); break;
case 0x06: gotoxy(22, 5); cprintf("E "); break;
case 0x07: gotoxy(22, 5); cprintf("ESE"); break;
case 0x04: gotoxy(22, 5); cprintf("SSE"); break;
case 0x0C: gotoxy(22, 5); cprintf("S "); break;
case 0x0D: gotoxy(22, 5); cprintf("SSW"); break;
case 0x0F: gotoxy(22, 5); cprintf("SW "); break;
case 0x0E: gotoxy(22, 5); cprintf("WSW"); break;
case 0x0A: gotoxy(22, 5); cprintf("W "); break;
case 0x0B: gotoxy(22, 5); cprintf("WNW"); break;
case 0x09: gotoxy(22, 5); cprintf("NW "); break;
case 0x08: gotoxy(22, 5); cprintf("NNW"); break;
}
}
/*******************************************************/
/* Max/min v‘rdier */
/*******************************************************/
void minmax(float vh, float lt)
{
static float minvh = 51, maxvh, minlt = 1100, maxlt;
char print1[25] = "", print2[25] = "", print3[25] = "", print4[25] = "", tid[12];
struct time t;
gettime(&t);
sprintf(tid, "%02d:%02d:%02d\n", t.ti_hour, t.ti_min, t.ti_sec);
if (vh < minvh)
{
minvh = vh;
sprintf(print1, "%6.2f m/s %s", minvh, tid);
}
if (vh > maxvh)
{
maxvh = vh;
sprintf(print2, "%6.2f m/s %s", maxvh, tid);
}
if(lt < minlt)
{
minlt = lt;
sprintf(print3, "%6.1f mBar %s", minlt, tid);
}
if(lt > maxlt)
{
maxlt = lt;
sprintf(print4, "%6.1f mBar %s", maxlt, tid);
}
textcolor(LIGHTGRAY);
gotoxy(17, 17); cprintf(print1);
gotoxy(17, 14); cprintf(print2);
gotoxy(45, 17); cprintf(print3);
gotoxy(45, 14); cprintf(print4);
}
/*******************************************************/
/* Udskrift af indkommende Data */
/*******************************************************/
float data(void)
{
char kompas, i;
float vh, lt, km, mi, knob;
i = (InDat[2] >> 2) & 0x03;
vh = (0.05 * (float)InDat[0]) + (12.75 * (float)i);
i = InDat[2] & 0x03;
lt = (0.29411 * (float)InDat[1]) + (75 * (float)i) + 800;
kompas = (InDat[2] >> 4) & 0x0F;
km = (vh * 3.6);
mi = ((float)vh * 2.24);
knob = ((float)vh * 1.94384617);
signal(vh);
retning(kompas);
minmax(vh, lt);
log(vh, lt);
textcolor(LIGHTGRAY);
gotoxy(17, 11); cprintf("%6.2f m/s", vh);
gotoxy(45, 11); cprintf("%6.1f mBar", lt);
textcolor(YELLOW);
gotoxy(5, 21); cprintf("Vinden bl‘ser med: %3.2f m/s. %3.2f km/t. %3.2f mi/t. %3.2f knob.", vh, km, mph, knob);
return(vh);
}
/*******************************************************/
/* M†lebar */
/*******************************************************/
void bar(float vh)
{
int i;
textcolor(BLACK);
gotoxy(5, 24);
for(i = 0; i < 75; i++)
cprintf("Û");
if(vh < 1.6)
{
gotoxy(5, 24);
textcolor(LIGHTBLUE);
cprintf("Û");
}
if(vh >= 2 & vh < 14)
{
gotoxy(5, 24);
textcolor(LIGHTBLUE);
cprintf("ÛÛ");
textcolor(LIGHTGREEN);
for(i = 2; i < vh; i++)
cprintf("Û");
}
if(vh >= 14 & vh < 29)
{
gotoxy(5, 24);
textcolor(LIGHTBLUE);
cprintf("ÛÛ");
textcolor(LIGHTGREEN);
cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛ");
textcolor(YELLOW);
for(i = 14; i < vh; i++)
cprintf("Û");
}
if(vh > 29)
{
gotoxy(5, 24);
textcolor(LIGHTBLUE);
cprintf("ÛÛ");
textcolor(LIGHTGREEN);
cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛ");
textcolor(YELLOW);
cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");
textcolor(RED);
for(i = 29; i < vh; i++)
cprintf("Û");
}
}
/*******************************************************/
/* MAIN */
/*******************************************************/
void main(void)
{
float vh;
clrscr();
while(!kbhit())
{
seriel();
time();
vh = data();
layout();
// log();
bar(vh);
}
}