我最近得到了一个Arduino Uno Wifi(用Wifilink firmware闪存来支持UDP),我创建了一个简单的草图来从flex传感器读取模拟值。
我使用下面的代码(从官方网站复制粘贴)
const int FLEX_PIN = A4; // Pin connected to voltage divider output
// Measure the voltage at 5V and the actual resistance of your
// 47k resistor, and enter them below:
const float VCC = 4.98; // Measured voltage of Ardunio 5V line
const float R_DIV = 47500.0; // Measured resistance of 3.3k resistor
// Upload the code, then try to adjust these values to more
// accurately calculate bend degree.
const float STRAIGHT_RESISTANCE = 37300.0; // resistance when straight
const float BEND_RESISTANCE = 90000.0; // resistance at 90 deg
void setup() {
Serial.begin(9600);
pinMode(FLEX_PIN, INPUT);
}
void loop() {
// Read the ADC, and calculate voltage and resistance from it
int flexADC = analogRead(FLEX_PIN);
float flexV = flexADC * VCC / 1023.0;
float flexR = R_DIV * (VCC / flexV - 1.0);
Serial.println("Resistance: " + String(flexR) + " ohms");
// Use the calculated resistance to estimate the sensor's
// bend angle:
float angle = map(flexR, STRAIGHT_RESISTANCE, BEND_RESISTANCE, 0, 90.0);
Serial.println("Bend: " + String(angle) + " degrees");
Serial.println();
delay(500);
}
代码在Arduino Uno Wifi中不起作用:它没有显示弯曲度的任何变化。但是,它适用于我测试的另一个Arduino Uno。
我也进行了测试,我发现Arduino Uno Wifi中的引脚4和5由于某种原因产生电流,即使是一个空脚本,能够点亮LED(而引脚0,1,2,3不亮它)。
这同样适用于传感器的值。例如,如果我将flex传感器放在模拟引脚0中,那么当我弯曲它时值会改变(例如362读取不弯曲和600弯曲,这很好)。
另一方面,当我将传感器的引脚置于A4或A5时,从1023(起始值)变为982,无论是否弯曲传感器,它都不会发生变化。
我最近被告知这些引脚是有线/ TWI / I2C引脚。有什么方法可以从那些引脚读取模拟输入吗?