1212// See the License for the specific language governing permissions and
1313// limitations under the License.
1414
15- void accelerate (int len, int tar_speed)
15+ RUN g_run;
16+
17+ RUN::RUN ()
18+ {
19+ speed = 0.0 ;
20+ accel = 0.0 ;
21+ }
22+
23+ // 割り込み
24+ void controlInterrupt (void ) { g_run.interrupt (); }
25+
26+ void RUN::interrupt (void )
27+ { // 割り込み内からコール
28+ speed += accel;
29+
30+ if (speed > max_speed) {
31+ speed = max_speed;
32+ }
33+ if (speed < min_speed) {
34+ speed = min_speed;
35+ }
36+
37+ speedSet (speed, speed);
38+ }
39+
40+
41+ void RUN::dirSet (t_CW_CCW dir_left, t_CW_CCW dir_right)
42+ {
43+ if (dir_left == MOT_FORWARD) {
44+ digitalWrite (CW_L, LOW);
45+ } else {
46+ digitalWrite (CW_L, HIGH);
47+ }
48+ if (dir_right == MOT_FORWARD) {
49+ digitalWrite (CW_R, HIGH);
50+ } else {
51+ digitalWrite (CW_R, LOW);
52+ }
53+ }
54+
55+ void RUN::counterClear (void ) { g_step_r = g_step_l = 0 ; }
56+
57+ void RUN::speedSet (double l_speed, double r_speed)
58+ {
59+ g_step_hz_l = (int )(l_speed / PULSE);
60+ g_step_hz_r = (int )(r_speed / PULSE);
61+ }
62+
63+ void RUN::stepGet (void )
64+ {
65+ step_lr = g_step_r + g_step_l;
66+ step_lr_len = (int )((float )step_lr / 2.0 * PULSE);
67+ }
68+
69+ void RUN::stop (void ) { g_motor_move = 0 ; }
70+
71+ void RUN::accelerate (int len, int finish_speed)
1672{
1773 int obj_step;
18- g_max_speed = tar_speed;
19- g_accel = 1.5 ;
20- g_step_r = g_step_l = 0 ;
21- g_speed = g_min_speed = MIN_SPEED;
22- g_step_hz_r = g_step_hz_l = (unsigned short )(g_speed / PULSE);
2374
75+ accel = 1.5 ;
76+ speed = min_speed = MIN_SPEED;
77+ max_speed = finish_speed;
78+ counterClear ();
79+ speedSet (speed, speed);
80+ dirSet (MOT_FORWARD, MOT_FORWARD);
2481 obj_step = (int )((float )len * 2.0 / PULSE);
25- digitalWrite (CW_R, HIGH);
26- digitalWrite (CW_L, LOW);
2782 g_motor_move = 1 ;
2883
29- while ((g_step_r + g_step_l) < obj_step) {
30- continue ;
84+ while (1 ) {
85+ stepGet ();
86+ if (step_lr > obj_step) {
87+ break ;
88+ }
3189 }
3290}
3391
34- void oneStep (int len, int tar_speed )
92+ void RUN:: oneStep (int len, int init_speed )
3593{
3694 int obj_step;
37- g_max_speed = tar_speed;
38- g_accel = 0.0 ;
39- g_step_r = g_step_l = 0 ;
40- g_speed = g_min_speed = tar_speed;
41- g_step_hz_r = g_step_hz_l = (unsigned short )(g_speed / PULSE);
95+
96+ accel = 0.0 ;
97+ max_speed = init_speed;
98+ speed = min_speed = init_speed;
99+ counterClear ();
100+ speedSet (init_speed, init_speed);
101+ dirSet (MOT_FORWARD, MOT_FORWARD);
42102 obj_step = (int )((float )len * 2.0 / PULSE);
43- digitalWrite (CW_R, HIGH);
44- digitalWrite (CW_L, LOW);
45103
46- while ((g_step_r + g_step_l) < obj_step) {
47- continue ;
104+ while (1 ) {
105+ stepGet ();
106+ if (step_lr > obj_step) {
107+ break ;
108+ }
48109 }
49110}
50111
51- void decelerate (int len, int tar_speed )
112+ void RUN:: decelerate (int len, int init_speed )
52113{
53114 int obj_step;
54- g_max_speed = tar_speed;
55- g_accel = 0.0 ;
56- g_step_r = g_step_l = 0 ;
57- g_speed = g_min_speed = tar_speed;
58- g_step_hz_r = g_step_hz_l = (unsigned short )(g_speed / PULSE);
115+
116+ accel = 1.5 ;
117+ max_speed = init_speed;
118+ speed = min_speed = init_speed;
119+ counterClear ();
120+ speedSet (init_speed, init_speed);
121+ dirSet (MOT_FORWARD, MOT_FORWARD);
59122 obj_step = (int )((float )len * 2.0 / PULSE);
60- digitalWrite (CW_R, HIGH);
61- digitalWrite (CW_L, LOW);
62123
63- while ((len - (g_step_r + g_step_l) / 2.0 * PULSE) >
64- (((g_speed * g_speed) - (MIN_SPEED * MIN_SPEED)) / (2.0 * 1000.0 * 1.5 ))) {
65- continue ;
124+ while (1 ) {
125+ stepGet ();
126+ if (
127+ (len - step_lr_len) <
128+ (int )(((speed * speed) - (MIN_SPEED * MIN_SPEED)) / (2.0 * 1000.0 * accel))) {
129+ break ;
130+ }
66131 }
67- g_accel = -1.5 ;
68- g_min_speed = MIN_SPEED;
132+ accel = -1.5 ;
133+ min_speed = MIN_SPEED;
69134
70- while ((g_step_r + g_step_l) < obj_step) {
71- continue ;
135+ while (1 ) {
136+ stepGet ();
137+ if (step_lr > obj_step) {
138+ break ;
139+ }
72140 }
73141
74- g_motor_move = 0 ;
142+ stop () ;
75143}
0 commit comments