our little library for controlling a robot with two wheels and an LCD
Robo.cpp
- Committer:
- narendraj9
- Date:
- 2013-10-27
- Revision:
- 0:bb5c5d6800a3
File content as of revision 0:bb5c5d6800a3:
#include "Robo.h" extern DigitalOut buzzer; /* implementation of the Robo contructor */ Robo::Robo(PinName l_en, PinName l_fwd, PinName l_rev, PinName r_en, PinName r_fwd, PinName r_rev, PinName rs, PinName en, PinName d4, PinName d5, PinName d6, PinName d7): lmotor(l_en, l_fwd, l_rev), rmotor(r_en, r_fwd, r_rev), lcd(rs, en, d4, d5, d6, d7) { lives = max_lives; init(); } /* I changed the cls function in the textLCD library * to make it clear only the first row */ void Robo::printlcd(char *msg) // printf msg to the first row of LCD { lcd.cls(); lcd.printf(msg); } void Robo::init() // print the initial msg on the LCD { buzzer = 1; lcd.cls_all(); updateLivesLCD(); for (int i = 0; i < 2; i++) { printlcd("Roger Here!"); wait(1); buzzer = 0; printlcd(" "); wait(1); } printlcd("Roger Here!"); } /* I believe the following functions are pretty straight forward to * understand */ void Robo::goLeft() { rState temp = this->getState(); // store the current state lcd.cls(); lcd.printf("Going Left! "); lmotor.direct(0); // stop the left motor rmotor.direct(1); // start the right motor wait(1); this->setState(temp); // restore original state } void Robo::moveRight() { lcd.cls(); rState temp = this->getState(); lcd.printf("Turning Right! "); rmotor.direct(0); lmotor.direct(1); wait(1); this->setState(temp); } void Robo::stop() { lcd.cls(); rmotor.direct(0); // stop motor left lmotor.direct(0); // stop motor right lcd.printf("Stopped! "); } void Robo::goAhead() { lcd.cls(); lcd.locate(0, 0); rmotor.direct(1); lmotor.direct(1); lcd.printf("Moving Forward!"); } void Robo::moveBack() { lcd.cls(); rmotor.direct(-1); lmotor.direct(-1); lcd.printf("Going Back "); } int Robo::getLives() { return lives; } // update LCD with the current value of the variable lives void Robo::updateLivesLCD() { lcd.locate(0, 1); lcd.printf("lives : %d", lives); lcd.locate(0, 0); } void Robo::decLives() { lives--; printlcd("oops!! "); updateLivesLCD(); if (lives == 0) { stop(); int i = 0; /* if all lives have been exhausted say goodbye to the world * and rest in a peaceful forever loop */ while (++i) { printlcd("GoodBye!! "); wait(0.5); printlcd(" "); wait(0.5); if (i < 4) buzzer = 1; wait(1); buzzer = 0; } } buzzer = 1; wait(1); buzzer = 0; wait(2); } rState Robo::getState() { mState lm = lmotor.getState(); mState rm = rmotor.getState(); rState temp = {lm, rm }; // return a struct var containing the return temp; } void Robo::setState(rState roboState) { lmotor.setState(roboState.lm); rmotor.setState(roboState.rm); }