Skip to content

Commit

Permalink
rc channel pwm in. completed
Browse files Browse the repository at this point in the history
  • Loading branch information
Christopher Ávila Holguín committed Apr 4, 2016
1 parent 6ee3b78 commit 3cb4cca
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 52 deletions.
72 changes: 24 additions & 48 deletions adapters/rc/rc.h
Original file line number Diff line number Diff line change
@@ -1,70 +1,46 @@
#pragma once

uint16_t m;
volatile uint16_t s;

void change( void )
class RCChannel
{
if( digitalRead( 7 ) )
s = 1;//micros() - m;
else
m = micros();
}
public:
virtual void print() = 0;
};


struct RCChannel
template<int pin>
class RCChannelPin : public RCChannel
{
uint8_t pin;
uint16_t value;
public:

RCChannel( uint8_t pin = 0 )
{
this->value = 0;
this->pin = pin;
volatile static uint32_t last_value;
volatile static uint32_t last_high;

if( pin != 0 )
{
pinMode( pin, INPUT );
attachInterrupt( digitalPinToInterrupt( pin ), change, CHANGE );
}
}

void read()
void static rising( void )
{
if( pin != 0 && s != 0 )
{
value = s;
s = 0;
}
last_high = micros();
}
};

template<uint8_t num_channels>
class RC
{
RCChannel rc_channels[ num_channels ];

public:

RC( uint8_t pins[ num_channels ] )
void static falling( void )
{
for( uint8_t i = 0 ; i < num_channels ; i ++ )
rc_channels[ i ] = RCChannel( pins[ i ] );
last_value = micros() - last_high;
}

void loop()
RCChannelPin()
{
for( uint8_t i = 0 ; i < num_channels ; i ++ )
rc_channels[ i ].read();
pinMode( pin, INPUT );
attachInterrupt( digitalPinToInterrupt( pin ), rising, RISING );
attachInterrupt( digitalPinToInterrupt( pin ), falling, FALLING );
}

void print()
{
for( uint8_t i = 0 ; i < num_channels ; i ++ )
{
Serial.print( rc_channels[ i ].value );
Serial.print( "\t" );
}
Serial.print( last_value );
Serial.print( "\t" );
}
};

template<int pin>
volatile uint32_t RCChannelPin<pin>::last_value = 0;

template<int pin>
volatile uint32_t RCChannelPin<pin>::last_high = 0;
4 changes: 2 additions & 2 deletions scheduler/scheduler.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ class Scheduler
void print( void )
{
if( last_end > last_start )
Serial.print( "--" );
else
Serial.print( 1000000 / ( last_end - last_start ) );
else
Serial.print( 0 );

Serial.print( "\t" );
}
Expand Down
19 changes: 17 additions & 2 deletions visualpilot.ino
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,28 @@
#include "./adapters/imu/hmc5883l.h"
#include "./adapters/imu/bmp180.h"

#include "./adapters/rc/rc.h"

#include "./scheduler/scheduler.h"

ADXL345 * a;
L3GD20 * g;
HMC5883L * m;
BMP180 * b;

Scheduler * s;

RCChannel * in_t, * in_x, * in_y, * in_z;

void setup(void) {
Serial.begin( 9600 );
while( !Serial );

in_t = new RCChannelPin<D5>();
in_x = new RCChannelPin<D6>();
in_y = new RCChannelPin<D7>();
in_z = new RCChannelPin<D8>();

Wire.begin();
Wire.setClock( 400000L );

Expand All @@ -28,17 +38,22 @@ void setup(void) {
}

void loop(void) {
s->loop();
a->loop();
g->loop();
m->loop();
b->loop();
s->loop();

s->print();
a->print();
g->print();
m->print();
b->print();
s->print();

in_t->print();
in_x->print();
in_y->print();
in_z->print();

Serial.println();
}
Expand Down

0 comments on commit 3cb4cca

Please sign in to comment.