【问题标题】:Send a Analog Value from Arduino A to Analog Pin of Arduino B将模拟值从 Arduino A 发送到 Arduino B 的模拟引脚
【发布时间】:2019-03-01 09:52:38
【问题描述】:

我正在尝试从 Arduino UNO 上的 LM35 传感器读取值并通过 PWM 引脚和模拟引脚将其发送到另一个 Arduino 板

当我运行这个项目时,Arduino A 的串行仿真器显示正确的值,但第二个总是 0.00。 这是我的第一个 Arduino 代码:

int pin = 2;
int TempPin = A0;
int pinAnalog = 3;

void setup() {
   pinMode(3, OUTPUT);
   Serial.begin(9600);
}
void loop() {
   float tmp = analogRead(TempPin);
   float Result = (tmp/1024.0) * 500;
   Serial.println(Result);
   analogWrite(pinAnalog, Result);
   delay(3000);
}

这是我的第二个 Arduino 代码:

void setup() {
    Serial.begin(9600);
}
void loop() {
    float res = analogRead(A0);
    Serial.println(res);
    delay(3000);
}

我的项目或代码有什么问题?

【问题讨论】:

  • 我猜 C1 = 10nF 太小了,无法为 PWM 频率提供有用的 RC。你有万用表或示波器吗?顺便说一句:这似乎不是一个编程问题。
  • float 是错误的数据类型:analogWrite 将一个字节( 0 .. 255 )作为值。 analogRead 返回一个 int。

标签: arduino arduino-uno arduino-ide


【解决方案1】:

我知道这只是一个练习,因为 PWM 本身不适合为模拟读取提供数据。 (如果你真的想用它来传输数据,最好测量脉冲持续时间。)

对于 400 Hz PWM,您需要一个 RC 值,例如20 ms 合理过滤 PWM 脉冲。

(例如 1µF * 20k)

当您在 3 秒循环中工作时,更大的值也可以。

顺便说一句:发件人可以简化为:

const byte inPin = A0;
const byte outPin = 3;

void setup() {
   Serial.begin(9600);
}
void loop() {
  byte tmp = analogRead(inPin)/4;  // 0 .. 255
  analogWrite(outPin, tmp); 
  Serial.println((int)tmp);
  delay(3000);
}

【讨论】:

  • 你能解释一下我应该使用多少电容和电阻吗?以及第 2 行中脉冲持续时间的测量是什么意思?
  • 您需要一点电气知识(或 LTSPICE 模拟),并且您会知道确切的数字无关紧要,但 1:1000 的系数会有所不同。
  • 使用pulseIn()得到一个PWM信号的HIGH和LOW相位时间之间的关系(没有电子低通滤波)
猜你喜欢
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
相关资源
最近更新 更多