Schulaufgabe 21.12.2015
Fork of Bertl by
ur_Bertl.h@17:308802267a62, 2015-11-12 (annotated)
- Committer:
- fpucher
- Date:
- Thu Nov 12 19:05:56 2015 +0000
- Revision:
- 17:308802267a62
- Parent:
- 16:9ec833d98d0d
- Child:
- 18:8bfd7ecd2795
Leds work now
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bulmecisco | 0:66e9a0afcbd6 | 1 | /*********************************** |
bulmecisco | 13:3ce84646fd74 | 2 | name: ur_Bertl.h Version: 3.0 |
bulmecisco | 13:3ce84646fd74 | 3 | class Bertl included |
bulmecisco | 0:66e9a0afcbd6 | 4 | author: PE HTL BULME |
bulmecisco | 0:66e9a0afcbd6 | 5 | email: pe@bulme.at |
bulmecisco | 4:76acfddc26fb | 6 | WIKI: https://developer.mbed.org/teams/BERTL_CHEL_18/code/ur_Bertl/ |
bulmecisco | 0:66e9a0afcbd6 | 7 | description: |
bulmecisco | 4:76acfddc26fb | 8 | Definition portion of the class ur_Bertl The Robot |
bulmecisco | 12:cedc088eaf05 | 9 | Step wise turns on left and rigth |
bulmecisco | 7:e7f74f072564 | 10 | int ReturnButtonPressed() added which returns the int value of button pressed |
bulmecisco | 0:66e9a0afcbd6 | 11 | ***********************************/ |
bulmecisco | 0:66e9a0afcbd6 | 12 | #include "mbed.h" |
bulmecisco | 12:cedc088eaf05 | 13 | #include "const.h" |
bulmecisco | 0:66e9a0afcbd6 | 14 | |
bulmecisco | 0:66e9a0afcbd6 | 15 | #ifndef UR_BERTL_H |
bulmecisco | 0:66e9a0afcbd6 | 16 | #define UR_BERTL_H |
bulmecisco | 0:66e9a0afcbd6 | 17 | |
bulmecisco | 0:66e9a0afcbd6 | 18 | #define LEFTSENSOR P1_12 |
bulmecisco | 0:66e9a0afcbd6 | 19 | #define RIGHTSENSOR P1_13 |
bulmecisco | 0:66e9a0afcbd6 | 20 | /********************************************//** |
bulmecisco | 4:76acfddc26fb | 21 | name: ur_Bertl.h \n |
bulmecisco | 13:3ce84646fd74 | 22 | version: 3.0 \n |
bulmecisco | 13:3ce84646fd74 | 23 | class Bertl included \n |
bulmecisco | 4:76acfddc26fb | 24 | author:PE HTL BULME \n |
bulmecisco | 4:76acfddc26fb | 25 | email: pe@bulme.at \n |
bulmecisco | 4:76acfddc26fb | 26 | WIKI: https://developer.mbed.org/teams/BERTL_CHEL_18/code/ur_Bertl/wiki/Homepage \n |
bulmecisco | 4:76acfddc26fb | 27 | description: |
bulmecisco | 0:66e9a0afcbd6 | 28 | Definition and documentation portion of the class ur_Bertl The Robot. |
bulmecisco | 0:66e9a0afcbd6 | 29 | |
bulmecisco | 0:66e9a0afcbd6 | 30 | ***********************************************/ |
bulmecisco | 0:66e9a0afcbd6 | 31 | /** |
bulmecisco | 0:66e9a0afcbd6 | 32 | @code |
bulmecisco | 0:66e9a0afcbd6 | 33 | // |
bulmecisco | 0:66e9a0afcbd6 | 34 | @endcode |
bulmecisco | 0:66e9a0afcbd6 | 35 | |
bulmecisco | 0:66e9a0afcbd6 | 36 | Example motor sensor test: |
bulmecisco | 0:66e9a0afcbd6 | 37 | @code |
bulmecisco | 0:66e9a0afcbd6 | 38 | #include "mbed.h" |
bulmecisco | 0:66e9a0afcbd6 | 39 | #include "ur_Bertl.h" |
bulmecisco | 0:66e9a0afcbd6 | 40 | #include "const.h" |
bulmecisco | 0:66e9a0afcbd6 | 41 | |
bulmecisco | 0:66e9a0afcbd6 | 42 | int main() |
bulmecisco | 0:66e9a0afcbd6 | 43 | { |
bulmecisco | 0:66e9a0afcbd6 | 44 | ur_Bertl karel(LEFTSENSOR); // RIGHTSENSOR |
bulmecisco | 0:66e9a0afcbd6 | 45 | |
bulmecisco | 0:66e9a0afcbd6 | 46 | while(true) { |
bulmecisco | 0:66e9a0afcbd6 | 47 | karel.NibbleLeds(karel.Read()); |
bulmecisco | 0:66e9a0afcbd6 | 48 | } |
bulmecisco | 0:66e9a0afcbd6 | 49 | } |
bulmecisco | 0:66e9a0afcbd6 | 50 | @endcode |
bulmecisco | 0:66e9a0afcbd6 | 51 | |
bulmecisco | 0:66e9a0afcbd6 | 52 | Example moving the robot around: |
bulmecisco | 0:66e9a0afcbd6 | 53 | @code |
bulmecisco | 0:66e9a0afcbd6 | 54 | #include "mbed.h" |
bulmecisco | 0:66e9a0afcbd6 | 55 | #include "ur_Bertl.h" |
bulmecisco | 0:66e9a0afcbd6 | 56 | #include "const.h" |
bulmecisco | 0:66e9a0afcbd6 | 57 | |
bulmecisco | 0:66e9a0afcbd6 | 58 | int main() |
bulmecisco | 0:66e9a0afcbd6 | 59 | { |
bulmecisco | 0:66e9a0afcbd6 | 60 | ur_Bertl karel; |
bulmecisco | 0:66e9a0afcbd6 | 61 | |
bulmecisco | 0:66e9a0afcbd6 | 62 | while(karel.WaitUntilButtonPressed()){} |
bulmecisco | 0:66e9a0afcbd6 | 63 | //karel.Move(); |
bulmecisco | 0:66e9a0afcbd6 | 64 | karel.TurnLeft(); |
bulmecisco | 0:66e9a0afcbd6 | 65 | karel.ShutOff(); |
bulmecisco | 0:66e9a0afcbd6 | 66 | } |
bulmecisco | 0:66e9a0afcbd6 | 67 | @endcode |
bulmecisco | 0:66e9a0afcbd6 | 68 | |
bulmecisco | 0:66e9a0afcbd6 | 69 | Example LEDs: |
bulmecisco | 0:66e9a0afcbd6 | 70 | @code |
bulmecisco | 0:66e9a0afcbd6 | 71 | #include "mbed.h" |
bulmecisco | 0:66e9a0afcbd6 | 72 | #include "ur_Bertl.h" |
bulmecisco | 0:66e9a0afcbd6 | 73 | #include "const.h" |
bulmecisco | 0:66e9a0afcbd6 | 74 | |
bulmecisco | 0:66e9a0afcbd6 | 75 | int main() |
bulmecisco | 0:66e9a0afcbd6 | 76 | { |
bulmecisco | 0:66e9a0afcbd6 | 77 | ur_Bertl karel; |
bulmecisco | 0:66e9a0afcbd6 | 78 | |
bulmecisco | 0:66e9a0afcbd6 | 79 | while(karel.WaitUntilButtonPressed()){} |
bulmecisco | 0:66e9a0afcbd6 | 80 | |
bulmecisco | 0:66e9a0afcbd6 | 81 | karel.TurnLedOn(LED_FL1 | LED_FR1); // see const.h |
bulmecisco | 0:66e9a0afcbd6 | 82 | wait(1); |
bulmecisco | 0:66e9a0afcbd6 | 83 | karel.TurnLedOn(0xFF); // or use hex |
bulmecisco | 0:66e9a0afcbd6 | 84 | wait(1); |
bulmecisco | 0:66e9a0afcbd6 | 85 | karel.RGBLed(1,0,0); // red |
bulmecisco | 0:66e9a0afcbd6 | 86 | wait(1); |
bulmecisco | 0:66e9a0afcbd6 | 87 | karel.RGBLed(0,1,0); // green |
bulmecisco | 0:66e9a0afcbd6 | 88 | wait(1); |
bulmecisco | 0:66e9a0afcbd6 | 89 | karel.RGBLed(0,0,1); // blue |
bulmecisco | 0:66e9a0afcbd6 | 90 | karel.BlueLedsON(); |
bulmecisco | 0:66e9a0afcbd6 | 91 | karel.NibbleLeds(karel.Read()); |
bulmecisco | 0:66e9a0afcbd6 | 92 | wait(1); |
bulmecisco | 0:66e9a0afcbd6 | 93 | karel.BlueLedsOFF(); |
bulmecisco | 0:66e9a0afcbd6 | 94 | karel.TurnLedOff(0xFF); |
bulmecisco | 0:66e9a0afcbd6 | 95 | karel.ShutOff(); |
bulmecisco | 0:66e9a0afcbd6 | 96 | } |
bulmecisco | 0:66e9a0afcbd6 | 97 | @endcode |
bulmecisco | 4:76acfddc26fb | 98 | Example IF/ELSE Commands (update ur_Bertl 2.0 from https://developer.mbed.org/teams/BERTL_CHEL_18/code/ur_Bertl/ |
bulmecisco | 4:76acfddc26fb | 99 | @code |
fpucher | 16:9ec833d98d0d | 100 | Sorry, but there are Javascript problems with this code |
bulmecisco | 4:76acfddc26fb | 101 | |
bulmecisco | 4:76acfddc26fb | 102 | int main() |
bulmecisco | 4:76acfddc26fb | 103 | { |
bulmecisco | 4:76acfddc26fb | 104 | ur_Bertl karel; |
bulmecisco | 4:76acfddc26fb | 105 | |
bulmecisco | 4:76acfddc26fb | 106 | while( karel.WaitUntilButtonPressed() ) {} |
bulmecisco | 4:76acfddc26fb | 107 | if( karel.NextToABeeper()) { |
bulmecisco | 4:76acfddc26fb | 108 | karel.PickBeeper(); |
bulmecisco | 4:76acfddc26fb | 109 | karel.NibbleLeds(karel.AnyBeeperInBag()); //show number of beepers in bag on 4 yellow Leds |
bulmecisco | 4:76acfddc26fb | 110 | } |
bulmecisco | 4:76acfddc26fb | 111 | wait(1); |
bulmecisco | 4:76acfddc26fb | 112 | if( karel.AnyBeeperInBag() ) { |
bulmecisco | 4:76acfddc26fb | 113 | karel.PutBeeper(); |
bulmecisco | 4:76acfddc26fb | 114 | karel.NibbleLeds(karel.AnyBeeperInBag()); |
bulmecisco | 4:76acfddc26fb | 115 | } |
bulmecisco | 4:76acfddc26fb | 116 | wait(1); |
bulmecisco | 4:76acfddc26fb | 117 | if( karel.FrontIsClear() ) |
bulmecisco | 4:76acfddc26fb | 118 | karel.Move(); |
bulmecisco | 4:76acfddc26fb | 119 | else |
bulmecisco | 4:76acfddc26fb | 120 | karel.TurnLeft(); |
bulmecisco | 4:76acfddc26fb | 121 | |
bulmecisco | 4:76acfddc26fb | 122 | karel.ShutOff(); |
bulmecisco | 4:76acfddc26fb | 123 | } |
bulmecisco | 4:76acfddc26fb | 124 | |
bulmecisco | 4:76acfddc26fb | 125 | |
bulmecisco | 4:76acfddc26fb | 126 | @endcode |
bulmecisco | 0:66e9a0afcbd6 | 127 | */ |
bulmecisco | 0:66e9a0afcbd6 | 128 | class ur_Bertl |
bulmecisco | 0:66e9a0afcbd6 | 129 | { |
bulmecisco | 0:66e9a0afcbd6 | 130 | protected: |
bulmecisco | 4:76acfddc26fb | 131 | int beepersInBag; /**< how many beepers does the robot have in his bag;\n you can show it with: karel.NibbleLeds(karel.AnyBeeperInBag())*/ |
bulmecisco | 0:66e9a0afcbd6 | 132 | char cmd[3]; /**< I2C command */ |
bulmecisco | 0:66e9a0afcbd6 | 133 | int16_t btns; /**< which button is pressed */ |
bulmecisco | 0:66e9a0afcbd6 | 134 | InterruptIn _interrupt; /**< interrupted used*/ |
bulmecisco | 0:66e9a0afcbd6 | 135 | volatile int _count; /**< values of motor sensor*/ |
fpucher | 17:308802267a62 | 136 | int16_t leds; /**< save led status*/ |
bulmecisco | 0:66e9a0afcbd6 | 137 | |
bulmecisco | 0:66e9a0afcbd6 | 138 | /** |
bulmecisco | 0:66e9a0afcbd6 | 139 | protected methodes for internal purposes only |
bulmecisco | 0:66e9a0afcbd6 | 140 | */ |
bulmecisco | 0:66e9a0afcbd6 | 141 | void increment(); /**< ISR to increment sensor values of motor */ |
bulmecisco | 0:66e9a0afcbd6 | 142 | bool backIsClear(); /**< don't now for what */ |
bulmecisco | 0:66e9a0afcbd6 | 143 | bool frontButtonPressed();/**< TRUE if a a button on the front of Robot is pressed else FALSE */ |
bulmecisco | 4:76acfddc26fb | 144 | int bottomIsBlack(); /**< check line sensor; returns BCD value */ |
bulmecisco | 0:66e9a0afcbd6 | 145 | void error(); /**< Error: stops the robot and all LEDs are blinking*/ |
bulmecisco | 0:66e9a0afcbd6 | 146 | |
bulmecisco | 0:66e9a0afcbd6 | 147 | public: |
bulmecisco | 0:66e9a0afcbd6 | 148 | ur_Bertl(); /**< default constructor; you have to define constants in config.h such as SPEED, DISTANCE or ANGLE*/ |
bulmecisco | 0:66e9a0afcbd6 | 149 | ur_Bertl(PinName pin); /**< parameterized constructor; on what pin should the interrupt work; SPEED, DISTANCE or ANGLE have to bee defined in config.h */ |
bulmecisco | 0:66e9a0afcbd6 | 150 | |
bulmecisco | 12:cedc088eaf05 | 151 | //void Move(); /**< Robot moves one turn as much as the constant DISTANCE; if one of the buttons fire --> Error()*/ |
bulmecisco | 15:43d6a7e6e64a | 152 | void Move(); /**< Robot moves one turn as much as the constant DISTANCE; if one of the buttons fire --> Error()*/ |
bulmecisco | 0:66e9a0afcbd6 | 153 | void TurnLeft(); /**< Robot turns left as much as the constant ANGLE*/ |
bulmecisco | 0:66e9a0afcbd6 | 154 | void PutBeeper(); /**< if Robot has any Beepers in his bag he can put one or more Beeper; if not --> Error(()*/ |
bulmecisco | 4:76acfddc26fb | 155 | void PickBeeper(); /**< if Robot stands on a black item he can pick one or more Beeper (max. 15 --> Error()); if not --> Error()*/ |
bulmecisco | 15:43d6a7e6e64a | 156 | void TurnOff(); /**< turnes the robot off */ |
bulmecisco | 4:76acfddc26fb | 157 | bool WaitUntilButtonPressed(); /**< wait until any button is pressed at the robot */ |
bulmecisco | 1:fafbac0ba96d | 158 | bool FrontIsClear(); /**< returns a boolean value true if front is free; if not false */ |
bulmecisco | 4:76acfddc26fb | 159 | bool NextToABeeper(); /**< returns a boolean value true if the robot is on a black place or line; if not --> false */ |
bulmecisco | 7:e7f74f072564 | 160 | bool IsButtonPressed(const int btn); /**< returns true if Button btn is pressed, else false */ |
bulmecisco | 7:e7f74f072564 | 161 | int ReturnButtonPressed(); /**< returns the int value of button pressed */ |
bulmecisco | 4:76acfddc26fb | 162 | int AnyBeeperInBag(); /**< returns an int value (if > 0 equal true) how many beepers in bag; if zero --> false */ |
bulmecisco | 4:76acfddc26fb | 163 | void NibbleLeds(int value); /**< methode for the 4 (half byte) yellow LEDs at the back left side; ie. you can show how many beeper a robot has in his bag with: karel.NibbleLeds(karel.AnyBeeperInBag())*/ |
bulmecisco | 0:66e9a0afcbd6 | 164 | void TurnLedOn(int16_t led);/**< turns the specified one or more LEDs ON; description and name in const.h, such as LED_FL1 = 0x01; front LED white */ |
bulmecisco | 0:66e9a0afcbd6 | 165 | void TurnLedOff(int16_t led);/**< turns the specified one or more LEDs OFF; description and name in const.h, such as LED_FL1 = 0x01; front LED white */ |
bulmecisco | 0:66e9a0afcbd6 | 166 | void RGBLed(bool red, bool green, bool blue); /**<RGB Led with red, green and blue component of the Color */ |
bulmecisco | 0:66e9a0afcbd6 | 167 | void BlueLedsOFF(); /**< OFF all blue LEDs which are on the same Port 1_28 */ |
bulmecisco | 0:66e9a0afcbd6 | 168 | void BlueLedsON(); /**< ON all blue LEDs which are on the same Port 1_28 */ |
bulmecisco | 0:66e9a0afcbd6 | 169 | int Read(); |
fpucher | 17:308802267a62 | 170 | bool IsLedOn(const int led); |
fpucher | 17:308802267a62 | 171 | |
bulmecisco | 0:66e9a0afcbd6 | 172 | }; |
bulmecisco | 12:cedc088eaf05 | 173 | /********************************************//** |
bulmecisco | 12:cedc088eaf05 | 174 | name: Bertl.h \n |
bulmecisco | 13:3ce84646fd74 | 175 | version: 3.0 \n |
bulmecisco | 12:cedc088eaf05 | 176 | author:PE HTL BULME \n |
bulmecisco | 12:cedc088eaf05 | 177 | email: pe@bulme.at \n |
bulmecisco | 12:cedc088eaf05 | 178 | WIKI: https://developer.mbed.org/teams/BERTL_CHEL_18/code/ur_Bertl/wiki/Homepage \n |
bulmecisco | 12:cedc088eaf05 | 179 | description: |
bulmecisco | 12:cedc088eaf05 | 180 | Definition and documentation portion of the class Bertl The Robot. |
bulmecisco | 12:cedc088eaf05 | 181 | |
bulmecisco | 12:cedc088eaf05 | 182 | ***********************************************/ |
bulmecisco | 12:cedc088eaf05 | 183 | |
bulmecisco | 12:cedc088eaf05 | 184 | /** |
bulmecisco | 12:cedc088eaf05 | 185 | @code |
bulmecisco | 12:cedc088eaf05 | 186 | // |
bulmecisco | 12:cedc088eaf05 | 187 | @endcode |
bulmecisco | 12:cedc088eaf05 | 188 | |
bulmecisco | 12:cedc088eaf05 | 189 | Example motor sensor test: |
bulmecisco | 12:cedc088eaf05 | 190 | @code |
bulmecisco | 12:cedc088eaf05 | 191 | #include "mbed.h" |
bulmecisco | 12:cedc088eaf05 | 192 | #include "ur_Bertl.h" |
bulmecisco | 12:cedc088eaf05 | 193 | #include "const.h" |
bulmecisco | 12:cedc088eaf05 | 194 | |
bulmecisco | 12:cedc088eaf05 | 195 | int main() |
bulmecisco | 12:cedc088eaf05 | 196 | { |
bulmecisco | 12:cedc088eaf05 | 197 | ur_Bertl karel(LEFTSENSOR); // RIGHTSENSOR |
bulmecisco | 12:cedc088eaf05 | 198 | |
bulmecisco | 12:cedc088eaf05 | 199 | while(true) { |
bulmecisco | 12:cedc088eaf05 | 200 | karel.NibbleLeds(karel.Read()); |
bulmecisco | 12:cedc088eaf05 | 201 | } |
bulmecisco | 12:cedc088eaf05 | 202 | } |
bulmecisco | 12:cedc088eaf05 | 203 | @endcode |
bulmecisco | 12:cedc088eaf05 | 204 | |
bulmecisco | 12:cedc088eaf05 | 205 | Example follow a line: |
bulmecisco | 12:cedc088eaf05 | 206 | @code |
bulmecisco | 12:cedc088eaf05 | 207 | #include "mbed.h" |
bulmecisco | 12:cedc088eaf05 | 208 | #include "ur_Bertl.h" |
bulmecisco | 12:cedc088eaf05 | 209 | #include "const.h" |
bulmecisco | 12:cedc088eaf05 | 210 | |
bulmecisco | 12:cedc088eaf05 | 211 | int main() |
bulmecisco | 12:cedc088eaf05 | 212 | { |
bulmecisco | 12:cedc088eaf05 | 213 | Bertl karel; |
bulmecisco | 12:cedc088eaf05 | 214 | |
bulmecisco | 12:cedc088eaf05 | 215 | while(karel.WaitUntilButtonPressed()) |
bulmecisco | 12:cedc088eaf05 | 216 | { |
bulmecisco | 12:cedc088eaf05 | 217 | karel.NibbleLeds(karel.GetLineValues()); |
bulmecisco | 12:cedc088eaf05 | 218 | switch(karel.GetLineValues()) |
bulmecisco | 12:cedc088eaf05 | 219 | { |
bulmecisco | 12:cedc088eaf05 | 220 | case 0x00: |
bulmecisco | 12:cedc088eaf05 | 221 | karel.TurnLeftStep(50); |
bulmecisco | 12:cedc088eaf05 | 222 | break; |
bulmecisco | 12:cedc088eaf05 | 223 | case 0x03: case 0x01: case 0x07: |
bulmecisco | 12:cedc088eaf05 | 224 | karel.TurnLeftStep(20); |
bulmecisco | 12:cedc088eaf05 | 225 | break; |
bulmecisco | 12:cedc088eaf05 | 226 | case 0x0E: case 0x0A: case 0x08: |
bulmecisco | 12:cedc088eaf05 | 227 | karel.TurnRigthStep(20); |
bulmecisco | 12:cedc088eaf05 | 228 | break; |
bulmecisco | 12:cedc088eaf05 | 229 | default: |
bulmecisco | 12:cedc088eaf05 | 230 | karel.Move(20); |
bulmecisco | 12:cedc088eaf05 | 231 | break; |
bulmecisco | 12:cedc088eaf05 | 232 | } |
bulmecisco | 12:cedc088eaf05 | 233 | if(!karel.FrontIsClear()) |
bulmecisco | 12:cedc088eaf05 | 234 | karel.TurnLeftStep(1000); |
bulmecisco | 12:cedc088eaf05 | 235 | } |
bulmecisco | 12:cedc088eaf05 | 236 | } |
bulmecisco | 12:cedc088eaf05 | 237 | @endcode |
bulmecisco | 12:cedc088eaf05 | 238 | */ |
bulmecisco | 12:cedc088eaf05 | 239 | class Bertl : public ur_Bertl |
bulmecisco | 12:cedc088eaf05 | 240 | { |
bulmecisco | 12:cedc088eaf05 | 241 | protected: |
bulmecisco | 12:cedc088eaf05 | 242 | public: |
bulmecisco | 12:cedc088eaf05 | 243 | //Bertl(); /**< default constructor; you have to define constants in config.h such as SPEED, DISTANCE or ANGLE*/ |
bulmecisco | 13:3ce84646fd74 | 244 | int Move(int move = MOVE); /**< Robot moves one turn as much as the constant DISTANCE; if one of the buttons fire --> Error()*/ |
bulmecisco | 13:3ce84646fd74 | 245 | int MoveBackwards(int move = MOVE); /**< Robot moves as much back as the constant DISTANCE; if one of the buttons fire --> Error()*/ |
bulmecisco | 12:cedc088eaf05 | 246 | void TurnRigth(); /**< Robot turns rigth as much as the constant ANGLE*/ |
bulmecisco | 12:cedc088eaf05 | 247 | void TurnLeftStep(int step=STEPTIME); /**< Robot turns left for a short time defined in STEPTIME */ |
bulmecisco | 12:cedc088eaf05 | 248 | void TurnRigthStep(int step=STEPTIME); /**< Robot turns rigth for a short time defined in STEPTIME */ |
bulmecisco | 12:cedc088eaf05 | 249 | uint8_t GetLineValues(); /**< in the lower 4 bit are the values of the line sensor */ |
bulmecisco | 13:3ce84646fd74 | 250 | void RGBLed(bool red, bool green, bool blue); /**<RGB Led with red, green and blue component of the Color */ |
bulmecisco | 12:cedc088eaf05 | 251 | }; |
bulmecisco | 0:66e9a0afcbd6 | 252 | #endif |