===== CFNET-FS 이용한 아날로그 입력모듈(CFADC) 사용 방법 =====
아날로그 입력모듈(CFADC)은 아래에 설명된 /analog-intput/{module_address}/channel/{channel_address}디렉터리의 amps, raw, voltes 파일을 통해 아날로그 값을 읽을 수 있습니다.
//☞ "CFNET-FS 개발 환경 구성이 완료되지 않았다면, 아래 링크를 참고하여 먼저 설정을 진행해 주세요.//"
* [[modularpi:cfnet-fs:Setting:|Config 환경 설정 및 업데이트 (필수!!)]]
* [[modularpi:cfnet-fs:download_start:|CFNET-FS 다운로드 및 파일 시스템 생성]]
{{ :modularpi:cfnet-fs:analog_input:adc_struct.png?nolink |}}
===== analog-input 디렉터리 구조 및 제어 파일 =====
analog-intput >> 모듈 주소 0~3{module_address} 디렉터리 >> channel >> 0~3(채널) 디렉터리가 있으며, \\
0 ~ 3 (채널) 디렉터리에는 해당 채널(포트)의 아날로그 값을 읽을 수 있는 amp, raw, volts 파일이 포함되어 있습니다.
* 각 아날로그 입력모듈(CFADC)은 cfnet-fs 마운트 지점 아래에 있는 디렉터리로 표현됩니다.\\
* ''.{mount-point}/analog-intput/{module_address}/''
===- 모듈 Address(0~3) : analog-intput/{module_address} ===
$ tree -L 2 /tmp/cfnet-fs/analog-input/
/tmp/cfnet-fs/analog-input/
├── 0
│ └── channel
├── 1
│ └── channel
... 3
===- 채널(ch 0~3): analog-intput/{module_address}/}/channel/{channel_address}===
$ tree /tmp/cfnet-fs/analog-input/0/
/tmp/cfnet-fs/analog-input/0/
└── channel
├── 0
│ ├── amps.bin
│ ├── amps.txt
│ ├── raw.bin
│ ├── raw.txt
│ ├── volts.bin
│ └── volts.txt
├── 1
│ ├── amps.bin
│ ├── amps.txt
│ ├── raw.bin
│ ├── raw.txt
│ ├── volts.bin
│ └── volts.txt
... 3
각 아날로그 입력 채널에는 다음과 같은 6개의 파일이 제공됩니다.
* amps.txt : 아날로그 입력 채널의 전류 측정값을 ASCII 텍스트 문자열로 표시합니다.
* amps.bin : 아날로그 입력 채널의 전류 측정값을 16비트 부동소수점 값으로 표시합니다.
* raw.txt : 아날로그 입력 채널의 원시 디지털 판독값을 ASCII 텍스트 문자열로 표시합니다.
* raw.bin : 아날로그 입력 채널의 원시 디지털 판독값을 16비트 부호 없는 정수로 표시합니다.
* volts.txt : 아날로그 입력 채널의 전압 측정값을 소수점 넷째 자리까지의 ASCII 텍스트 문자열로 표시합니다.
* volts.bin : 아날로그 입력 채널의 전압 판독값을 32비트 부동소수점 값으로 표시합니다.
이 파일들 중 하나에 쓰기 작업을 하면 아날로그 출력 채널의 전압이 변경됩니다.
텍스트 파일(.txt)은 사용자 입력·표시에 적합하며, 바이너리 파일(.bin)은 연산 및 논리 처리가 필요한 경우에 적합합니다.
==== - C#, Python, C에서 코딩 방법 ====
* "**아날로그 입력 모듈 0의 채널 3의 전압을 읽습니다.**"
* /tmp/cfnet-fs/analog-input/0/channel/3/volts.txt
* /tmp/cfnet-fs/analog-output/0/channel/1/volts.bin
=== Shell Script ===
$ cat /tmp/cfnet-fs/analog-input/0/channel/3/volts.txt
=== C# ===
const string ANALOG_INPUT_0_CHANNEL_3 = "/tmp/cfnet-fs/analog-input/0/channel/3/volts.txt";
string state = File.ReadAllText(ANALOG_INPUT_0_CHANNEL_3).Trim();
Console.WriteLine(state);
const string ANALOG_INPUT_0_CHANNEL_3 = "/tmp/cfnet-fs/analog-input/0/channel/3/volts.bin";
var bytes = File.ReadAllBytes(ANALOG_INPUT_0_CHANNEL_3);
var state = BitConverter.ToFloat(bytes, 0);
Console.WriteLine(state);
=== Python ===
ANALOG_INPUT_0_CHANNEL_3 = "/tmp/cfnet-fs/analog-input/0/channel/3/volts.txt"
with open(ANALOG_INPUT_0_CHANNEL_3, "r") as f:
state = f.read().strip()
print(state)
import struct
ANALOG_INPUT_0_CHANNEL_3 = "/tmp/cfnet-fs/analog-input/0/channel/3/volts.bin"
with open(ANALOG_INPUT_0_CHANNEL_3, "rb") as f:
bytes_data = f.read(4)
state = struct.unpack("
=== C ===
#include
#define ANALOG_INPUT_0_CHANNEL_3 "/tmp/cfnet-fs/analog-input/0/channel/3/volts.txt"
int main(void)
{
FILE *f = fopen(ANALOG_INPUT_0_CHANNEL_3, "r");
char buffer[10] = {0};
fgets(buffer, sizeof(buffer), f);
printf("%s", buffer);
fclose(f);
return 0;
}
#include
#define ANALOG_INPUT_0_CHANNEL_3 "/tmp/cfnet-fs/analog-input/0/channel/3/volts.bin"
int main(void)
{
FILE *f = fopen(ANALOG_INPUT_0_CHANNEL_3, "rb");
float value;
fread(&value, sizeof(float), 1, f);
printf("%f\n", state);
fclose(f);
return 0;
}
[[..:index|CFNET-FS 개요]]