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: Encoder HIDScope MODSERIAL- mbed-dsp mbed
Fork of PROJECT_FINAL by
Revision 1:d44a866de64f, committed 2014-10-31
- Comitter:
- Hooglugt
- Date:
- Fri Oct 31 13:22:09 2014 +0000
- Parent:
- 0:99cbc87af37c
- Child:
- 2:10dd6a88dfd7
- Commit message:
- verbetering op GUI, factor 0.6, led timing, etc.
Changed in this revision
| PROJECT_main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/PROJECT_main.cpp Fri Oct 31 10:31:02 2014 +0000
+++ b/PROJECT_main.cpp Fri Oct 31 13:22:09 2014 +0000
@@ -6,16 +6,17 @@
#define TSAMP 0.001 // sample freq encoder motor
#define TIMEB4NEXTCHOICE 1 // sec keuzelampje blijft aan
-#define TIMEBETWEENBLINK 200 // sec voor volgende blink
+#define TIMEBETWEENBLINK 100 // sec voor volgende blink
#define TSAMP_EMG 0.002 //sample frequency emg
#define KALIBRATIONTIME 1000 // 10 sec voor bepalen van maximale biceps/triceps waarde
-
+#define FACTOR 0.6 //factor*max_waarde = threshold emg
//Define objects
AnalogIn emg0(PTB1); //Analog input biceps
AnalogIn emg1(PTB2); //Analog input triceps
Ticker log_timer; //sample emg
-Ticker blink; //ledjes aan/uit
+Ticker blink; //ledjes aan/uit
+Ticker blink2; //extra tikker zodat kalbi en kaltri tegelijkertijd aankunnen
Ticker looptimer; //motor regelaar
MODSERIAL pc(USBTX,USBRX);
@@ -96,13 +97,10 @@
float pwm = 0;
float omrekenfactor1 = 0.0028035714; // 6.28/(32*70)
-float omrekenfactor2 = 0.0015213178; // 6.28/(24*172);
+float omrekenfactor2 = 0.0015213178; // 6.28/(24*172);
-float setpoint1 = 8; // te behalen speed van motor1 (37D)
-float setpoint2 = 3.14; // te behalen hoek van motor2 (25D)
-
-//float setpoint1 = 0; eigenlijk moeten deze waarden later in de if-statement bij motorcontrol bepaald worden
-//float setpoint2 = 0;
+float setpoint1 = 0; //te behalen speed van motor1 (37D)
+float setpoint2 = 0; //te behalen hoek van motor2 (25D)
float Kp1 = 1.10; //DEZE KP1 EN KP1 ZIJN NOG NIET DEFINITIEF
float Ki1 = 0.20; //Kp en Ki van motor1, voor de slag
@@ -272,7 +270,7 @@
//motorarm naar nul-positie
blink.attach(kalbi, 0.2);
- blink.attach(kaltri, 0.2);
+ blink2.attach(kaltri, 0.2);
//calibration motor 2
pwm_motor2.write(0.6); //lage PWM
@@ -301,6 +299,7 @@
}
emgcal:
blink.detach();
+ blink2.detach();
dir1 = dir2 = dir3 = 1;
for1 = for2 = for3 = 1;
pc.printf("kalmoarm ");
@@ -314,29 +313,28 @@
bi_max = bi_result;
}
wait (0.01);
-
- blink.detach();
- dir1 = dir2 = dir3 = 1;
- pc.printf("kalbi ");
- wait (1);
+ }
+ blink.detach();
+ dir1 = dir2 = dir3 = 1;
+ pc.printf("kalbi ");
+ wait (1);
- //triceps kalibratie
- blink.attach(kaltri, 0.2);
- for (int kaltime = 0; kaltime<KALIBRATIONTIME; kaltime++) {
- if (tri_max < tri_result) {
- tri_max = tri_result;
- }
- wait (0.01);
+ //triceps kalibratie
+ blink.attach(kaltri, 0.2);
+ for (int kaltime = 0; kaltime<KALIBRATIONTIME; kaltime++) {
+ if (tri_max < tri_result) {
+ tri_max = tri_result;
}
- blink.detach();
- for1 = for2 = for3 = 1;
- pc.printf("kaltri ");
- wait (1);
- for1 = for2 = for3 = 0;
+ wait (0.01);
}
+ blink.detach();
+ for1 = for2 = for3 = 1;
+ pc.printf("kaltri ");
+ wait (1);
+ for1 = for2 = for3 = 0;
directionchoice:
-log_timer.attach(looper, TSAMP_EMG);
+ log_timer.attach(looper, TSAMP_EMG);
while(1) { //Loop keuze DIRECTION
for(int i=1; i<4; i++) {
@@ -345,7 +343,7 @@
dir2=0;
dir3=0;
for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
- if(bi_result>0.8*bi_max) {
+ if(bi_result>FACTOR*bi_max) {
direction = 1;
pc.printf("links ");
wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om cyaan lampje aan te zetten ter controle selectie
@@ -360,7 +358,7 @@
dir2 =1;
dir3 =0;
for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
- if(bi_result>0.8*bi_max) {
+ if(bi_result>FACTOR*bi_max) {
direction = 2;
pc.printf("mid ");
wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om paars lampje aan te zetten ter controle selectie
@@ -375,7 +373,7 @@
dir2 =0;
dir3 =1;
for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
- if(bi_result>0.8*bi_max) {
+ if(bi_result>FACTOR*bi_max) {
direction = 3;
pc.printf("rechts ");
wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie
@@ -395,12 +393,12 @@
for2=0;
for3=0;
for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
- if(tri_result>0.8*tri_max) {
+ if(tri_result>FACTOR*tri_max) {
for1 = for2 = for3 = 0;
pc.printf("reset ");
goto directionchoice;
} else {
- if(bi_result>0.8*bi_max) {
+ if(bi_result>FACTOR*bi_max) {
force = 1;
pc.printf("zwak ");
wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om cyaan lampje aan te zetten ter controle selectie
@@ -416,12 +414,12 @@
for2=1;
for3=0;
for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
- if(tri_result>0.8*tri_max) {
+ if(tri_result>FACTOR*tri_max) {
for1 = for2 = for3 = 0;
pc.printf("reset ");
goto directionchoice;
} else {
- if(bi_result>0.8*bi_max) {
+ if(bi_result>FACTOR*bi_max) {
force = 2;
pc.printf("normaal ");
wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om paars lampje aan te zetten ter controle selectie
@@ -437,12 +435,12 @@
for2=0;
for3=1;
for (int lag=0; lag<TIMEBETWEENBLINK; lag++) {
- if(tri_result>0.8*tri_max) {
+ if(tri_result>FACTOR*tri_max) {
for1 = for2 = for3 = 0;
pc.printf("reset ");
goto directionchoice;
} else {
- if(bi_result>0.8*bi_max) {
+ if(bi_result>FACTOR*bi_max) {
force = 3;
pc.printf("sterk ");
wait(TIMEB4NEXTCHOICE); // Tijdelijke wait om oranje lampje aan te zetten ter controle selectie
@@ -459,13 +457,31 @@
choicesmade:
blink.attach(okay, 0.2);
while(1) {
- if(tri_result>0.8*tri_max) {
+ if(tri_result>FACTOR*tri_max) {
blink.detach();
pc.printf("reset ");
+ switch (direction) {
+ case 1:
+ dir1 = 1;
+ for1 = 1;
+ for2 = for3 = 0;
+ break;
+ case 2:
+ dir2 = 1;
+ for1 = 1;
+ for2 = for3 = 0;
+ break;
+ case 3:
+ dir3 = 1;
+ for1 = 1;
+ for2 = for3 = 0;
+ break;
+ }
+
wait(1); // 1 sec wait, anders reset je meteen ook de biceps keuze
goto forcechoice;
} else {
- if(bi_result>0.8*bi_max && (dir1==1||dir2==1||dir3==1)) {
+ if(bi_result>FACTOR*bi_max && (dir1==1||dir2==1||dir3==1)) {
blink.detach();
log_timer.detach();
goto motorcontrol;
@@ -479,33 +495,28 @@
/* Vanaf hier komt de aansturing van de motor */
- if(direction == 1 && force == 1) { // links zwak
- pc.printf("links zwak ");
- // hier komt setpoint motor 1, setpoint motor2
- }
- if(direction == 1 && force == 2) { // links normaal
- pc.printf("links normaal ");
- }
- if(direction == 1 && force == 3) { // links sterk
- pc.printf("links sterk ");
- }
- if(direction == 2 && force == 1) { // mid zwak
- pc.printf("mid zwak ");
+ switch (direction) {
+ case 1:
+ setpoint2 = 3.14;
+ break;
+ case 2:
+ setpoint2 = 3.14;
+ break;
+ case 3:
+ setpoint2 = 3.14;
+ break;
}
- if(direction == 2 && force == 2) { // mid normaal
- pc.printf("mid normaal ");
- }
- if(direction == 2 && force == 3) { // mid sterk
- pc.printf("mid sterk ");
- }
- if(direction == 3 && force == 1) { // rechts zwak
- pc.printf("rechts zwak ");
- }
- if(direction == 3 && force == 2) { // rechts normaal
- pc.printf("rechts normaal ");
- }
- if(direction == 3 && force == 3) { // rechts sterk
- pc.printf("rechts sterk ");
+
+ switch (force) {
+ case 1:
+ setpoint1 = 8;
+ break;
+ case 2:
+ setpoint1 = 8;
+ break;
+ case 3:
+ setpoint1 = 8;
+ break;
}
while(1) { // loop voor het goed plaatsen van motor2 (batje hoek)
@@ -583,7 +594,7 @@
pwm = Kp3*controlerror + Ki3*integral;
keep_in_range(&pwm, -1,1);
- if(pwm > 0) {
+ if(pwm > 0) {
motor1dir = 1;
} else {
motor1dir = 0; //1 = rechtsom, 0 = linksom
