Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed MODSERIAL QEI
main.cpp
- Committer:
- sivuu
- Date:
- 2016-10-10
- Revision:
- 14:4b934ac37656
- Parent:
- 12:7903c0e55cd7
- Child:
- 15:706e18b43dd6
File content as of revision 14:4b934ac37656:
#include "mbed.h" //standaard bieb mbed
#include "QEI.h" //bieb voor encoderfuncties in c++
#include "MODSERIAL.h" //bieb voor modserial
InterruptIn sw3(SW3);
DigitalIn encoder1A(D13);
DigitalIn encoder1B(D12);
DigitalIn button_cw(D11);
DigitalIn encoder2A(D15);
DigitalIn encoder2B(D14);
DigitalIn button_ccw(D9);
DigitalOut ledcw(D10);
DigitalOut ledccw(D2);
MODSERIAL pc(USBTX, USBRX);
DigitalOut richting_motor1(D4);
PwmOut pwm_motor1(D5);
DigitalOut richting_motor2(D7);
PwmOut pwm_motor2(D6);
int n = 0; //start van de teller wordt op nul gesteld
void SwitchN() { // maakt simpele functie die 1 bij n optelt
n++;
}
//constanten voor de encoder
const int CW = 2.5; //definitie rechtsom 'lage waarde'
const int CCW =0; //definitie linksom 'hoge waarde'
const float gearboxratio=131; // gearboxratio van encoder naar motor
const int rev_rond=32; // aantal revoluties per omgang van de encoder
int main()
{
pc.baud(115200); // zorgt voor de link voor putty, 115200 is snelheid
QEI Encoder(D12,D13, NC, rev_rond); // maakt een encoder aan! D12/D13 ingangen, rev_rond zijn aantal pulsen per revolutie! Bovenaan in te stellen.
QEI Encoder2(D15,D14, NC, rev_rond);
float counts_encoder1; //variabele counts aanmaken
float rev_counts_motor1; //variabele motor rondjes aanmaken in radialen!!
float counts_encoder2;
float rev_counts_motor2;
const float a=1.0;
const float b=10.0;
while (true) { // zorgt er voor dat de code oneindig doorgelopen wordt
sw3.fall(&SwitchN); // zorgt er voor dat void switch wordt gedaan als switch 3 wordt ingedrukt
if (button_cw==0) // als s ingedrukt wordt gebeurd het volgende
{
if (n%2==0) // als s ingedrukt wordt en het getal is even gebeurd het onderstaande
{
pc.printf("n is even \n\r"); // print lijn "n is even"
pc.printf("up \n\r"); // print lijn "up"
richting_motor1 = 1;
pwm_motor1 = a;
ledcw=1; ledccw=0;
counts_encoder1 = Encoder.getPulses(); //tellen van de pulsen in
rev_counts_motor1=counts_encoder1/(gearboxratio*rev_rond); //berekenen van het aantal rondjes van motor. Gedeeld door gearboxratio en rev rond, om naar motorrondjes te gaan in plaats van pulsen van encoder!
pc.printf("motor rondjes omhoog: %f \r\n", rev_counts_motor1); //weergeven
}
else // als s is ingedrukt maar het getal is niet even (dus oneven) gebeurdt het onderstaande
{
pc.printf("n is odd \n\r"); // print lijn "n is odd"
pc.printf("left \n\r"); // print lijn "left"
richting_motor2 = 1;
pwm_motor2 = b;
ledcw=1;
ledccw=1;
counts_encoder2 = Encoder.getPulses(); //tellen van de pulsen in
rev_counts_motor2=counts_encoder2/(gearboxratio*rev_rond); //weergeven van het aantal rondjes
pc.printf("motor rondjes omhoog: %f \r\n", rev_counts_motor2);
}
}
else if (button_ccw==0) // als d ingedrukt wordt gebeurd het volgende
{
if (n%2==0) // als d is ingedrukt en n is even dan gebeurd het volgende
{
pc.printf("n is even \n\r"); // print lijn "n is even"
pc.printf("down \n\r"); // print lijn "down"
richting_motor1 = 0;
pwm_motor1 = a;
ledccw=1; ledcw=0;
counts_encoder1 = Encoder.getPulses(); //tellen van de pulsen in
rev_counts_motor1=counts_encoder1/(gearboxratio*rev_rond); //weergeven van het aantal rondjes
pc.printf("motor rondjes omhoog: %f \r\n", rev_counts_motor1);
}
else // als d is ingedrukt maar het getal is niet even (dus oneven) gebeurdt het onderstaande
{
pc.printf("n is odd \n\r"); // print lijn "n is odd"
pc.printf("right \n\r"); // print lijn "right"
richting_motor2 = 0;
pwm_motor2 = b;
ledccw=1; ledcw=0;
counts_encoder2 = Encoder.getPulses(); //tellen van de pulsen in
rev_counts_motor2=counts_encoder2/(gearboxratio*rev_rond); //weergeven van het aantal rondjes
pc.printf("motor rondjes naar rechts: %f \r\n", rev_counts_motor2);
}
}
else{
pc.printf("motor staat stil \n\r");
pwm_motor2=0;
pwm_motor1=0;
ledccw=0; ;ledcw=0;
}
}
}