-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
353 lines (328 loc) · 10.9 KB
/
Copy pathmain.cpp
File metadata and controls
353 lines (328 loc) · 10.9 KB
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
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
#include "mbed.h"
#include <cstdio>
//note definitions for buzzer
#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523
/* I N P U T S */
DigitalIn Button1(PC_10);
DigitalIn Button2(PC_11);
DigitalIn Button3(PD_2);
AnalogIn PTMeter1(PA_5);
AnalogIn PTMeter2(PA_6);
AnalogIn PTMeter3(PA_7);
AnalogIn LDR(PC_2);
AnalogIn TS(PC_3);
AnalogIn FSR(PA_1);
BufferedSerial pc(USBTX, USBRX);
/* O U T P U T S */
DigitalOut LEDRED(PC_0);
DigitalOut LEDGREEN1(PC_1);
DigitalOut LEDGREEN2(PB_0);
DigitalOut LEDGREEN3(PA_4);
PwmOut MCLED1R(PB_3);
PwmOut MCLED2B(PB_4);
PwmOut MCLED3G(PB_5);
PwmOut Buzzer(PA_15);
/* A B C D E F G */
BusOut SegDis(PA_11, PA_12, PB_1, PB_15, PB_14, PB_12, PB_11);
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
int hexDis[] = {0x3F, 0x06, 0x5B, 0X4F, 0X66, 0X6D, 0X7D, 0X7, 0XFF, 0X67, 0x77, 0xFF, 0X39, 0X3F, 0X79, 0X71};
/* Buzzer NOTES */
const int C_major_scale[] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5};
/* FUNCTION DECLARTION */
void init_buttons();
void init_leds();
void SegDis_init();
int powerCheck();
int button2check();
void button3check();
void fptMeter1check();
void fptMeter2check();
void fptMeter3check();
void watertemp();
int tempWarn();
int forceWarn();
void sensors();
void warning();
void run();
void play_note(int frequency);
/* VARIABLE DECLARATION */
float LDR_val = 0.0;
float TMP_val_F = 0.0;
float FSR_val = 0.0;
float TMP_val_C =0.0;
float TMP_val_C_user =0.0;
int lastButton1Stats;
int currentButton1Stats;
int button1stats;
int cntl_val = 0;
int timer =0;
bool coldwater ;
bool warmwater ;
bool hotwater;
char mode;
/* MAIN PROGRAM */
int main()
{
init_buttons();
while (true){
powerCheck();
if(powerCheck()==1){
button2check();
button3check();
fptMeter1check();
fptMeter2check();
fptMeter3check();
watertemp();
tempWarn();
warning();
forceWarn();
sensors();
run();
}
}
}
/* FUNCTIONS */
void SegDis_init(){
SegDis.write(0x00); //turn off the display by setting all segments to '0'
ThisThread::sleep_for(200ms);
}
void init_buttons(){
Button1.mode(PullNone); //turn off internal pull up / pull down resistors
Button2.mode(PullNone);
Button3.mode(PullNone);
}
void init_leds(){ //turn off leds
LEDGREEN1.write(0);
LEDGREEN2.write(0);
LEDGREEN3.write(0);
LEDRED.write(0);
MCLED1R.write(0);
MCLED3G.write(0);
MCLED2B.write(0);
}
int powerCheck(){ // FOR TURNING ON/OFF THE BOARD.
lastButton1Stats = currentButton1Stats;
currentButton1Stats = Button1;
if(lastButton1Stats == 1 && currentButton1Stats ==0 ){
if (LEDGREEN1.read() ==0){
LEDGREEN1.write(1);
button1stats=1;
printf("*****POWER ON - SELECT MODE, TEMPERATURE AND TIME*****\n");
for(int i = 0; i < 5; i++){ //Buzzer
play_note(C_major_scale[i]);
}
Buzzer.pulsewidth_us(0);
}
else {
init_leds();
SegDis_init();
button1stats=0;
printf("POWER OFF\n");
for(int i = 5; i > 0; i--){ //buzzer
play_note(C_major_scale[i]);
}
Buzzer.pulsewidth_us(0);
}
}
return button1stats;
}
int button2check(){ // BUTTON 2 CHECK.
if(Button2.read() == 1){
play_note(C_major_scale[2]);
Buzzer.pulsewidth_us(0);
LEDRED.write(1);
return 1;
}
else {
LEDRED.write(0);
return 0;}
}
void button3check(){ // BUTTON 3 CHECK.
}
void fptMeter1check(){ // FOR POTENTIOMETER 1.
cntl_val = PTMeter1.read_u16()/25000;
if(cntl_val == 0){
SegDis.write(hexDis[12]);
mode = 'C';
printf("*****MODE C SELECTED.*****\n");
}
if(cntl_val == 1){
SegDis.write(hexDis[11]);
mode = 'B';
printf("*****MODE B SELECTED.*****\n");
}
if(cntl_val == 2){
SegDis.write(hexDis[10]);
mode = 'A';
printf("*****MODE A SELECTED.*****\n");
}
ThisThread::sleep_for(500ms);
}
void fptMeter2check(){ // FOR POTENTIOMETER 2.
cntl_val = PTMeter2.read_u16()/25000;
if(cntl_val == 0){
SegDis.write(hexDis[6]);
timer = 3600000; // 60min = 3600000ms
printf("*****TIME SET TO 60 MINUTES*****\n");
}
if(cntl_val == 1){
SegDis.write(hexDis[4]);
timer = 2400000; // 40min = 2400000ms
printf("*****TIME SET TO 40 MINUTES*****\n");
}
if(cntl_val == 2){
SegDis.write(hexDis[2]);
timer = 1200000; // 20min = 1200000ms /// 12 seconds is used for the test video.
printf("*****TIME SET TO 20 MINUTES*****\n");
}
ThisThread::sleep_for(500ms);
}
void fptMeter3check(){ // FOR POTENTIOMETER 3.
cntl_val = PTMeter3.read_u16()/25000;
if(cntl_val == 0){
MCLED1R.write(1);
MCLED3G.write(0);
MCLED2B.write(0);
TMP_val_C_user = 3.0; // 3 = HOT
printf("*****TEMPERATURE SET TO HOT.*****\n");
}
if(cntl_val == 1){
MCLED1R.write(1);
MCLED3G.write(0.05);
MCLED2B.write(0);
TMP_val_C_user = 2.0; // 2 = WARM
printf("*****TEMPERATURE SET TO WARM.*****\n");
}
if(cntl_val == 2){
MCLED1R.write(0);
MCLED3G.write(0);
MCLED2B.write(1);
TMP_val_C_user = 1.0; // 1 = COLD
printf("*****TEMPERATURE SET TO COLD.*****\n");
}
}
void sensors (){ // FOR READING THE SENSORS - LDR, THERMISTOR AND PRESSURE.
{
LDR_val = LDR.read()*100;
TMP_val_F = TS.read()*1000;
TMP_val_C = (TMP_val_F -32)*5/9;
FSR_val = FSR.read()*100;
//printf("Temperature -- %f | LIGHT -- %f | FORCE -- %f | USER -- %f \n", TMP_val_C,LDR_val,FSR_val, TMP_val_C_user); // FOR TEST ONLY.
}
}
void play_note(int frequency){ // FOR BUZZER
Buzzer.period_us((float) 1000000.0f/ (float) frequency);
Buzzer.pulsewidth_us(Buzzer.read_period_us()/2);
ThisThread::sleep_for(100ms);
}
void watertemp(){ // FOR DETERMINING WATER TEMPERATURE ACCORDING TO THE MODE.
if(TMP_val_C<30.0){
coldwater =1;
warmwater =0;
hotwater =0;
}
if(TMP_val_C>30.0){
coldwater =0;
warmwater =1;
hotwater =0;
}
if(TMP_val_C>50.0){
coldwater =0;
warmwater =0;
hotwater =1;
}
}
void warning(){ // WARNING WHEN THE MACHINE IS OVERLOADED.
if (LDR_val < 50.0){
printf("*****WARNING !!!!!!!!!!!!! TOO MUCH CLOTHES. DON'T LOAD THE MACHINE OVER THE MARKED LEVEL.*****\n");
play_note(C_major_scale[4]);
Buzzer.pulsewidth_us(0);
LEDRED.write(1);
}
else{
LEDRED.write(0);
}
}
int tempWarn(){ // CHECKING THE USER TEMPERATURE AND WATER TEMPERATURE
if(coldwater == true && TMP_val_C_user == 1.0 || warmwater == true && TMP_val_C_user == 2.0 || hotwater ==true && TMP_val_C_user ==3.0){
//printf("*****WATER TEMPERATURE MATCHES WITH USER'S SELECTED TEMPERATURE.*****\n");
LEDGREEN2.write(1);
return 1;
}
else{
printf("*****WATER TEMPERATURE DON'T MATCH WITH USER'S SELECTED TEMPERATURE. PLEASE WAIT FOR THE WATER TO COOL DOWN OR WARM UP.*****\n");
LEDGREEN2.write(0);
return 0;
}
}
int forceWarn(){
if(FSR_val<5){
printf("*****NOT ENOUGH CLOTHES !!!! PLEASE PUT MORE CLOTHES INSIDE*****\n");
LEDGREEN3.write(0);
return 0;
}else{
// printf("ENOUGH CLOTHES DETECTED. \n");
LEDGREEN3.write(1);
return 1;
}
}
void run(){ // FOR RUNNING THE PROGRAM.
while (button2check() ==1 && mode =='A' ){ // MODE A = 100 cycle
if(tempWarn() ==1 && forceWarn()==1){
printf("*****MACHINE RUNNING..........................***** \n *****MODE SELECTED = A, TEMPERATURE MODE SELECTED - %.1f, TIME SELECTED - %dms, MOTOR SET TO 100 CYCLE***** \n", TMP_val_C_user, timer );
SegDis.write(hexDis[1]);
LEDRED.write(1);
thread_sleep_for(timer);
for(int i = 0; i < 8; i++){ //Buzzer
play_note(C_major_scale[i]);
}
Buzzer.pulsewidth_us(0);
// DUE TO NOT HAVING A MOTOR, THE MOTOR CYCLE IS NOT IMPLEMENTED.
}
else{
printf("*****PLEASE WAIT FOR GREEN LED2 AND GREEN LED3 TO LIGHT UP***** \n");
LEDRED.write(0);
}
}
while (button2check() ==1 && mode =='B' && forceWarn()==1){ // MODE B = 200 cycle
if(tempWarn() ==1 && forceWarn()==1){
printf("*****MACHINE RUNNING..........................***** \n *****MODE SELECTED = B, TEMPERATURE MODE SELECTED - %.1f, TIME SELECTED - %dms, MOTOR SET TO 200 CYCLE***** \n", TMP_val_C_user, timer );
SegDis.write(hexDis[1]);
LEDRED.write(1);
thread_sleep_for(timer);
for(int i = 0; i < 8; i++){ //Buzzer
play_note(C_major_scale[i]);
}
Buzzer.pulsewidth_us(0);
// DUE TO NOT HAVING A MOTOR, THE MOTOR CYCLE IS NOT IMPLEMENTED.
}
else{
printf("*****PLEASE WAIT FOR GREEN LED2 AND GREEN LED3 TO LIGHT UP*****\n ");
LEDRED.write(0);
}
}
while (button2check() ==1 && mode =='C' && forceWarn()==1){ // MODE C = 300 cycle
if(tempWarn() ==1 && forceWarn()==1){
printf("*****MACHINE RUNNING..........................***** \n *****MODE SELECTED = C, TEMPERATURE MODE SELECTED - %.1f, TIME SELECTED - %dms, MOTOR SET TO 300 CYCLE ***** \n", TMP_val_C_user, timer );
SegDis.write(hexDis[1]);
LEDRED.write(1);
thread_sleep_for(timer);
for(int i = 0; i < 8; i++){ //Buzzer
play_note(C_major_scale[i]);
}
Buzzer.pulsewidth_us(0);
// DUE TO NOT HAVING A MOTOR, THE MOTOR CYCLE IS NOT IMPLEMENTED.
}
else{
printf("*****PLEASE WAIT FOR GREEN LED2 AND GREEN LED3 TO LIGHT UP*****\n ");
LEDRED.write(0);
}
}
}