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 RC_Servo VMA306 PID CNY70 CMPS03 GP2A Pixy
Revision 10:6c3653c53eca, committed 2019-10-25
- Comitter:
- tuk4
- Date:
- Fri Oct 25 11:19:43 2019 +0000
- Parent:
- 9:4053b5217339
- Child:
- 11:31564089b41c
- Commit message:
- Semi closing
Changed in this revision
| StateMachineInclude/motor_state.h | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/StateMachineInclude/motor_state.h Fri Oct 25 11:19:43 2019 +0000
@@ -0,0 +1,16 @@
+#ifndef MOTOR_STATE_H
+#define MOTOR_STATE_H
+
+#include "mbed.h"
+
+enum motor_state {
+ IDLE,
+ FORWARD,
+ BACKWARD,
+ TURN_LEFT,
+ TURN_RIGHT,
+ SAFEMODE
+ };
+
+#endif
+
\ No newline at end of file
--- a/main.cpp Thu Oct 24 14:21:22 2019 +0000
+++ b/main.cpp Fri Oct 25 11:19:43 2019 +0000
@@ -5,10 +5,12 @@
#include "VMA306.h"
#include "Pixy.h"
#include "PID.h"
+#include "motor_state.h"
#define PI 3.1415926535898
Serial pc (PA_2, PA_3, 115200);
+TIM
PID motor (TIM4, TIM3, PA_9, PA_8, PC_9, PC_8, PC_6, PC_5);
CMPS03 boussole (PC_4);
@@ -21,7 +23,7 @@
PIXY pixy (PA_0, PA_1, 115200);
-InterruptIn bp (PC_13);
+DigitalIn bp (PC_13);
DigitalOut led1 (PA_5);
DigitalOut led2 (PD_2);
@@ -36,20 +38,72 @@
Timer temps;
+motor_state current_state = IDLE;
+
int main ()
{
+ int numberOfObjects=0, dummy=0;
+ T_pixyNMBloc file;
motor.resetPosition();
- double x=0, y, theta = 0;
-
+ double x=0, y=0, theta = 0;
+ motor.setProportionnalValue(2.0);
+ motor.setintegralValue(0.4);
+ motor.setDerivativeValue(1.0);
+
while (1) {
- double speed_L = 50, speed_R = 50;
- while (x <= 200)
+ if (pixy.checkNewImage()) {
+ pixy.detectedObject(&numberOfObjects,&dummy);
+ if (numberOfObjects==1) {
+ file=pixy.getNMBloc();
+ if (file.x >160){
+ }
+ }
+ }else numberOfObjects = 0;
+
+ double speed_L = -100, speed_R = -100;
+ motor.getPosition(&x, &y, &theta);
+ pc.printf("\r x is %.2lf, y is %.2lf, theta is %.2lf",x,y,theta);
+ switch (current_state)
{
- motor.setSpeed(speed_L,speed_R);
- motor.getPosition(&x, &y, &theta);
- pc.printf("\r x = %lf", x);
- }
- motor.setSpeed(0,0);
+ case IDLE :
+ motor.setSpeed(0,0);
+ if (bp == 0) current_state = FORWARD;
+ break;
+
+ case TURN_RIGHT :
+ motor.setSpeed(speed_L,-speed_R);
+
+ if (theta <= -PI/3) {
+ motor.resetPosition();
+ current_state = FORWARD;
+ }
+ break;
+
+ case SAFEMODE :
+ motor.setSpeed(0,0);
+ if (ultraSon.readUSB() >= 20) current_state = FORWARD;
+ break;
+
+ case FORWARD :
+ motor.setSpeed(speed_L,speed_R);
+ if (ultraSon.readUSB() <= 20) {
+ current_state = SAFEMODE;
+ }
+ if (x<=-1000) current_state = IDLE;
+ break;
+
+ case BACKWARD :
+ motor.setSpeed(-speed_L,-speed_R);
+ if (x <= 0) {
+ current_state = IDLE;
+ }
+ break;
+
+
+ default :
+ //do something
+ break;
+ }
}
return 0;