将模拟值从Arduino a发送到Arduino B的模拟引脚

将模拟值从Arduino a发送到Arduino B的模拟引脚,arduino,arduino-uno,arduino-ide,Arduino,Arduino Uno,Arduino Ide,我试图读取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() {

我试图读取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);
}
void setup() {
    Serial.begin(9600);
}
void loop() {
    float res = analogRead(A0);
    Serial.println(res);
    delay(3000);
}
这是我的第二个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);
}
void setup() {
    Serial.begin(9600);
}
void loop() {
    float res = analogRead(A0);
    Serial.println(res);
    delay(3000);
}

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

我知道这只是一个练习,因为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);
}

我想C1=10nF太小了,不足以作为PWM频率的有用RC。你有万用表或示波器吗?顺便说一句:这似乎不是编程问题。
float
是错误的数据类型:analogWrite将字节(0..255)作为值。analogRead返回一个整数。你能解释一下我应该使用多少电容和电阻吗?第2行中脉冲持续时间的测量是什么意思?你需要一点电学知识(或LTSPICE模拟),你会知道准确的数字是不相关的,但系数1:1000会产生差异。使用
pulseIn()
获得PWM信号的高相位时间和低相位时间之间的关系(无电动低通滤波)