Statistics
| Branch: | Tag: | Revision:

amiro-os / devices / DiWheelDrive / userthread.cpp @ 5d138bca

History | View | Annotate | Download (2.186 KB)

1 58fe0e0b Thomas Schöpping
#include "userthread.hpp"
2
3
#include "global.hpp"
4
5 c76baf23 Georg Alberding
#include "linefollow2.hpp" 
6
7 58fe0e0b Thomas Schöpping
using namespace amiro;
8
9
extern Global global;
10
11 5d138bca galberding
enum class states{
12
  FOLLOW_LINE,
13
  OCCUPY,
14
  RELEASE,
15
  CHARGING
16 58fe0e0b Thomas Schöpping
};
17
18 5d138bca galberding
// User thread state:
19
states utState = states::FOLLOW_LINE;
20 58fe0e0b Thomas Schöpping
21
// a buffer for the z-value of the accelerometer
22
int16_t accel_z;
23 5d138bca galberding
bool running = false;
24 58fe0e0b Thomas Schöpping
25
int vcnl4020AmbientLight[4] = {0};
26
int vcnl4020Proximity[4] = {0};
27
28 c76baf23 Georg Alberding
29 58fe0e0b Thomas Schöpping
// Set the speed by the array
30
void setRpmSpeed(const int (&rpmSpeed)[2]) {
31 5d138bca galberding
  global.motorcontrol.setTargetRPM(rpmSpeed[constants::DiWheelDrive::LEFT_WHEEL] * 1000000, rpmSpeed[constants::DiWheelDrive::RIGHT_WHEEL] * 1000000);
32 58fe0e0b Thomas Schöpping
}
33
34 5d138bca galberding
void lightOneLed(Color color, int idx){
35
  global.robot.setLightColor(idx, Color(color));
36
}
37 58fe0e0b Thomas Schöpping
38 5d138bca galberding
void lightAllLeds(Color color){
39
  int led = 0;
40
  for(led=0; led<8; led++){
41
        lightOneLed(color, led);
42
      }
43 58fe0e0b Thomas Schöpping
}
44
45
46
47
UserThread::UserThread() :
48
  chibios_rt::BaseStaticThread<USER_THREAD_STACK_SIZE>()
49
{
50
}
51
52
UserThread::~UserThread()
53
{
54
}
55
56
msg_t
57
UserThread::main()
58
{
59 5d138bca galberding
  /*
60
   * SETUP
61
   */
62
  int rpmFuzzyCtrl[2] = {0};
63
  for (uint8_t led = 0; led < 8; ++led) {
64
    global.robot.setLightColor(led, Color(Color::BLACK));
65
  }
66
  running = false;
67
  LineFollow lf(&global);
68
  /*
69
   * LOOP
70
   */
71
  while (!this->shouldTerminate())
72
  {
73 58fe0e0b Thomas Schöpping
        /*
74
         * read accelerometer z-value
75
         */
76
        accel_z = global.lis331dlh.getAccelerationForce(LIS331DLH::AXIS_Z);
77
78
        /*
79
         * evaluate the accelerometer
80
         */
81 c76baf23 Georg Alberding
82 5d138bca galberding
  //Features over can: (Line Following)
83
  //SetKP
84
  //SetKI
85
  //SetKd ?
86
  //SetSleepTime
87
  //SeForwardSpeed? or SetMaxSpeed
88
  //DriveOnLeftLine
89
  //DriveOnRightLine
90
  
91
  //if accel_z<-900
92
    //send can event (one time)
93
    // Line following is started if amiro roteted
94
    if (accel_z < -900 /*-0.9g*/) { //new: (can.allowLineFollowOnTurn && accel_z < 900) || can.startLineFollow optional feature
95
        // set the front LEDs to blue for one second
96
        lightAllLeds(Color::GREEN);
97
        this->sleep(1000);
98
        lightAllLeds(Color::BLACK);
99
        running = !running;
100
    }
101
    if(running){
102
103
    }
104 58fe0e0b Thomas Schöpping
105 5d138bca galberding
      lf.followLine(rpmFuzzyCtrl);
106
            setRpmSpeed(rpmFuzzyCtrl);
107
    // this->sleep(US2ST(5));
108
    this->sleep(CAN::UPDATE_PERIOD);
109
  }
110 58fe0e0b Thomas Schöpping
111
  return RDY_OK;
112
}