본문 바로가기
아두이노/유선통신

아두이노 2대를 이용한 정수와 실수 전송-#6

by 오징어땅콩2 2020. 8. 5.
반응형

마지막으로 응용이다. 전체 코드를 구현해서 잘 작동하는지 확인이다.

사실 안될 것이 없는 코드라서 잘된다.

그리고 변수를 추가하거나 빼더라도 전체 코드의 수정은 없다.

단지 구조체만 변경될 뿐이다.

 

보내는쪽

#include <SoftwareSerial.h>
 
typedef struct _Info
  int heartrate;
  int servo_degree;
  double temp1;
  double temp2;
  char str[25];
  _Info()
  {
    
  }
}Info;
 
 
SoftwareSerial sSerial= SoftwareSerial(23);
//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(23);
//HardwareSerial&  sSerial = Serial2;
 
Info a;
void setup() 
{
    Serial.begin(9600);
    sSerial.begin(9600);     
}
 
void loop() 
{
    if (sSerial.available())
    { 
         char* p = (char*)&a;
          memset(&a, 0x00sizeof(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 ;
}

 

댓글