ASURO Library  2.80
my_motor_low.c
gehe zur Dokumentation dieser Datei
1 /****************************************************************************/
27 /*****************************************************************************
28 * *
29 * This program is free software; you can redistribute it and/or modify *
30 * it under the terms of the GNU General Public License as published by *
31 * the Free Software Foundation; either version 2 of the License, or *
32 * any later version. *
33 * *
34 *****************************************************************************/
35 #include "asuro.h"
36 #include "myasuro.h"
37 
38 
39 
40 /****************************************************************************/
81  unsigned char left_speed,
82  unsigned char right_speed)
83 {
84  int l_speed;
85  int r_speed;
86 
87  if (MY_MOTOR_DIFF != 0)
88  {
89  /*
90  Das Ganze macht nur Sinn, wenn mindestens ein Motor fahren soll.
91  */
92  if (left_speed > 0 ||
93  right_speed > 0)
94  {
95  /*
96  Bei positivem MY_MOTOR_DIFF wird der rechte Motor verstaerkt.
97  Bei negativem MY_MOTOR_DIFF wird der linke Motor verstaerkt.
98  */
99  l_speed = left_speed - MY_MOTOR_DIFF / 2;
100  r_speed = right_speed + MY_MOTOR_DIFF / 2;
101 
102  /*
103  Wertebereich von 0 bis 255 pruefen.
104  Unterscheiden nach positiver, bzw. negativer Vorgabe.
105  */
106  if (MY_MOTOR_DIFF > 0)
107  {
108  /*
109  Bei positivem MY_MOTOR_DIFF kann nur die rechte Seite > 255 werden.
110  */
111  if (r_speed > 255)
112  {
113  /*
114  Um die Differenz von MY_MOTOR_DIFF weiterhin zu erhalten, wird nun
115  die linke Seite noch weiter reduziert, und die rechte Seite auf
116  das zulaessige Maximum gesetzt.
117  */
118  l_speed -= (r_speed - 255);
119  r_speed = 255;
120  }
121  if (l_speed < 0)
122  {
123  /*
124  Die linke Seite ist nun unter dem zulaessige Minimum von 0.
125  Auch dies muss korrigiert werden.
126  */
127  l_speed = 0;
128  }
129  }
130  else
131  {
132  /*
133  Bei negativem MY_MOTOR_DIFF kann nur die linke Seite > 255 werden.
134  */
135  if (l_speed > 255)
136  {
137  /*
138  Um die Differenz von MY_MOTOR_DIFF weiterhin zu erhalten, wird nun
139  die rechte Seite noch weiter reduziert, und die linke Seite auf
140  das zulaessige Maximum gesetzt.
141  */
142  r_speed -= (l_speed - 255);
143  l_speed = 255;
144  }
145  if (r_speed < 0)
146  {
147  /*
148  Die rechte Seite ist nun unter dem zulaessige Minimum von 0.
149  Auch dies muss korrigiert werden.
150  */
151  r_speed = 0;
152  }
153  }
154 
155  left_speed = l_speed;
156  right_speed = r_speed;
157  }
158  }
159 
160  MotorSpeed(left_speed, right_speed);
161 }
162 
163