测试了一下Arduino的AD功能,不同于我之前用过的自己设计的产品,还需要自己去开发很多驱动,Arduino的风格很明显——开箱即用!

         先看一下相应的资源分配:

102_Arduino AD功能_嵌入式

         我手头的板子中有6路AD。

         尝试实现相应的代码:

const int arduino_ad_pin0 = 0;
const int arduino_ad_pin1 = 1;
const int arduino_ad_pin2 = 2;
const int arduino_ad_pin3 = 3;
const int arduino_ad_pin4 = 4;
const int arduino_ad_pin5 = 5;

void setup()
{
    // put your setup code here, to run once:
    Serial.begin(9600);
}

void loop()
{
    int ad_ret_val;
    // put your main code here, to run repeatedly:

    /* ad0 */
    ad_ret_val = analogRead(arduino_ad_pin0);
    Serial.print("AD0: ");
    Serial.print(ad_ret_val);
    Serial.print("\t");
    Serial.print(ad_ret_val * 5000.0f / 1024.0f);
    Serial.println("mv");
    delay(100);

    /* ad1 */
    ad_ret_val = analogRead(arduino_ad_pin1);
    Serial.print("AD1: ");
    Serial.print(ad_ret_val);
    Serial.print("\t");
    Serial.print(ad_ret_val * 5000.0f / 1024.0f);
    Serial.println("mv");
    delay(100);

    /* ad2 */
    ad_ret_val = analogRead(arduino_ad_pin2);
    Serial.print("AD2: ");
    Serial.print(ad_ret_val);
    Serial.print("\t");
    Serial.print(ad_ret_val * 5000.0f / 1024.0f);
    Serial.println("mv");
    delay(100);

    /* ad3 */
    ad_ret_val = analogRead(arduino_ad_pin3);
    Serial.print("AD3: ");
    Serial.print(ad_ret_val);
    Serial.print("\t");
    Serial.print(ad_ret_val * 5000.0f / 1024.0f);
    Serial.println("mv");
    delay(100);

    /* ad4 */
    ad_ret_val = analogRead(arduino_ad_pin4);
    Serial.print("AD4: ");
    Serial.print(ad_ret_val);
    Serial.print("\t");
    Serial.print(ad_ret_val * 5000.0f / 1024.0f);
    Serial.println("mv");
    delay(100);

    /* ad5 */
    ad_ret_val = analogRead(arduino_ad_pin5);
    Serial.print("AD5: ");
    Serial.print(ad_ret_val);
    Serial.print("\t");
    Serial.print(ad_ret_val * 5000.0f / 1024.0f);
    Serial.println("mv");
    delay(100);

    Serial.println("-------------------------------------------------------------");
    delay(1000);
}

         运行效果:

102_Arduino AD功能_Arduino_02

 

         比较有意思的是默认全都不是0,不知道这个电压是如何来的,回头可以再用示波器测试一次。为了查看ADC是否工作正常,AD0,我直接接上5V:

102_Arduino AD功能_嵌入式_03

         看上去,至少第一路还是正确的。第二路收到了影响?再次测试AD1:

102_Arduino AD功能_嵌入式_04

         也有类似的效果,直接测试一下AD2,这次直接接地:

102_Arduino AD功能_Arduino_05

         看上去也是正确的,但是为什么有这么大的偏差还是有点没弄明白。难道还得配置pin脚的模式?

         增加配置:


void setup()
{
    // put your setup code here, to run once:
    pinMode(arduino_ad_pin0 , INPUT);
    pinMode(arduino_ad_pin1 , INPUT);
    pinMode(arduino_ad_pin2 , INPUT);
    pinMode(arduino_ad_pin3 , INPUT);
    pinMode(arduino_ad_pin4 , INPUT);
    pinMode(arduino_ad_pin5 , INPUT);
    Serial.begin(9600);
}

         测试的效果还是没有改进,测试效果如下:

102_Arduino AD功能_嵌入式_06

         效果不知很好,但是大致的效果还是的看到了。