SARADC是一个6通道10bit有效位的数模转化器,当输入频率为13MHz,转换速度为1MSPS。
风火轮科技开发一款rk3588s的主板youyeetoo R1,该主板提供40pin扩展管脚,其中提供1路can管脚使用。管脚分布如下图所示:
如果要在Android系统里面使用shell命令,需要通过ADB进入Android的命令行窗口。ADB的使用教程请参考 adb调试 一章。通过adb打开Android系统命令行后,
cat /sys/bus/iio/devices/iio\:device0/in_voltage0_raw
这里提供完整的app
Android系统的权限管理是十分严格的,使用c++或者java操作Android根文件系统里的文件或资源需要对应的权限。这里编写的ndk程序是基于 system app的作为模板进行编写。system app请参考创建system app这一章。
#include <jni.h>
#include <string>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <linux/i2c.h>
#include <android/log.h>
#define LOG_TAG "R1-AdcTest"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define ADC_DEVICE "/sys/bus/iio/devices/iio\:device0/in_voltage4_raw"
extern "C" JNIEXPORT jstring JNICALL
Java_com_youyeetoo_r1_1adcdemo_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
FILE *fd=NULL;
char adc_value[5];
char show_buf[48];
float Voltage;
int tmp;
fd=fopen(ADC_DEVICE,"r");
if (fd == NULL){
return env->NewStringUTF("open ADC_DEVICE failed \n");
}
fscanf(fd,"%s",adc_value);
fclose(fd);
sscanf(adc_value, "%d", &tmp);
Voltage = tmp / 4096.0 * 1.8;
sprintf(show_buf, "adc value: %s Voltage: %f",adc_value, Voltage);
return env->NewStringUTF(show_buf);
}