/* L9110S_Motor_Driver_Example - Arduino sketch Thank you Banana Robotics for the Bulk of this code. Connections: Arduino digital output D10 to motor driver input B-IA. Arduino digital output D11 to motor driver input B-IB. Motor driver VCC to operating voltage 5V. Motor driver GND to common ground. Motor driver MOTOR B screw terminals to a small motor. */ // wired connections #define L9110S_B_IA 10 // D10 --> Motor B Input A --> MOTOR B + #define L9110S_B_IB 11 // D11 --> Motor B Input B --> MOTOR B - // functional connections #define MOTOR_B_PWM L9110S_B_IA // Motor B PWM Speed #define MOTOR_B_DIR L9110S_B_IB // Motor B Direction // the actual values for "fast" and "slow" depend on the motor #define PWM_SLOW 50 // arbitrary slow speed PWM duty cycle #define PWM_FAST 200 // arbitrary fast speed PWM duty cycle #define DIR_DELAY 1000 // brief delay for abrupt motor changes void setup() { Serial.begin( 9600 ); pinMode( MOTOR_B_DIR, OUTPUT ); pinMode( MOTOR_B_PWM, OUTPUT ); digitalWrite( MOTOR_B_DIR, LOW ); digitalWrite( MOTOR_B_PWM, LOW ); } void loop() { boolean isValidInput; // draw a menu on the serial port Serial.println( "-----------------------------" ); Serial.println( "MENU:" ); Serial.println( "1) Fast forward" ); Serial.println( "2) Forward" ); Serial.println( "3) Soft stop (coast)" ); Serial.println( "4) Reverse" ); Serial.println( "5) Fast reverse" ); Serial.println( "6) Hard stop (brake)" ); Serial.println( "-----------------------------" ); do { byte c; // get the next character from the serial port Serial.print( "?" ); while( !Serial.available() ) ; // LOOP... c = Serial.read(); // execute the menu option based on the character recieved switch( c ) { case '1': // 1) Fast forward Serial.println( "Fast forward..." ); // always stop motors briefly before abrupt changes digitalWrite( MOTOR_B_DIR, LOW ); digitalWrite( MOTOR_B_PWM, LOW ); delay( DIR_DELAY ); // set the motor speed and direction digitalWrite( MOTOR_B_DIR, HIGH ); // direction = forward analogWrite( MOTOR_B_PWM, 255-PWM_FAST ); // PWM speed = fast isValidInput = true; break; case '2': // 2) Forward Serial.println( "Forward..." ); // always stop motors briefly before abrupt changes digitalWrite( MOTOR_B_DIR, LOW ); digitalWrite( MOTOR_B_PWM, LOW ); delay( DIR_DELAY ); // set the motor speed and direction digitalWrite( MOTOR_B_DIR, HIGH ); // direction = forward analogWrite( MOTOR_B_PWM, 255-PWM_SLOW ); // PWM speed = slow isValidInput = true; break; case '3': // 3) Soft stop (preferred) Serial.println( "Soft stop (coast)..." ); digitalWrite( MOTOR_B_DIR, LOW ); digitalWrite( MOTOR_B_PWM, LOW ); isValidInput = true; break; case '4': // 4) Reverse Serial.println( "Fast forward..." ); // always stop motors briefly before abrupt changes digitalWrite( MOTOR_B_DIR, LOW ); digitalWrite( MOTOR_B_PWM, LOW ); delay( DIR_DELAY ); // set the motor speed and direction digitalWrite( MOTOR_B_DIR, LOW ); // direction = reverse analogWrite( MOTOR_B_PWM, PWM_SLOW ); // PWM speed = slow isValidInput = true; break; case '5': // 5) Fast reverse Serial.println( "Fast forward..." ); // always stop motors briefly before abrupt changes digitalWrite( MOTOR_B_DIR, LOW ); digitalWrite( MOTOR_B_PWM, LOW ); delay( DIR_DELAY ); // set the motor speed and direction digitalWrite( MOTOR_B_DIR, LOW ); // direction = reverse analogWrite( MOTOR_B_PWM, PWM_FAST ); // PWM speed = fast isValidInput = true; break; case '6': // 6) Hard stop (use with caution) Serial.println( "Hard stop (brake)..." ); digitalWrite( MOTOR_B_DIR, HIGH ); digitalWrite( MOTOR_B_PWM, HIGH ); isValidInput = true; break; default: // wrong character! display the menu again! isValidInput = false; break; } } while( isValidInput == true ); // repeat the main loop and redraw the menu... }