Skip to content
This repository was archived by the owner on May 16, 2023. It is now read-only.

Commit 77ef2e8

Browse files
committedOct 27, 2022
update : assignment #6
1 parent f1c6e7c commit 77ef2e8

File tree

5 files changed

+416
-54
lines changed

5 files changed

+416
-54
lines changed
 

‎assignment_6/image/img.jpg

4.17 MB
Loading

‎assignment_6/master.ino

+149-19
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,158 @@
11
#include <Wire.h>
2+
#define BOARD1 1
3+
#define BOARD2 2
4+
#define BOARD3 3
5+
#define BOARD4 4
26

3-
#define SLAVE_1 1
4-
#define SLAVE_2 2
7+
bool debug = 1;
58

6-
char text[] = "HELLO1";
7-
8-
int count = 0, slaveState;
9+
int currentBoard = BOARD1;
10+
int nextBoard = BOARD1;
11+
int numBoard = 3;
12+
char receiveMessage[64] = "\0";
13+
String serialInput;
14+
String message;
15+
String token;
16+
int i = 0;
17+
long time = 0;
18+
bool haveReceived = 0;
19+
int n = 0;
20+
int checkMessage = 0;
21+
int state = 0;
922

10-
void setup() {
11-
23+
void sendToken();
24+
25+
void setup()
26+
{
27+
Wire.begin(currentBoard);
28+
Wire.onReceive(receiveEvent);
1229
Serial.begin(9600);
13-
Wire.begin();
30+
sendToken();
31+
}
32+
33+
void createToken()
34+
{
35+
if (checkMessage == 2 && state == 0)
36+
{
37+
token = "Token#1#";
38+
token += n;
39+
token += "#";
40+
token += message;
41+
n = 0;
42+
checkMessage = 0;
43+
message = "";
44+
}
45+
else if (state == 1)
46+
{
47+
token = receiveMessage;
48+
}
49+
else
50+
{
51+
token = "Token#0#";
52+
}
53+
if (debug)
54+
{
55+
Serial.print("Send Token : ");
56+
Serial.println(token);
57+
}
1458
}
1559

16-
void loop() {
17-
slaveState = count % 2 == 0 ? SLAVE_1 : SLAVE_2;
18-
Wire.beginTransmission(slaveState);
19-
Wire.write(text);
60+
bool cooldown()
61+
{
62+
if (millis() - time > 200)
63+
{
64+
haveReceived = 0;
65+
return 1;
66+
}
67+
return 0;
68+
}
69+
70+
void sendToken()
71+
{
72+
nextBoard %= numBoard;
73+
nextBoard += 1;
74+
if (nextBoard == currentBoard)
75+
{
76+
++nextBoard;
77+
}
78+
createToken();
79+
Wire.beginTransmission(nextBoard);
80+
Wire.write(&token[0]);
2081
Wire.endTransmission();
21-
Serial.println(text);
22-
int len = Wire.requestFrom(slaveState, 6);
23-
count++;
24-
for(int i = 0; i < len; i++){
25-
text[i] = Wire.read();
26-
}
27-
delay(1000);
2882
}
83+
84+
void printMessage()
85+
{
86+
for (int j = 10; j < i; ++j)
87+
{
88+
Serial.print(receiveMessage[j]);
89+
}
90+
}
91+
92+
void receiveEvent(int lenByte)
93+
{
94+
for (i = 0; i < lenByte; i++)
95+
{
96+
receiveMessage[i] = Wire.read();
97+
}
98+
receiveMessage[i] = '\0';
99+
if (debug)
100+
{
101+
Serial.print("Receive : ");
102+
Serial.println(receiveMessage);
103+
}
104+
state = receiveMessage[6] - '0';
105+
if (receiveMessage[8] - '0' == currentBoard)
106+
{
107+
state = 0;
108+
printMessage();
109+
}
110+
time = millis();
111+
haveReceived = 1;
112+
}
113+
114+
void loop()
115+
{
116+
while (Serial.available())
117+
{
118+
serialInput = Serial.readString();
119+
120+
if (checkMessage == 0)
121+
{
122+
n = serialInput.toInt();
123+
if (n > numBoard || n <= 0)
124+
{
125+
Serial.println("Invalid Input Board");
126+
Serial.println("Available Board : 1 2 3 4");
127+
n = 0;
128+
}
129+
else
130+
{
131+
checkMessage = 1;
132+
}
133+
}
134+
else if (checkMessage == 1)
135+
{
136+
message = serialInput;
137+
checkMessage = 2;
138+
if (debug)
139+
{
140+
Serial.print("Create Token : Token#1#");
141+
Serial.print(n);
142+
Serial.print("#");
143+
Serial.println(message);
144+
}
145+
}
146+
else
147+
{
148+
Serial.println("Can't queue more than 1 message");
149+
}
150+
}
151+
if (haveReceived)
152+
{
153+
if (cooldown())
154+
{
155+
sendToken();
156+
}
157+
}
158+
}

‎assignment_6/slave_1.ino

+134-17
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,147 @@
11
#include <Wire.h>
2+
#define BOARD1 1
3+
#define BOARD2 2
4+
#define BOARD3 3
5+
#define BOARD4 4
6+
int debug = 1;
7+
int currentBoard = BOARD2;
8+
int nextBoard = BOARD1;
9+
int numBoard = 3;
10+
char receiveMessage[64] = "\0";
11+
String serialInput;
12+
String message;
13+
String token;
14+
int i = 0;
15+
long time = 0;
16+
bool haveReceived = 0;
17+
int n = 0;
18+
int checkMessage = 0;
19+
int state = 0;
220

3-
#define SLAVE_1 1
21+
void setup()
22+
{
23+
Wire.begin(currentBoard);
24+
Wire.onReceive(receiveEvent);
25+
Serial.begin(9600);
26+
}
27+
28+
bool cooldown()
29+
{
30+
if (millis() - time > 200)
31+
{
32+
haveReceived = 0;
33+
return 1;
34+
}
35+
return 0;
36+
}
437

5-
char text[7];
38+
void createToken()
39+
{
40+
if (checkMessage == 2 && state == 0)
41+
{
42+
token = "Token#1#";
43+
token += n;
44+
token += "#";
45+
token += message;
46+
n = 0;
47+
checkMessage = 0;
48+
message = "";
49+
}
50+
else if (state == 1)
51+
{
52+
token = receiveMessage;
53+
}
54+
else
55+
{
56+
token = "Token#0#";
57+
}
58+
if (debug)
59+
{
60+
Serial.print("Send Token : ");
61+
Serial.println(token);
62+
}
63+
}
664

7-
void setup() {
65+
void sendToken()
66+
{
67+
Wire.beginTransmission(nextBoard);
68+
createToken();
69+
Wire.write(&token[0]);
70+
Wire.endTransmission();
71+
}
872

9-
Wire.begin(SLAVE_1);
10-
Serial.begin(9600);
11-
Wire.onReceive(receiveEvent);
12-
Wire.onRequest(requestEvent);
73+
void printMessage()
74+
{
75+
for (int j = 10; j < i; ++j)
76+
{
77+
Serial.print(receiveMessage[j]);
78+
}
1379
}
1480

15-
void loop() {}
81+
void receiveEvent(int lenByte)
82+
{
1683

17-
void receiveEvent(int byte) {
18-
for(int i = 0; i < byte; i++){
19-
text[i] = Wire.read();
84+
for (i = 0; i < lenByte; i++)
85+
{
86+
receiveMessage[i] = Wire.read();
2087
}
21-
Serial.println(text);
88+
receiveMessage[i] = '\0';
89+
if (debug)
90+
{
91+
Serial.print("Receive : ");
92+
Serial.println(receiveMessage);
93+
}
94+
state = receiveMessage[6] - '0';
95+
if (receiveMessage[8] - '0' == currentBoard)
96+
{
97+
state = 0;
98+
printMessage();
99+
}
100+
time = millis();
101+
haveReceived = 1;
22102
}
23103

24-
void requestEvent() {
25-
text[5]++;
26-
if (text[5] == ':') {
27-
text[5] = '1';
104+
void loop()
105+
{
106+
// delay(100);
107+
while (Serial.available())
108+
{
109+
serialInput = Serial.readString();
110+
111+
if (checkMessage == 0)
112+
{
113+
n = serialInput.toInt();
114+
if (n > numBoard || n <= 0)
115+
{
116+
Serial.println("Invalid Input Board");
117+
Serial.println("Available Board : 1 2 3");
118+
n = 0;
119+
}
120+
else
121+
{
122+
checkMessage = 1;
123+
}
124+
}
125+
else if (checkMessage == 1)
126+
{
127+
message = serialInput;
128+
checkMessage = 2;
129+
130+
Serial.print("Create Token : Token#1#");
131+
Serial.print(n);
132+
Serial.print("#");
133+
Serial.println(message);
134+
}
135+
else
136+
{
137+
Serial.println("Can't queue more than 1 message");
138+
}
139+
}
140+
if (haveReceived)
141+
{
142+
if (cooldown())
143+
{
144+
sendToken();
145+
}
28146
}
29-
Wire.write(text);
30147
}

‎assignment_6/slave_2.ino

+133-18
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,145 @@
11
#include <Wire.h>
2+
#define BOARD1 1
3+
#define BOARD2 2
4+
#define BOARD3 3
5+
#define BOARD4 4
26

3-
#define SLAVE_2 2
7+
int debug = 1;
8+
int currentBoard = BOARD3;
9+
int nextBoard = BOARD1;
10+
int numBoard = 3;
11+
char receiveMessage[64] = "\0";
12+
String serialInput;
13+
String message;
14+
String token;
15+
int i = 0;
16+
long time = 0;
17+
bool haveReceived = 0;
18+
int n = 0;
19+
int checkMessage = 0;
20+
int state = 0;
421

5-
char text[7];
6-
7-
void setup() {
8-
9-
Wire.begin(SLAVE_2);
10-
Serial.begin(9600);
22+
void setup()
23+
{
24+
Wire.begin(currentBoard);
1125
Wire.onReceive(receiveEvent);
12-
Wire.onRequest(requestEvent);
26+
Serial.begin(9600);
27+
}
28+
29+
bool cooldown()
30+
{
31+
if (millis() - time > 200)
32+
{
33+
haveReceived = 0;
34+
return 1;
35+
}
36+
return 0;
37+
}
38+
39+
void createToken()
40+
{
41+
if (checkMessage == 2 && state == 0)
42+
{
43+
token = "Token#1#";
44+
token += n;
45+
token += "#";
46+
token += message;
47+
n = 0;
48+
checkMessage = 0;
49+
message = "";
50+
}
51+
else if (state == 1)
52+
{
53+
token = receiveMessage;
54+
}
55+
else
56+
{
57+
token = "Token#0#";
58+
}
59+
if (debug)
60+
{
61+
Serial.print("Send Token : ");
62+
Serial.println(token);
63+
}
1364
}
1465

15-
void loop() {}
66+
void sendToken()
67+
{
68+
Wire.beginTransmission(nextBoard);
69+
createToken();
70+
Wire.write(&token[0]);
71+
Wire.endTransmission();
72+
}
73+
74+
void printMessage()
75+
{
76+
for (int j = 10; j < i; ++j)
77+
{
78+
Serial.print(receiveMessage[j]);
79+
}
80+
}
1681

17-
void receiveEvent(int byte) {
18-
for(int i = 0; i < byte; i++){
19-
text[i] = Wire.read();
82+
void receiveEvent(int lenByte)
83+
{
84+
for (i = 0; i < lenByte; i++)
85+
{
86+
receiveMessage[i] = Wire.read();
87+
}
88+
receiveMessage[i] = '\0';
89+
if (debug)
90+
{
91+
Serial.print("Receive : ");
92+
Serial.println(receiveMessage);
93+
}
94+
state = receiveMessage[6] - '0';
95+
if (receiveMessage[8] - '0' == currentBoard)
96+
{
97+
state = 0;
98+
printMessage();
2099
}
21-
Serial.println(text);
100+
time = millis();
101+
haveReceived = 1;
22102
}
23103

24-
void requestEvent() {
25-
text[5]++;
26-
if (text[5] == ':') {
27-
text[5] = '1';
104+
void loop()
105+
{
106+
while (Serial.available())
107+
{
108+
serialInput = Serial.readString();
109+
110+
if (checkMessage == 0)
111+
{
112+
n = serialInput.toInt();
113+
if (n > numBoard || n <= 0)
114+
{
115+
Serial.println("Invalid Input Board");
116+
Serial.println("Available Board : 1 2 3");
117+
n = 0;
118+
}
119+
else
120+
{
121+
checkMessage = 1;
122+
}
123+
}
124+
else if (checkMessage == 1)
125+
{
126+
message = serialInput;
127+
checkMessage = 2;
128+
Serial.print("Create Token : Token#1#");
129+
Serial.print(n);
130+
Serial.print("#");
131+
Serial.println(message);
132+
}
133+
else
134+
{
135+
Serial.println("Can't queue more than 1 message");
136+
}
137+
}
138+
if (haveReceived)
139+
{
140+
if (cooldown())
141+
{
142+
sendToken();
143+
}
28144
}
29-
Wire.write(text);
30145
}

‎sheet/ICT65-09.pdf

902 KB
Binary file not shown.

0 commit comments

Comments
 (0)
This repository has been archived.