如何在aurduino flex传感器中以45度开始点亮?

时间:2016-09-26 08:06:39

标签: arduino arduino-uno led arduino-ide circuit

当柔性传感器弯曲时,我想让LED灯条逐渐亮起。但我希望当柔性传感器为45度时,LED灯条开始亮起。 我希望LED灯带在45度之前关闭。 这是我在Arduino的代码。

const int ledPin = 3;   //pin 3 has PWM funtion
const int flexPin = A0; //pin A0 to read analog input
int degree; //save analog value
int sensor;
void setup(){

  pinMode(ledPin, OUTPUT);  //Set pin 3 as 'output'
  Serial.begin(9600);       //Begin serial communication
}
void loop(){

  sensor = analogRead(flexPin);   //Read and save analog value from potentiometer


  degree = map(sensor, 460, 850, 45, 90);


  Serial.print("analog input: ");
    Serial.print(sensor,DEC);
  Serial.print(" degrees: ");
    Serial.println(degree,DEC); 
     Serial.print(" ---------------------------------- ");
  analogWrite(ledPin, degree);          //Send PWM value to led
  delay(50);                          //Small delay

}

但是这没用,所以我尝试了这个:

const int ledPin = 3;   //pin 3 has PWM funtion
const int flexPin = A0; //pin A0 to read analog input
int degree; //save analog value
int sensor;
void setup(){

  pinMode(ledPin, OUTPUT);  //Set pin 3 as 'output'
  Serial.begin(9600);       //Begin serial communication
}
void loop(){

  sensor = analogRead(flexPin);   //Read and save analog value from potentiometer

  if(degree<45){

    (sensor = 0);
  }

  degree = map(sensor, 460, 850, 0, 90);


  Serial.print("analog input: ");
    Serial.print(sensor,DEC);
  Serial.print(" degrees: ");
    Serial.println(degree,DEC); 
     Serial.print(" ---------------------------------- ");
  analogWrite(ledPin, degree);          //Send PWM value to led
  delay(50);                          //Small delay

}

这并没有奏效。它们从0度开始点亮,并在接近90度时获得更多。但我希望它在45度之前关闭,开始以45度点亮,并在接近90度时获得更多。如果你能帮助我,我将非常感激。我是如此疲惫,试着去哪里。

1 个答案:

答案 0 :(得分:3)

一个问题是,当地图功能期望值在460和850范围内时,您将传感器设置为零。当低于45度时,可能有助于将默认传感器值更改为预期的最低值范围(460.)

你也可以删除你的if条件并稍后在程序中将其移动:

if (degree < 45) {
  digitalWrite(ledPin, LOW);
 }
else {
   analogWrite(ledPin, degree);
}

值得注意的是,模拟读取功能使用0到255之间的输入来确定引脚的占空比。话虽如此,您可以创建另一个变量并使用它来映射或以其他方式更改度数值,以便更好地利用此范围。即:

int freq = map(degree, 0, 90, 0, 255);