반응형
마지막으로 응용이다. 전체 코드를 구현해서 잘 작동하는지 확인이다.
사실 안될 것이 없는 코드라서 잘된다.
그리고 변수를 추가하거나 빼더라도 전체 코드의 수정은 없다.
단지 구조체만 변경될 뿐이다.

보내는쪽
#include <SoftwareSerial.h>
typedef struct _Info
{
int heartrate;
int servo_degree;
double temp1;
double temp2;
char str[25];
_Info()
{
}
}Info;
SoftwareSerial sSerial= SoftwareSerial(2, 3);
//HardwareSerial& sSerial = Serial2;
Info a;
volatile unsigned long previousMillis;
void setup()
{
Serial.begin(9600);
sSerial.begin(9600);
previousMillis = millis();
Serial.println(sizeof(int));
Serial.println(sizeof(float));
Serial.println(sizeof(double));
a.heartbit =200;
a.servo_degree = 80;
a.temp1 = 25;
a.temp2 = 30;
strcpy(a.str, "hi hi");
}
void loop()
{
unsigned long currentMillis = millis();
if ((currentMillis-previousMillis)> 1000*1)
{
sSerial.write((char*)&a, sizeof(Info));
previousMillis = currentMillis;
}
return ;
}
|
받는쪽
#include <SoftwareSerial.h>
typedef struct _Info
{
int heartrate;
int servo_degree;
double temp1;
double temp2;
char str[25];
_Info()
{
}
}Info;
SoftwareSerial sSerial= SoftwareSerial(2, 3);
//HardwareSerial& sSerial = Serial2;
Info a;
void setup()
{
Serial.begin(9600);
sSerial.begin(9600);
}
void loop()
{
if (sSerial.available())
{
char* p = (char*)&a;
memset(&a, 0x00, sizeof(a));
while( (p - ((char*)&a)) < sizeof(a) )
{
if(sSerial.available())
{
char c = sSerial.read();
//*p = c; p++;
*(p++) = c;
}
}
Serial.print(a.heartbit); Serial.print(" ");
Serial.print(a.servo_degree); Serial.print(" ");
Serial.print(a.temp1); Serial.print(" ");
Serial.print(a.temp2); Serial.print(" ");
Serial.print(a.str); Serial.print(" ");
Serial.println();
}
return ;
}
|
'아두이노 > 유선통신' 카테고리의 다른 글
아두이노 2대를 이용한 정수와 실수 전송-#7(최종) (0) | 2020.08.07 |
---|---|
아두이노 2대를 이용한 정수와 실수 전송-#5 (0) | 2020.08.05 |
아두이노 2대를 이용한 정수와 실수 전송-#3 (0) | 2020.08.04 |
아두이노 2대를 이용한 정수와 실수 전송-#2 (0) | 2020.08.04 |
아두이노 2대를 이용한 정수와 실수 전송-#1 (0) | 2020.08.04 |
댓글