2013-12-22 2 views
0

Я пытаюсь подключить свою плату arduino к моему RC-ресиверу. У меня есть приемник с использованием довольно стандартного пакета 4xAA, и у меня есть один канал приемника, подключенный к порту 7 на arduino (я попробовал несколько разных контактов для этого). Код ниже просто возвращает числа в диапазоне 8000 (иногда 9000, а иногда и 7000), но это не изменяется, когда я применяю элементы управления от передатчика к каналу. Что более странно, так это то, что цифры возвращаются, даже когда провод к порту 7 отсоединен от приемника (но все еще прикреплен к ардуино). Имеет ли это смысл? Есть предположения?Arduino pulseIn возвращает странные значения

int pin = 7; 
unsigned long duration; 

void setup() 
{ 
    pinMode(pin, INPUT); 
    Serial.begin(9600); // Pour a bowl of Serial 
} 

void loop() 
{ 
    duration = pulseIn(pin, LOW); 
    Serial.print("Channel 1:"); // Print the value of 
    Serial.println(duration);  // each channel 
} 

ответ

1

Чтобы уточнить, вы хотите измерить ширину импульса сигнала, который выводит ваш приемник R/C? Для этого вам необходимо использовать прерывания. То, как я сделал это следующим образом:

volatile int16_t pwm = 0; //pwm value 
volatile int16_t trig = 0; //timer value 
#define pin 7 //pin the interrupt is attached to 

void intHandler() //function to call on interrupt 
{ 
    if(digitalRead(pin)) //if the pin is HIGH, note the time 
    { 
    trig = micros(); 
    } 
    else 
    { 
    pwm = micros()-trig; //if it is low, end the time 
    } 
} 

void setup(){ 
    pinMode(pin, INPUT); //set the pin to input 
    attachInterrupt(pin,intHandler,CHANGE); //attach the interrupt function "intHandler" to "pin" whenever the state changes 
    Serial.begin(9600); //begin serial comms 
} 

void loop() 
{ 

    Serial.print("PWM = "); 
    Serial.println(pwm); 
} 

Обратите внимание, что это возможно, работает только на Arduino Due, который распространившийся обработку прерываний возможности. Однако это должно дать вам общее представление о том, как это сделать. Возможность прерывания доступна только на certain pins, и, возможно, поэтому функция pulseIn не работает для вас.

+0

Это имеет смысл. Я попробую. Благодаря! – kschembri

+0

Если бы это сработало для вас, я был бы признателен за его ответ. Если нет, посмотрим, сможем ли мы это понять. – achase90

+0

Hi achase90, ваше решение работает, однако реальная проблема была вызвана неправильной почтой с моей стороны. Это вызывало странные числа, а не сам код. Я проголосовал за вас, потому что ваше решение будет работать в долгосрочной перспективе, но не решит ближайшую проблему :) – kschembri

Смежные вопросы