-
Notifications
You must be signed in to change notification settings - Fork 0
/
project.c
186 lines (160 loc) · 3.67 KB
/
project.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/*
* main.c
*
* Created on: Aug 19, 2022
* Author: Omar Amr Mahmoud
* Group: 72
*/
#include <stdio.h>
#include <stdlib.h>
#include "prototypes.h"
int main(void){
vehicleState VS = {0.0,18.0,60.0,OFF,OFF,OFF}; //initial sensors readings & states
while(1){
main_menu(&VS.engine_state);
sensors_set_menu(&VS);
}
return 0;
}
void main_menu(char* eng_state){
while (1){
char choice;
printf("a. Turn on the vehicle engine\n");
printf("b. Turn off the vehicle engine\n");
printf("c. Quit the system\n");
fflush(stdout);
scanf(" %c",&choice);
switch(choice){
case 'a':
case 'A':
printf("\nTurn ON the vehicle engine\n\n");
*eng_state=ON;
return;
case 'b':
case 'B':
printf("\nTurn OFF the vehicle engine\n\n");
break;
case 'c':
case 'C':
printf("\nQuit the system\n\n");
exit(0);
default:
printf("Error, please choose a valid option!\n\n");
}
}
}
void sensors_set_menu(vehicleState* v_state){
while(1){
char choice;
printf("a. Turn off the engine\n");
printf("b. Set the traffic light color\n");
printf("c. Set the room temperature\n");
#if WITH_ENGINE_TEMP_CONTROLLER
printf("d. Set the engine temperature\n");
#endif
fflush(stdout);
scanf(" %c",&choice);
switch(choice){
case 'a':
case 'A':
return;
case 'b':
case 'B':
set_traffic_light(&v_state->vehicle_speed);//Set the traffic light color.
break;
case 'c':
case 'C':
set_room_temp(v_state); //Set the room temperature
break;
#if WITH_ENGINE_TEMP_CONTROLLER
case 'd':
case 'D':
set_engine_temp(v_state); //Set the engine temperature
#endif
break;
default:
printf("Error, please choose a valid option!\n\n");
continue;
}
if(v_state->vehicle_speed==30){
speed_protocol_30(v_state);
}
print_status(v_state);
}
}
void set_traffic_light(float *speed){
char trr_light;
printf("Enter the traffic light color: ");
fflush(stdout);
scanf(" %c",&trr_light);
switch(trr_light){
case 'g':
case 'G':
*speed = 100;
break;
case 'O':
case 'o':
*speed = 30;
break;
case 'R':
case 'r':
*speed = 0;
break;
default:
printf("An error has occurred !\n\n");
}
}
void set_room_temp(vehicleState* v_state){
float room_temperature;
printf("Enter room temperature value: ");
fflush(stdout);
scanf(" %f",&room_temperature);
if(room_temperature<10 || room_temperature>30){
v_state->AC_state=1;
v_state->room_temp=20;
}
else{
v_state->AC_state=0;
v_state->room_temp=room_temperature;
}
}
#if WITH_ENGINE_TEMP_CONTROLLER
void set_engine_temp(vehicleState* v_state){
float engine_temperature;
printf("Enter engine temperature value: ");
fflush(stdout);
scanf(" %f",&engine_temperature);
if(engine_temperature<100 || engine_temperature>150){
v_state->ETC_state=ON;
v_state->engine_temp=125;
}
else{
v_state->ETC_state=OFF;
v_state->engine_temp=engine_temperature;
}
}
#endif
void speed_protocol_30(vehicleState* v_state){
if(!v_state->AC_state){
v_state->AC_state=ON;
v_state->room_temp = v_state->room_temp*(5.0/4)+1;}
#if WITH_ENGINE_TEMP_CONTROLLER
if(!v_state->ETC_state){
v_state->ETC_state=ON;
v_state->engine_temp = v_state->engine_temp*(5.0/4)+1;
}
#endif
}
void print_status(vehicleState* v_state){
printf("\nEngine state:");
v_state->engine_state?printf("ON\n"):printf("OFF\n");
printf("AC: ");
v_state->AC_state?printf("ON\n"):printf("OFF\n");
printf("Vehicle Speed: %.2f Km/Hr\n",v_state->vehicle_speed);
printf("Room Temperature: %.2f\n",v_state->room_temp);
#if WITH_ENGINE_TEMP_CONTROLLER
printf("Engine Temperature Controller is ");
v_state->ETC_state?printf("ON\n"):printf("OFF\n");
#endif
printf("Engine Temperature: %.2f C\n\n",v_state->engine_temp);
}