2016-09-26 1 views
2

Я хочу, чтобы светодиодные полосы постепенно загорались, когда изгиб датчика изгибается. Но я хочу, чтобы светодиодные полосы начали загораться, когда датчик гибкости 45 градусов. И я хочу, чтобы светодиодные полосы были выключены до 45 градусов. Вот мой код, который находится в Arduino.Как начать освещение при 45 градусах в датчике сгибания aurduino?

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 градусам. Я буду так благодарен, если вы поможете мне. Я так измучен, пытаясь и никуда не денусь.

ответ

3

Одна из проблем заключается в том, что вы устанавливаете свой датчик на ноль, когда функция карты ожидает значения в диапазоне 460 и 850. Это может помочь изменить значение датчика по умолчанию ниже 45 градусов до самого низкого значения в ожидаемый диапазон (460.)

можно также удалить, если состояние и переместить его позже в программе так:

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

Это может быть также стоит отметить, что аналог чтения функция используется при вводе между 0 до 255 для определения рабочего цикла штыря. С учетом сказанного вы можете создать другую переменную и использовать ее для сопоставления или изменения значения степени, чтобы она лучше использовала этот диапазон. i.e:

int freq = map(degree, 0, 90, 0, 255); 
Смежные вопросы