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.
main.cpp
- Committer:
- Jitse_Giesen
- Date:
- 2017-10-23
- Revision:
- 0:3e98322ac0e2
- Child:
- 1:224bbe370e19
File content as of revision 0:3e98322ac0e2:
#include "mbed.h"
#include "math.h"
DigitalOut led(LED_RED);
DigitalOut ledd(LED_GREEN);
InterruptIn button(SW2);
Timer t;
Serial pc(USBTX, USBRX);
int Xin=0;
float huidigetijdX;
void ledtX(){
t.reset();
Xin++;
pc.printf("Xin is %i\n",Xin);
ledd=0;
led=1;
wait(0.5);
ledd=1;
led=0;
}
int tellerX(){
ledd=1;
pc.baud(115200);
while(true){
button.fall(ledtX);
/*if (EMG>threshold){
Piek(); // dit is wat je uiteindelijk wil dat er staat
}*/
t.start();
huidigetijdX=t.read();
if (huidigetijdX>5){
led=1; // ga door naar het volgende programma
return 0;
}
}
}
int Yin=0;
float huidigetijdY;
void ledtY(){
t.reset();
Yin++;
pc.printf("Yin is %i\n",Yin);
ledd=0;
led=1;
wait(0.5);
ledd=1;
led=0;
}
int tellerY(){
t.reset();
ledd=1;
pc.baud(115200);
while(true){
button.fall(ledtY);
/*if (EMG>threshold){
Piek(); // dit is wat je uiteindelijk wil dat er staat
}*/
t.start();
huidigetijdY=t.read();
if (huidigetijdY>5){
led=1;
return 0; // ga door naar het volgende programma
}
}
}
float Pox = 0;
float Poy = 0;
float Pbx = 0;
float Pby = 887;
float Prx = 768;
float Pry = 443;
float Pex=121;
float Pey=308;
float diamtrklosje=20;
float pi=3.14159265359;
float Lou;
float Lbu;
float Lru;
float roto;
float rotb;
float rotr;
float counto;
float countb;
float countr;
float Psx;
float Psy;
float Vex;
float Vey;
float Kz=1; // nadersnelheid instellen
float modVe;
float Vmax=20;
float Pstx;
float Psty;
float T=0.02;//seconds
Ticker loop;
float touwlengtes(){
Lou=sqrt(pow((Pstx-Pox),2)+pow((Psty-Poy),2)); // rekent touwlengtes uit die nodig zijn voor de nieuwe positie aan de hand van de ingegeven coördinaten en de posities van de palen
Lbu=sqrt(pow((Pstx-Pox),2)+pow((Psty-Pby),2));
Lru=sqrt(pow((Pstx-Prx),2)+pow((Psty-Pry),2));
return 0;
}
float turns(){
float omtrekklosje=diamtrklosje*pi; // omzetten van touwlengte naar rotaties
roto=Lou/omtrekklosje;
rotb=Lbu/omtrekklosje;
rotr=Lru/omtrekklosje;
counto=roto*4200; // omzetten van rotaties naar counts
countb=rotb*4200;
countr=rotr*4200;
return 0;
}
float Pst(){
Pstx=Pex+Vex*T;
Psty=Pey+Vey*T;
touwlengtes();
Pex=Pstx; //Dit is nog een aanname. Moet zijn: read the encoder and put the real position as the Pe for the next step
Pey=Psty;
//pc.printf("een stappie verder\n\r x=%.2f\n\r y=%.2f\n\r",Pstx,Psty);
//pc.printf("met lengtes:\n\r Lo=%.2f Lb=%.2f Lr=%.2f\n\r",Lou,Lbu,Lru);
turns();
//pc.printf("rotatie per motor:\n\r o=%.2f b=%.2f r=%.2f\n\r",roto,rotb,rotr);
pc.printf("counts per motor:\n\r o=%.2f b=%.2f r=%.2f\n\r",counto,countb,countr);
/*float R;
R=Vex/Vey; // met dit stukje kan je zien dat de verhouding tussen Vex en Vey constand is en de end efector dus een rechte lijn maakt
pc.printf("\n\r R=%f",R);*/
return 0;
}
float Ps(){
Psx=(Xin)*30+121;
Psy=(Yin)*30+308;
pc.printf("x=%.2f \n\r y=%.2f \n\r",Psx,Psy);
return 0;
}
void Ve(){
Vex=Kz*(Psx-Pex);
Vey=Kz*(Psy-Pey);
modVe=sqrt(pow(Vex,2)+pow(Vey,2));
if(modVe>Vmax){
Vex=(Vex/modVe)*Vmax;
Vey=(Vey/modVe)*Vmax;
}
Pst();
pc.printf("Vex=%.2f \r\n Vey=%.2f \r\n",Vex,Vey);
if((abs(Vex)<0.01f)&&(abs(Vey)<0.01f)){
pc.printf("i'm done bitches"); // hier moet komen te staan dat die door moet naar het volgende programma (zakken)
}
}
int calculator(){
pc.baud(115200);
Ps();
loop.attach(&Ve,0.02);
return 0;
}
int zakken(){
pc.printf("zak zak zak zak zak maar lekker door door door door");
return 0;
}
int main()
{
tellerX();
tellerY();
calculator();
//zakker();
return 0;
}