Hello!
I have my arduino uno hooked up to a L293D dual h-bridge with an LED on each out put. So if the positive voltage goes out one terminal, one of the LEDs will light up to indicate the motor will be turning in that direction. Again there is not motor currently wired into it, and i have confirmed that this system works, no circuit problems here! I'm trying to create a simple closed loop feed back system to control to control a geared dc motor like a servo by attaching a potentiometer (variable resistor) to the end of the motor shaft to give the arduino some data to work with. In this testing stage in addition to the two LEDs hooked up to the h-bridge a pot-meter by itself is being used so i can mimic the rotation of the motors shaft with out a motor. My problem is when I start my arduino (with the pot-meter off the target value) the led lights up (good so far), but when i turn the meter past it it stays on. It flickers when the value is in range but never turns the other direction.
my code:
int enablepin = 9; int mpin1 = 6; int mpin2 = 3; int desiredpos; int ifint; int feedbackpin = A5; int mindegrees = 0; int maxdegrees = 180; int minfeedback = 40;; int maxfeedback = 980; int tolerance = 2; int getPos(int analogPinn) { return map(analogRead(analogPinn), minfeedback, maxfeedback, mindegrees, maxdegrees); } void Seek(int left_pin, int right_pin, int analogPin, int pos, int Speed) { int currentpos = getPos(analogPin); Serial.println(currentpos); int currentpin; int target = map(pos, mindegrees, maxdegrees, minfeedback, maxfeedback); if(currentpos < target) { if (target < 90) { currentpin = right_pin; } if (target > 90) { currentpin = left_pin; } } if(currentpos > target) { if (target > 90) { currentpin = right_pin; } if (target < 90) { currentpin = left_pin; } } analogWrite(currentpin, Speed); while(abs(analogRead(analogPin) - target) > tolerance){} analogWrite(currentpin, 0); } void setup() { Serial.begin(9600); Serial.print(""); pinMode(enablepin, OUTPUT); pinMode(mpin1, OUTPUT); pinMode(mpin2, OUTPUT); digitalWrite(enablepin, HIGH); digitalWrite(mpin1, LOW); digitalWrite(mpin2, LOW); desiredpos = 50; //Seek(mpin1, mpin2, feedbackpin, 50, 5); } void loop() { ifint = (getPos - desiredpos); if (ifint > tolerance) { Seek(mpin1, mpin2, feedbackpin, desiredpos, 5); } }