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 TextLCD mbed-dsp mbed
Fork of Main-script_groep7 by
Revision 1:b08ac32d1ddc, committed 2014-10-30
- Comitter:
- phgbartels
- Date:
- Thu Oct 30 09:00:36 2014 +0000
- Parent:
- 0:2386012c6594
- Child:
- 2:de7b6c1d67c4
- Commit message:
- Komt tot state 6 (niet verder naar 7)
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Oct 29 16:02:12 2014 +0000
+++ b/main.cpp Thu Oct 30 09:00:36 2014 +0000
@@ -16,7 +16,7 @@
#include "TextLCD.h"
#include "mbed.h"
#include "encoder.h"
-#include "HIDScope.h"
+//#include "HIDScope.h"
#include "PwmOut.h"
/*
@@ -59,7 +59,7 @@
Ticker statemachine;
Ticker screen;
int previous_herhalingen = 0;
-int current_herhalingen;
+int current_herhalingen = 0;
int PWM2_percentage = 100;
int aantal_rotaties_1 = 10;
int aantalcr_1 = 1600;
@@ -85,8 +85,10 @@
float PWM2;
float Speed_motor1;
float Speed_motor1rad;
+float setpoint = 0;
+float prev_setpoint = 0;
-HIDScope scope(6);
+//HIDScope scope(6);
enum state_t {RUST, ARM_KALIBRATIE, EMG_KALIBRATIE, METEN_RICHTING, METEN_HOOGTE, INSTELLEN_RICHTING, SLAAN, RETURN2RUST}; //verschillende stadia definieren voor gebruik in CASES
state_t state = RUST;
@@ -100,10 +102,7 @@
//voor nu om de loop te doorlopen wordt onderstaande code gebruikt. Nogmaal gesproken moet er gewacht worden op een 'hoog' signaal van een knop
current_herhalingen = previous_herhalingen + 1; previous_herhalingen = current_herhalingen;
motor1.setPosition(0);
- motor2.setPosition(0);
- pwm_motor1.period_us(100);
- pwm_motor2.period_us(100);
-
+ motor2.setPosition(0);
}
void emg_kalibratie() {
@@ -123,15 +122,13 @@
}
void slaan () {
- float setpoint;
- float prev_setpoint = 0;
current_pos_motor1 = motor1.getPosition(); //bekijk na elke 0.005s wat de huidige 'waarde' van de encoder is
delta_pos_motor1_puls = current_pos_motor1 - previous_pos_motor1; //Bereken wat het verschil in waarde is voor het berekenen van de snelheid(puls)
pos_motor1_rad = current_pos_motor1/(1600/(2*PI)); //echte waarde omrekenen naar rad voor (positie) PID regelaar
delta_pos_motor1_rad = delta_pos_motor1_puls/(1600/(2*PI)); //delta waarde omrekenen naar rad voor snelheidsbepaling (rad)
snelheid_motor1_rad = delta_pos_motor1_rad / TSAMP; //rad delen door TSAMP om rad/s te verkrijgen
snelheid_arm_ms = snelheid_motor1_rad * lengte_arm; //deze waarde maar lengte van de arm om de snelheid van het uiteinde van die arm te verkrijgen
- scope.set(0, snelheid_motor1_rad);
+ //scope.set(0, snelheid_motor1_rad);
previous_pos_motor1 = current_pos_motor1; //sla de huidige waarde op als vorige waarde.
@@ -144,7 +141,7 @@
setpoint = prev_setpoint + TSAMP * gewenste_snelheid_rad;
/*new_pwm = (setpoint - motor1.getPosition())*.001; -> P action*/
PWM1_percentage = pid(setpoint, pos_motor1_rad);
- scope.set(1, setpoint-pos_motor1_rad);
+ //scope.set(1, setpoint-pos_motor1_rad);
if (PWM1_percentage < -100)
{
@@ -166,9 +163,9 @@
}
pwm_motor1.write(abs(((1-PWM1_min_50)/100)*PWM1_percentage + PWM1_min_50));
- scope.set(5, abs(((1-PWM1_min_50)/100)*PWM1_percentage + PWM1_min_50));
+ //scope.set(5, abs(((1-PWM1_min_50)/100)*PWM1_percentage + PWM1_min_50));
prev_setpoint = setpoint;
- scope.send();
+ //scope.send();
}
float pid(float setpoint, float measurement)
@@ -184,9 +181,9 @@
out_d = (error-prev_error)*K_D;
clamp(&out_i,-I_LIMIT,I_LIMIT);
prev_error = error;
- scope.set(2, out_p);
- scope.set(3, out_i);
- scope.set(4, out_d);
+ //scope.set(2, out_p);
+ //scope.set(3, out_i);
+ //scope.set(4, out_d);
return out_p + out_i + out_d;
}
@@ -206,14 +203,13 @@
case RUST: {
rust();
/*voorwaarde wanneer hij door kan naar de volgende case*/
- if (current_herhalingen == 200)
+ if (current_herhalingen == 600)
{
- state = ARM_KALIBRATIE;
current_herhalingen = 0;
previous_herhalingen = 0;
- break;
+ state = ARM_KALIBRATIE;
}
-
+ break;
/*bepalen hoe je zorgt dat je maar 1x de kalibraties uitvoerd! (Of eventueel de arm kalibratie elke keer!!)*/
//if (metingstatus<5);
// state = ARMKALIBRATIE;
@@ -228,11 +224,11 @@
arm_kalibratie();
if (current_herhalingen == 200)
{
- state = EMG_KALIBRATIE;
current_herhalingen = 0;
previous_herhalingen = 0;
- break;
+ state = EMG_KALIBRATIE;
}
+ break;
}
case EMG_KALIBRATIE:
@@ -243,8 +239,8 @@
state = METEN_RICHTING;
current_herhalingen = 0;
previous_herhalingen = 0;
- break;
}
+ break;
}
case METEN_RICHTING:
@@ -255,8 +251,8 @@
state = METEN_HOOGTE;
current_herhalingen = 0;
previous_herhalingen = 0;
- break;
}
+ break;
}
case METEN_HOOGTE:
@@ -267,8 +263,8 @@
state = INSTELLEN_RICHTING;
current_herhalingen = 0;
previous_herhalingen = 0;
- break;
}
+ break;
}
case INSTELLEN_RICHTING:
@@ -279,8 +275,8 @@
state = SLAAN;
current_herhalingen = 0;
previous_herhalingen = 0;
- break;
}
+
}
case SLAAN:
@@ -291,8 +287,8 @@
state = RETURN2RUST;
current_herhalingen = 0;
previous_herhalingen = 0;
- break;
}
+ break;
}
case RETURN2RUST:
@@ -303,8 +299,8 @@
state = RUST;
current_herhalingen = 0;
previous_herhalingen = 0;
- break;
}
+ break;
}
default: {
@@ -330,6 +326,10 @@
}
int main() {
+ motor1.setPosition(0);
+ motor2.setPosition(0);
+ pwm_motor1.period_us(100);
+ pwm_motor2.period_us(100);
statemachine.attach(&statemachinefunction, 0.005); // the address of the function to be attached (flip) and the interval (2 seconds)
screen.attach(&screenupdate, 0.2);
}
\ No newline at end of file
