test_ULN2003_speed1
Rotação num sentido com velocidade variavel definida por um potenciometro.
Este exemplo não faz uso de nenhuma biblioteca.
arduino D8 / Blue – ULN2003 pin 1
arduino D9 / Pink – ULN2003 pin 2
arduino D10 / Yellow – ULN2003 pin 3
arduino D11 / Orange – ULN2003 pin 4
O potenciometro tem os pinos de entrada ligados aos +5V e a GND e o de saida ligado no arduino ao pino A0
int motorPins[] = {8, 9, 10, 11};
int count = 0;
int count2 = 0;
int delayTime = 500;
int val = 0;
void setup() {
for (count = 0; count < 4; count++) { pinMode(motorPins[count], OUTPUT); }
}
void moveForward() {
if ((count2 == 0) || (count2 == 1)) { count2 = 16; } count2>>=1;
for (count = 3; count >= 0; count--) {
digitalWrite(motorPins[count], count2>>count&0x01);
}
delay(delayTime);
}
void moveBackward() {
if ((count2 == 0) || (count2 == 1)) {
count2 = 16;
}
count2>>=1;
for (count = 3; count >= 0; count--) {
digitalWrite(motorPins[3 - count], count2>>count&0x01);
}
delay(delayTime);
}
void loop() {
val = analogRead(0);
if (val > 540) {
// move faster the higher the value from the potentiometer
delayTime = 2048 - 1024 * val / 512 + 1;
moveForward();
} else if (val < 480) {
// move faster the lower the value from the potentiometer
delayTime = 1024 * val / 512 + 1;
moveBackward();
} else {
delayTime = 1024;
}
}