반응형
우노B의 연결은 우노A에서 오는 통신 시리얼통신 포트룰 2,3번 핀에 연결하는것과
I2C통신을 위한 2핀과 VCC, GND를 포함하여 총 6개의 핀이 연결되어 있다.
우노B의 소스코드 부터 보자
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
SoftwareSerial sSerial= SoftwareSerial(2, 3);
//HardwareSerial& sSerial = Serial2;
#define version 0x01
#define BAUD 9600
typedef struct _Info
{
char ver;
char lcd_1[20+1];
_Info()
{
ver = version;
memset(lcd_1, 0x00, sizeof(char)*21);
}
}Info;
//LiquidCrystal_I2C lcd(0x27,20,2);
LiquidCrystal_I2C lcd(0x3F,20,2);
volatile unsigned long previousMillis;
void print_lcd(Info& _info);
void read_serial(Info& _info);
void setup()
{
Serial.begin(BAUD);
sSerial.begin(BAUD);
previousMillis = millis();
LCD_setup();
}
void LCD_setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("ARDUINO Start");
}
void loop()
{
Info adcinfo;
read_serial(adcinfo);
print_lcd(adcinfo);
static int time=0;
unsigned long currentMillis = millis();
if ((currentMillis-previousMillis)> 1000*1)
{
time++;
char buf2[50];
sprintf(buf2, "time:%4d sec ", time);
lcd.setCursor(0,1);
lcd.print(buf2);
previousMillis = currentMillis;
if(time > 1000) time = 0;
}
delay(10);
}
void read_serial(Info& _info)
{
memset(&_info, 0x00, sizeof(Info));
if (sSerial.available())
{
char c;
char *p;
p = (char*)&_info;
while( (p - ((char*)&_info)) < sizeof(Info) )
{
if(sSerial.available())
{
c = sSerial.read();
//*p = c; p++;
*(p++) = c;
*p = '\0';
if (c == '\r' || c == '\n') break;
}
}
_info.ver = version;
}
return ;
}
void print_lcd(Info& _info)
{
if(_info.ver==version)
{
char buf2[50];
sprintf(buf2, "receive ====> %dbyte \n", sizeof(Info));
Serial.write(buf2);
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print(_info.lcd_1);
}
return ;
}
'아두이노 > 보드' 카테고리의 다른 글
아두이노 통신 번외편 -#1 (0) | 2021.11.20 |
---|---|
아두이노 통신 UNO TO UNO -#5 (0) | 2021.11.16 |
아두이노 통신 UNO TO UNO -#3 (0) | 2021.11.16 |
아두이노 통신 UNO TO UNO -#2 (0) | 2021.11.16 |
아두이노 통신 UNO TO UNO -#1 (0) | 2021.11.16 |
댓글