Stormer 发表于 2017-3-12 02:52:37

关于analogWrite和analogRead的问题

本帖最后由 Stormer 于 2017-3-12 03:51 编辑

我做了个简单的测试,想输出不同的模拟信号到A0,然后再从A1读取过来。

结果从串口监视器观察发现,读取A1的值只有0和1023两个值。。晕了。这是什么情况? for里我该怎么写才能从0逐步输出到最大值,同时A1能正常接收?





----------------
刚改了下代码,结果还是一样。


int i=0;

void setup() {

Serial.begin(9600);
while (!Serial) {;}

}

void loop() {

    analogWrite(A0, i);
   
    int v = analogRead(A1);

    Serial.println(v);



    if(i<=255)
    {
      i = i+1;
    }
    else
    {
      i = 0;
    }

    delay(20);
}



---------------------------------
再次修改代码,这次就输出个固定值,用A1接收全是0.

OK,那只留下从A0输出的代码,用示波器看看A0输出的到底是什么鬼。


void setup() {

Serial.begin(9600);
while (!Serial) {;}

}

void loop() {

    analogWrite(0, 255);
   

}


果然。。也不是方波。这个模拟输出的函数到底是干嘛的?我的理解就是直接输出指定的电压值啊,是不是理解错了?

只好坐等各位大神回复了。




kenan13 发表于 2017-3-12 12:32:24

楼上的都是正解,使用analogWrite()必须要用支持PWM的针脚,板上有标~的针脚才行。

Be1ieve 发表于 2017-3-12 07:09:41

A0上面没有analogWrite()功能,改用板子上有~的

Paderboy 发表于 2017-3-12 08:34:10

analogWrite()是pwm输出的。。要使用有pwm功能引脚的。才能输出。。。

164335413 发表于 2017-3-12 09:10:36

发了这么多帖子,看来你是没看基础的教程。看基础的手册去

林定祥 发表于 2017-3-12 22:44:34

楼长想先输出然后再读回吧,显然概念有错,模拟输入是真模拟信号通过AD后读入值,而模拟输出是脉宽调制输出,不同的占宽比,通过滤波才能得到变化的输出电压,将“模拟输出”直接连接是得不到正确的模拟输入信号的。
页: [1]
查看完整版本: 关于analogWrite和analogRead的问题