Makeblock-library-for-Arduino  V3.2.4
It's a library for arduino application developers
Me_Auriga_encoder_pid_pos.ino
/**
* \par Copyright (C), 2012-2016, MakeBlock
* @file Me_Auriga_encoder.ino
* @author MakeBlock
* @version V1.0.0
* @date 2016/07/14
* @brief Description: this file is sample code for auriga encoder motor device.
*
* Function List:
* 1. uint8_t MeEncoderOnBoard::getPortB(void);
* 2. uint8_t MeEncoderOnBoard::getIntNum(void);
* 3. void MeEncoderOnBoard::pulsePosPlus(void);
* 4. void MeEncoderOnBoard::pulsePosMinus(void);
* 5. void MeEncoderOnBoard::setMotorPwm(int pwm);
* 6. double MeEncoderOnBoard::getCurrentSpeed(void);
* 7. void MeEncoderOnBoard::setSpeedPid(float p,float i,float d);
* 8. void MeEncoderOnBoard::setPosPid(float p,float i,float d);
* 7. void MeEncoderOnBoard::setPosPid(float p,float i,float d);
* 8. void MeEncoderOnBoard::setPulse(int16_t pulseValue);
* 9. void MeEncoderOnBoard::setRatio(int16_t RatioValue);
* 10. void MeEncoderOnBoard::moveTo(long position,float speed,int16_t extId,cb callback);
* 11. void MeEncoderOnBoard::loop(void);
* 12. long MeEncoderOnBoard::getCurPos(void);
*
* \par History:
* <pre>
* <Author> <Time> <Version> <Descr>
* Mark Yan 2016/07/14 1.0.0 build the new
* </pre>
*/
#include <MeAuriga.h>
MeEncoderOnBoard Encoder_1(SLOT1);
MeEncoderOnBoard Encoder_2(SLOT2);
void isr_process_encoder1(void)
{
if(digitalRead(Encoder_1.getPortB()) == 0)
{
Encoder_1.pulsePosMinus();
}
else
{
Encoder_1.pulsePosPlus();;
}
}
void isr_process_encoder2(void)
{
if(digitalRead(Encoder_2.getPortB()) == 0)
{
Encoder_2.pulsePosMinus();
}
else
{
Encoder_2.pulsePosPlus();
}
}
void setup()
{
attachInterrupt(Encoder_1.getIntNum(), isr_process_encoder1, RISING);
attachInterrupt(Encoder_2.getIntNum(), isr_process_encoder2, RISING);
Serial.begin(115200);
//Set PWM 8KHz
TCCR1A = _BV(WGM10);
TCCR1B = _BV(CS11) | _BV(WGM12);
TCCR2A = _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS21);
Encoder_1.setPulse(9);
Encoder_2.setPulse(9);
Encoder_1.setRatio(39.267);
Encoder_2.setRatio(39.267);
Encoder_1.setPosPid(1.8,0,1.2);
Encoder_2.setPosPid(1.8,0,1.2);
Encoder_1.setSpeedPid(0.18,0,0);
Encoder_2.setSpeedPid(0.18,0,0);
}
void loop()
{
if(Serial.available())
{
char a = Serial.read();
switch(a)
{
case '0':
Encoder_1.moveTo(0,50);
Encoder_2.moveTo(0,50);
break;
case '1':
Encoder_1.moveTo(360);
Encoder_2.moveTo(-360);
break;
case '2':
Encoder_1.moveTo(1800);
Encoder_2.moveTo(-1800);
break;
case '3':
Encoder_1.moveTo(3600);
Encoder_2.moveTo(-3600);
break;
case '4':
Encoder_1.moveTo(-360);
Encoder_2.moveTo(360);
break;
case '5':
Encoder_1.moveTo(-1800);
Encoder_2.moveTo(1800);
break;
case '6':
Encoder_1.moveTo(-3600);
Encoder_2.moveTo(3600);
break;
default:
break;
}
}
Encoder_1.loop();
Encoder_2.loop();
Serial.print("Spped 1:");
Serial.print(Encoder_1.getCurrentSpeed());
Serial.print(" ,Spped 2:");
Serial.print(" ,CurPos 1:");
Serial.print(Encoder_1.getCurPos());
Serial.print(" ,CurPos 2:");
Serial.println(Encoder_2.getCurPos());
}