반응형
아두이노에서는 기본적으로 C#이나 JAVA의 split 기능을 지원하지 않는 것 같다. 아니면 내가 잘 모르니 못 찾을 것 일수도 있다. 아무리 찾아봐도 아두이노에서의 저 기능을 못 찾겠다.
substring 기능이나 indexof 기능 외에는 찾아봐도 안 나오니 결국 이것을 활용한 방법으로 원하는 기능을 수행할 수밖에 없다. 그래서 split 기능을 수행하는 코드를 만들어 봤다.
아래의 코드를 활용하면 한 번에 들어온 여러 문자열을 구분자의 기준으로 분리하여 배열에 넣어준다. 일단 배열은 20개 이하만 처리하도록 했는데 필요하면 숫자만 늘리면 된다.
이 기능의 활용은 로봇제작에서 명령어를 한 개씩 전달하기보다는 진행할 문자열을 한 번에 보내서 처리하도록 하는 것이 좋겠다 싶어서 만들었다.
물론 짧게 한 개 만을 보내도 되고 여러 개를 보내도 상관없이 작동할 것이다. (아마도...)
아직은 적용한 것이 아니라 실제적인 작동은 합쳐봐야 알 것 같다.
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
|
// gz015n50, gx035n50, gc110n50, gv135n50, gz015n50, gx035n50, gc110n50, gv135n50, e
String _inString = " ";
String _inputActions[20] = {}; // 20개정도 명령어 받아보기
int _count = 0;
void setup()
{
Serial.begin(9600);
Serial.setTimeout(40);
Serial.println(F("Start~"));
delay(500);
}
void loop()
{
delay(20);
if(Serial.available()>0)
{
_inString = Serial.readString();
Serial.println(_inString);
StringSplit(_inString);
Serial.println(F("input data : "));
for(int i = 0; i<_count; i++)
{
Serial.println(_inputActions[i]);
}
}
}
void StringSplit(String inputString)
{
_count = 0;
int _getIndex = 0;
String _tempString = "";
String _getString = inputString;
while(true)
{
_getIndex = _getString.indexOf(','); // ','으로 분리된 문자
if(_getIndex != -1) // ','이 있을 경우
{
_tempString = _getString.substring(0, _getIndex); // 임시로 ',' 앞부분 문자 가져옴
//Serial.println(_tempString); // 읽은 문자 출력
_inputActions[_count] = _tempString; // 명령어 배열에 넣기
_getString = _getString.substring(_getIndex + 1); // 앞문자 자르고 다음 전체문자로 저장
_getString.trim(); // 공백 제거
} else {
break; // 없으면 종료
}
_count++;
}
//Serial.println(_count); // 전체 문자열의 수
}
|
cs |
결과는 다음과 같다. 잘 되는 것 같다.
반응형
'개발 관련 > HW 관련' 카테고리의 다른 글
Arduino ESP-01 펌웨어 업데이트 방법 (0) | 2025.02.14 |
---|---|
아두이노 HC-SR04(초음파센서) (0) | 2024.07.13 |
Arduino와 Autoit의 간단한 자동화 테스트 (0) | 2023.05.27 |
Arduino 서보모터 사용 코드 설명 (0) | 2023.05.25 |
Arduino에서 서보모터 사용하기 (0) | 2023.05.24 |
댓글