Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<ctype.h>
- #include<conio.h>
- #define CLS system("cls")
- struct Sprinkler {
- int state;
- int temperatureEffect;
- int humidityEffect;
- };
- struct Radiator {
- int state;
- int temperatureEffect;
- };
- struct Vent {
- int state;
- int temperatureEffect;
- int humidityEffect;
- int draughtEffect;
- };
- void initialize(void);
- void screen(void);
- void input(void);
- void OpenScreen(void);
- int get_opt(int, int, char *, int, int);
- int inv_opt(char *, int, int);
- int get_cur(int, int, char *);
- int inv_cur(char *);
- int hilimit(int);
- int lolimit(int);
- void tmpcontrol(void);
- void humcontrol(void);
- void wincontrol(void);
- void toohot(void);
- void toocold(void);
- void toohum(void);
- void toodry(void);
- void toowin(void);
- void alarm(char);
- int resetflag = 0, quitflag = 0;
- int optmp = 0, ophum = 0, opwin = 0;
- int cutmp = 0, cuhum = 0, cuwin = 0;
- struct Sprinkler sprinklers[2];
- struct Radiator radiators[4];
- struct Vent vents[5];
- int main()
- {
- while (quitflag == 0)
- {
- initialize();
- screen();
- input();
- while ((resetflag == 0) && (quitflag == 0))
- {
- screen();
- // Temperature Control
- do
- {
- cutmp = get_cur(20, 9, "Temperature");
- } while (cutmp == -1);
- tmpcontrol();
- // Humidity Control
- if ((quitflag == 0) && (resetflag == 0))
- {
- screen();
- do
- {
- cuhum = get_cur(20, 9, "Humidity");
- } while (cuhum == -1);
- humcontrol();
- }
- // Draught Control
- if ((quitflag == 0) && (resetflag == 0))
- {
- screen();
- do
- {
- cuwin = get_cur(20, 9, "Draught");
- } while (cuwin == -1);
- wincontrol();
- }
- }
- }
- return 0;
- }
- void OpenScreen(void)
- {
- CLS;
- fflush(stdin);
- }
- void screen(void)
- {
- OpenScreen();
- putchar(26);
- gotoxy(23, 1);
- printf("***** Green House Status *****");
- gotoxy(9, 3);
- printf("Sprinklers Radiators Vents");
- gotoxy(9, 5);
- printf("SP1 SP2 R1 R2 R3 R4 V1 V2 V3 V4 V5");
- gotoxy(9, 6);
- printf("--- --- -- -- -- -- -- -- -- -- --");
- gotoxy(9, 7);
- printf(" %d %d %d %d %d %d %d %d %d %d %d",
- sprinklers[0].state, sprinklers[1].state, radiators[0].state, radiators[1].state, radiators[2].state, radiators[3].state,
- vents[0].state, vents[1].state, vents[2].state, vents[3].state, vents[4].state);
- gotoxy(9, 11);
- printf(" Optimum Optimum Optimum");
- gotoxy(9, 12);
- printf("Temperature Humidity Draught");
- gotoxy(9, 13);
- printf(" %2d %2d %2d",
- optmp, ophum, opwin);
- gotoxy(9, 16);
- printf(" Current Current Current");
- gotoxy(9, 17);
- printf("Temperature Humidity Draught");
- gotoxy(9, 18);
- printf(" %2d %2d %2d",
- cutmp, cuhum, cuwin);
- gotoxy(9, 22);
- printf("Key: Rads/Sprnk 0=Off,1=On. Vents 0=Shut,1/2=Half/Full Open.");
- }
- int get_opt(int x, int y, char *strng, int min, int max)
- {
- char ip[10];
- int op;
- gotoxy(x, y);
- printf(" ");
- gotoxy(x, y);
- printf("Enter Optimum %s (%d-%d) : ", strng, min, max);
- fflush(stdin);
- gets(ip);
- op = inv_opt(ip, min, max);
- return op;
- }
- int inv_opt(char *strng, int min, int max)
- {
- int op;
- char *p;
- p = strng;
- while (*p != NULL)
- {
- if (!(isdigit(*p)))
- return 0;
- p++;
- }
- op = atoi(strng);
- if ((op < min) || (op > max))
- {
- return 0;
- }
- else
- {
- return op;
- }
- }
- int get_cur(int x, int y, char *strng)
- {
- char ip[10];
- int op;
- gotoxy(x, y);
- printf(" ");
- gotoxy(x, y);
- printf("Enter Current %s (Q)uit or (R)eset : ", strng);
- fflush(stdin);
- gets(ip);
- op = inv_cur(ip);
- return op;
- }
- int inv_cur(char *strng)
- {
- int op;
- char *p;
- p = strng;
- while (*p != NULL)
- {
- if ((*p == 'q') || (*p == 'Q'))
- {
- quitflag = 1;
- exit();
- }
- else if ((*p == 'r') || (*p == 'R'))
- {
- resetflag = 1;
- }
- else if (!(isdigit(*p)))
- {
- return -1;
- }
- p++;
- }
- op = atoi(strng);
- return op;
- }
- void initialize(void)
- {
- resetflag = quitflag = 0;
- optmp = ophum = opwin = 0;
- cutmp = cuhum = cuwin = 0;
- // Initialize sprinklers
- sprinklers[0].state = 0;
- sprinklers[0].temperatureEffect = -2;
- sprinklers[0].humidityEffect = 2;
- sprinklers[1].state = 0;
- sprinklers[1].temperatureEffect = -2;
- sprinklers[1].humidityEffect = 2;
- // Initialize radiators
- radiators[0].state = 0;
- radiators[0].temperatureEffect = 2;
- radiators[1].state = 0;
- radiators[1].temperatureEffect = 2;
- radiators[2].state = 0;
- radiators[2].temperatureEffect = 2;
- radiators[3].state = 0;
- radiators[3].temperatureEffect = 2;
- // Initialize vents
- vents[0].state = 0;
- vents[0].temperatureEffect = 1;
- vents[0].humidityEffect = 1;
- vents[0].draughtEffect = -1;
- vents[1].state = 0;
- vents[1].temperatureEffect = 1;
- vents[1].humidityEffect = 1;
- vents[1].draughtEffect = -1;
- vents[2].state = 0;
- vents[2].temperatureEffect = 1;
- vents[2].humidityEffect = 1;
- vents[2].draughtEffect = -1;
- vents[3].state = 0;
- vents[3].temperatureEffect = 1;
- vents[3].humidityEffect = 1;
- vents[3].draughtEffect = -1;
- vents[4].state = 0;
- vents[4].temperatureEffect = 1;
- vents[4].humidityEffect = 1;
- vents[4].draughtEffect = -1;
- }
- void input(void)
- {
- do
- {
- optmp = get_opt(20, 9, "Temperature", 5, 99);
- } while (optmp == 0);
- do
- {
- ophum = get_opt(20, 9, "Humidity", 5, 99);
- } while (ophum == 0);
- do
- {
- opwin = get_opt(20, 9, "Draught", 5, 20);
- } while (opwin == 0);
- }
- int hilimit(int opt)
- {
- if (opt < 10)
- {
- return opt + 2;
- }
- else if (opt >= 10)
- {
- return opt + (opt * 0.1) + 1;
- }
- return 0;
- }
- int lolimit(int opt)
- {
- if (opt < 10)
- {
- return opt - 2;
- }
- else if (opt >= 10)
- {
- return opt - (opt * 0.1);
- }
- return 0;
- }
- void tmpcontrol(void)
- {
- if (cutmp >= max)
- {
- toohot();
- }
- else if (cutmp <= min)
- {
- toocold();
- }
- }
- void humcontrol(void)
- {
- if (cuhum >= max)
- {
- toohum();
- }
- else if (cuhum <= min)
- {
- toodry();
- }
- }
- void wincontrol(void)
- {
- if (cuwin >= max)
- {
- toowin();
- }
- }
- void toohot(void)
- {
- while ((cutmp >= max) && (resetflag == 0))
- {
- switch (radoff())
- {
- case 0:
- switch (venthopen('t'))
- {
- case 0:
- switch (ventfopen('t'))
- {
- case 0:
- switch (sprnkon('t'))
- {
- case 0:
- alarm('t');
- break;
- }
- break;
- }
- break;
- }
- break;
- }
- }
- }
- void toocold(void)
- {
- while ((cutmp <= min) && (resetflag == 0))
- {
- switch (venthclos('t'))
- {
- case 0:
- switch (ventfclos('t'))
- {
- case 0:
- switch (sprnkoff('t'))
- {
- case 0:
- switch (radon())
- {
- case 0:
- alarm('c');
- break;
- }
- break;
- }
- break;
- }
- break;
- }
- }
- }
- void toohum(void)
- {
- while ((cuhum >= max) && (resetflag == 0))
- {
- switch (sprnkoff('h'))
- {
- case 0:
- switch (venthopen('h'))
- {
- case 0:
- switch (ventfopen('h'))
- {
- case 0:
- alarm('h');
- break;
- }
- break;
- }
- break;
- }
- }
- }
- void toodry(void)
- {
- while ((cuhum <= min) && (resetflag == 0))
- {
- switch (sprnkon('h'))
- {
- case 0:
- switch (venthclos('h'))
- {
- case 0:
- switch (ventfclos('h'))
- {
- case 0:
- alarm('d');
- break;
- }
- break;
- }
- break;
- }
- }
- }
- void toowin(void)
- {
- while ((cuwin >= max) && (resetflag == 0))
- {
- switch (venthclos('d'))
- {
- case 0:
- switch (ventfclos('d'))
- {
- case 0:
- alarm('w');
- break;
- }
- break;
- }
- }
- }
- void alarm(char mode)
- {
- putchar(26);
- gotoxy(30, 11);
- printf("*** Warning ! ***");
- gotoxy(34, 13);
- switch (mode)
- {
- case 't':
- printf("Too Hot !");
- break;
- case 'd':
- printf("Too Dry !");
- break;
- case 'c':
- printf("Too Cold !");
- break;
- case 'h':
- printf("Too Humid !");
- break;
- case 'w':
- printf("Too Draughty !");
- break;
- }
- gotoxy(25, 15);
- printf("Environment Limits Exceeded !");
- gotoxy(28, 17);
- printf("Attend Fault and Reset !");
- resetflag = 1;
- getch();
- }
Advertisement
Comments
-
- Fails with 10 errors (undef symbols) Also you can't use // comments on TC DOS has to be K&R style /*---*/
-
- Honestly, why are you even using the extremely depreciated conio? I want to rewrite this using C99, but I have bigger fish to fry at the moment. Do you have a github or gitlab we can collab on?
Add Comment
Please, Sign In to add comment
Advertisement