Постоянно увеличивается число
42208
96220
150228
204236
258240
330252
384264
438268
При отключение приемника, счет останавливается
- Код: Выделить всё • Развернуть
int injPin = 3; //Pin connected to injector's ground wire
volatile unsigned long injTime; // When accessing this in setup or loop (or anything called by either) interrupts must be disabled
void setup()
{
pinMode(injPin, INPUT);
digitalWrite (injPin, HIGH); //Pull-up pin - as our injector is driven by connecting it to ground, i suppose i need to pull-up pin to get it's value as 1 when injector is turned off
attachInterrupt(1, pik, CHANGE); //interrupt on front changing
Serial.begin(9600);
}
void loop()
{
Serial.println(injTime);
delay (50);
}
void pik()
{
unsigned long injTime1; //Time of front raising
unsigned long injTime2; //Time of front falling
if ( digitalRead( injPin ) == LOW ) //Or i need to digitalRead it first? YES.
{
injTime1 = micros(); //get time of pulse going down
}
else
{
injTime2 = micros(); //get time of pulse going up
injTime = injTime2 - injTime1; //measure time between down and up
}
}
Добавлено спустя 15 минут 39 секунд:Выдает
PinChangeInt ReciverReading test
И все, тишина, не на что не реагирует.
Добавлено спустя 21 минуту 11 секунд:NeON79 писал(а):http://www.nest.org.ru/2011/12/17/ardiuno-%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0-ppmint/#more-4247
https://github.com/kiuz/PPM-Signal-Reader-ARDUINOТО, что нагуглилось навскидку. Дайте знать, что из всего предложенного наиболее "оно". Спасибо.
Эти примеры считывают смешанный PPM типа как выходит из тренерского разъема на передатчике.
По первой ссылки при компиляции ругается на
- Код: Выделить всё • Развернуть
In file included from D:\arduino-0021\libraries\PPMint\PPMint.cpp:7:
D:\arduino-0021\libraries\PPMint/PPMint.h:10:21: error: Arduino.h: No such file or directory
In file included from D:\arduino-0021\libraries\PPMint\PPMint.cpp:7:
D:\arduino-0021\libraries\PPMint/PPMint.h:24: error: 'uint8_t' does not name a type
D:\arduino-0021\libraries\PPMint/PPMint.h:25: error: 'uint8_t' does not name a type
D:\arduino-0021\libraries\PPMint/PPMint.h:27: error: 'boolean' does not name a type
D:\arduino-0021\libraries\PPMint\PPMint.cpp: In member function 'void PPMint::setup()':
PPMint:19: error: 'prevRealRaw' was not declared in this scope
PPMint:20: error: 'currentChannel' was not declared in this scope
PPMint:22: error: 'sync' was not declared in this scope
PPMint:24: error: 'INPUT' was not declared in this scope
PPMint:24: error: 'pinMode' was not declared in this scope
PPMint:26: error: 'RISING' was not declared in this scope
PPMint:26: error: 'attachInterrupt' was not declared in this scope
PPMint:28: error: 'delay' was not declared in this scope
D:\arduino-0021\libraries\PPMint\PPMint.cpp: In member function 'void PPMint::PPMinterrupt()':
PPMint:34: error: 'micros' was not declared in this scope
PPMint:38: error: 'sync' was not declared in this scope
PPMint:39: error: 'currentChannel' was not declared in this scope
PPMint:42: error: 'sync' was not declared in this scope
PPMint:44: error: 'currentChannel' was not declared in this scope
PPMint:46: error: 'currentChannel' was not declared in this scope
Второй вариант с kiuz / PPM-Signal-Reader-ARDUINO работает,
надо проверить по скорости будет успевать или нет.
Добавлено спустя 49 минут 50 секунд:Второй вариант с kiuz / PPM-Signal-Reader-ARDUINO работает,
- Код: Выделить всё • Развернуть
//initial value
initialsignal = pulseIn(channelpin, HIGH);
delay(2000);
В итоге тормозит.
Добавлено спустя 2 часа 52 минуты 35 секунд:Просмотрев выше данные ссылки и разобравшись немного с прерываниями и временем, вот что получилось.
На прерывании, считывает с D3, используя INT1, для одного канала.
Если надо два, просто добавляем второй канал на D2 INT0 и тоже все работает.
Как добавить еще каналов, не разбирался, ту что нужно было выполнить задачу, реализовал, все работает, четко с двумя каналами.
Добавлены строчки
- Код: Выделить всё • Развернуть
if(ms>2200) // fix time bug
ms=tmp; // fix time bug
tmp=ms; // fix time bug
Без них через 21-22 опроса вылазит время в районе 16384, поэтому ввел эти три строки чтобы убивать его.
Почему оно выскакивает, что то внутренее еще работает и дает задержку?
- Код: Выделить всё • Развернуть
// PPM read from receiver, D3, 1 ch, <frwind>
int Pin = 3; //PPM in for INT1
volatile unsigned long lt, ct, ms,tmp;
void setup(){
pinMode(Pin, INPUT);
digitalWrite (Pin, HIGH); //Pull-up pin
attachInterrupt(1, ppm, CHANGE); //PPM read interrupt
Serial.begin(9600);
}
void loop(){
Serial.println(ms); // ms = PPM ms
}
void ppm() { // PPM read interrupt
ct = micros(); // read current time
ms=ct-lt; // ms = current time - last time
lt=ct; // last time
if(ms>2200) // fix time bug
ms=tmp; // fix time bug
tmp=ms; // fix time bug
}