M5Stack에서 microSD에 액세스하고 CSV 파일의 숫자를 읽습니다.
그래서 microSD 카드에 들어간 CSV 파일의 숫자를 읽는 방법을 설명하고 싶습니다.
여기서는 다음과 같은 데이터가 들어있는 Data.csv라는 파일의 세 번째 열의 숫자를 얻는 것을 목표로합니다.
M5Stack에서 microSD에 액세스하고 CSV 파일의 숫자를 읽습니다.
먼저 M5Stack에서 microSD에 액세스합니다.
이 코드를 작성하여 Data.csv 파일에 액세스할 수 있습니다.
SDReader.cppvoid loop() {
File file = SD.open("Data.csv");
그런 다음 CSV 파일에 포함된 문자를 로드합니다.
이어서, 읽고 있는 문자가 몇 열째에 있는지를 알기 위해서, 읽어들인 문자가 콤마인지 어떤지를 조사합니다. 그리고 쉼표인 경우에는 카운터의 값을 하나 늘리기로 합니다. 이번에는 int 형으로 connma_count라는 문자를 준비했습니다.
그리고 카운터의 값이 2로 나누어 나머지가 0이 될 때부터 문자를 카운트합니다.
SDReader.cpp
buf[0] = file.read();
if(connma_count%2==0 && connma_count>2){
value[buf_number] = buf[0];
buf_number++;
}
if (buf[0] == ',') {
connma_count++;
}
여기서 주의하는 포인트로서, 읽어들인 문자를 반복해 사용하고 싶은 경우에는, 매회 read() 함수를 사용하지 않고, 한 번 변수에 대입하고 나서 그 변수를 사용하도록 해 주세요. 매번 read()를 사용하면 실행할 때마다 읽고 있는 값이 다음 문자로 업데이트됩니다.
read() 함수를 한번 실행하면, 열린 파일로부터 받은 데이터를 1 바이트분만 돌려줍니다. 그리고 다시 실행하면 이번에는 이미 읽은 문자의 다음 문자를 읽고 값을 반환합니다.
Arduino등에서 자주 사용하는 Serial.read() 어쩐지 같은 움직임을 하고 있어, loop()내에서 그것을 반복하기 때문에, 시리얼 모니터로 문자가 계속되어 표시되는군요. 나는 SD카드 파일의 로드가 처음이었던 적도 있어, 지금까지 좋은 가감에 취급하고 있던 read() 함수가 어떻게 움직이고 있는지를 알 수 있는 좋은 기회가 되었습니다.
그리고, 콤마가 다음의 단락이 되었을 때에, 수치의 계산과 배열에의 격납을 실시했습니다. 이렇게 하면 셀의 값을 숫자로 처리할 수 있습니다.
SDReader.cpp if(connma_count%2==1&&connma_count>3)
{
value = ctoi(value[0])*100+ctoi(value[1])*10+ctoi(value[2]) ;
}
여기서 사용한 ctoi()는 char형의 숫자를 int형으로 변환하기 위해 지정한 변수입니다.
SDReader.cppint ctoi(char c) {
switch (c) {
case '0': return 0;
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
default: return 0;
}
}
Reference
이 문제에 관하여(M5Stack에서 microSD에 액세스하고 CSV 파일의 숫자를 읽습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shoiijima463/items/2b95d075d99dbd0a7856
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
void loop() {
File file = SD.open("Data.csv");
buf[0] = file.read();
if(connma_count%2==0 && connma_count>2){
value[buf_number] = buf[0];
buf_number++;
}
if (buf[0] == ',') {
connma_count++;
}
if(connma_count%2==1&&connma_count>3)
{
value = ctoi(value[0])*100+ctoi(value[1])*10+ctoi(value[2]) ;
}
int ctoi(char c) {
switch (c) {
case '0': return 0;
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
default: return 0;
}
}
Reference
이 문제에 관하여(M5Stack에서 microSD에 액세스하고 CSV 파일의 숫자를 읽습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shoiijima463/items/2b95d075d99dbd0a7856텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)