control de velocidad de un motor con 2 botones.

Hola soy un estudiante de ingeniería en sistemas y estoy tomando una materia llamada circuitos, la cual estoy por concluir el tema es el siguiente, el profesor nos pidió hacer un controlador de velocidad de un motor dc 12v, pero con botones. el caso es que no encuentro por ningún lugar una guía o tutorial, al investigar he observado que esto del control del motor se ha echo, pero con un potenciometro y demas movidas como control PWM y puetes H de los cuales no tengo mucho conocimiento. pero el profesor no quiere un potenciometro quiere que la velocidad se regule con botones y en si no tengo idea de como hacerlo, me quería basar en un vídeo que vi sobre leds(que dejare el enlace, en el minuto 00:30).

pero no se si eso aplique a un motor, y pensé en otra manera que es declarando 3 botones cada uno con velocidades distintas en aruduino uno. cabe recalcar que no se programar demasiado en arduino pero entiendo lo elemental ya que se programar en java, ahora solo me queda solicitar su ayuda con la base del código en arduino o el montaje en la protoboard, por cualquier otro elemento del montaje no hay problema se conseguirlo.

para finalizar quiero dar gracias de antemano y aclarar que llevo muy poco tiempo en esto de los sircuitos así que una disculpa si no tengo grandes nociones sobre esto.

Sabes mover un motor con un potenciómetro no?
Bien entonces que tal esto: un boton lo llamas SUBIR o UP y subirá la velocidad como si fuera tu potenciometro. En realidad con cada pulsación subes un contador y ese contador lo limitas de 0 a 255. Si superas 255 lo fijas en 255, asi que ahi tienes un condicional.
Mientras con cada pulsación incrementas el valor del contador en 1 o si quieres de a 2 o de a 5. algo que podrias hacer con un 3er boton.

Ahora el segundo botón que obviamente será para descender la velocidad o bajarla. Se llamara BAJAR o DOWN.
Un contador que empieza donde dejaste el anterior y descuenta 1 con cada pulsación hasta 0. Si es menor que cero entonces lo fijas en 0.

Entonces un contador si pulsas UP se incrementa
contador++; o contador +=1; son dos formas de decir eso
otro que BAJA o DOWN

contador--;  // o 
contador -= 1;      // o 
contador += -1;   // todos hacen lo mismo

ahora lo demas lo haces con el control pwm o sea

analogWrite(pinMotor, contador);

A ver como lo implementas.

Tienes dos ejemplos de uso de motores en el libro de proyectos de Arduino (página 95 hasta la 103 donde empieza el siguiente)

No sólo verás como funciona sino que tienes la teoría, el circuito, un código básico para quienes empiezan y el resto del libro tiene ejemplos de botones.

En una tarde lo tienes. Es cuestión de buscar y leer.
Libro de proyectos de Arduino

Hola, muchas gracias por su ayuda hoy el profesor llego y dijo que nos ayudaria un mucho y nos dio este link

ahora quiere que el motor tenga 9 intensidades como el contador, y ya descargue el libro y ya vi su ayuda como en el código, ahora solo me queda adherir un motor a este código y que suba y baje intensidades. pero me dedicare a esto todo el día de hoy con el libro que me facilitaron. muchas gracias

const int a = 2;  // segmentos del display
const int b = 3;
const int c = 4;
const int d = 5;
const int e = 6;
const int f = 7;
const int g = 8;
const int botonIncremento = 9;
const int botonDecremento = 10;

const int tiempoAntirebote = 10;
int cuenta = 0;
int estadoBotonIncremento;
int estadoBotonAnteriorIncremento;
int estadoBotonDecremento;
int estadoBotonAnteriorDecremento;

boolean antirebote(int pin) {
 int contador = 0;
 boolean estado;
 boolean estadoAnterior;
 
 do {
   estado = digitalRead(pin);
   if(estado != estadoAnterior) {
     contador = 0;
     estadoAnterior = estado;
   }
   else {
     contador = contador + 1;
   }
   delay(1);
 } while(contador < tiempoAntirebote);
 
 return estado;
}

void actualizarNumero() {
 switch(cuenta) {
   case 0:
   digitalWrite(a, HIGH);  // 0
 digitalWrite(b, HIGH);
 digitalWrite(c, HIGH);
 digitalWrite(d, HIGH);
 digitalWrite(e, HIGH);
 digitalWrite(f, HIGH);
 digitalWrite(g, LOW);
 break;
 
   case 1:
   digitalWrite(a, LOW);  // 1
 digitalWrite(b, HIGH);
 digitalWrite(c, HIGH);
 digitalWrite(d, LOW);
 digitalWrite(e, LOW);
 digitalWrite(f, LOW);
 digitalWrite(g, LOW);
 break;
 
   case 2:
   digitalWrite(a, HIGH);  // 2
 digitalWrite(b, HIGH);
 digitalWrite(c, LOW);
 digitalWrite(d, HIGH);
 digitalWrite(e, HIGH);
 digitalWrite(f, LOW);
 digitalWrite(g, HIGH);
 break;
 
   case 3:
    digitalWrite(a, HIGH);  // 3
 digitalWrite(b, HIGH);
 digitalWrite(c, HIGH);
 digitalWrite(d, HIGH);
 digitalWrite(e, LOW);
 digitalWrite(f, LOW);
 digitalWrite(g, HIGH);
 break;
 
   case 4:
   digitalWrite(a, LOW);  // 4
 digitalWrite(b, HIGH);
 digitalWrite(c, HIGH);
 digitalWrite(d, LOW);
 digitalWrite(e, LOW);
 digitalWrite(f, HIGH);
 digitalWrite(g, HIGH);
 break;
 
   case 5:
   digitalWrite(a, HIGH); // 5
 digitalWrite(b, LOW);
 digitalWrite(c, HIGH);
 digitalWrite(d, HIGH);
 digitalWrite(e, LOW);
 digitalWrite(f, HIGH);
 digitalWrite(g, HIGH);
 break;
 
   case 6:
   digitalWrite(a, HIGH);  // 6
 digitalWrite(b, LOW);
 digitalWrite(c, HIGH);
 digitalWrite(d, HIGH);
 digitalWrite(e, HIGH);
 digitalWrite(f, HIGH);
 digitalWrite(g, HIGH);
 break;
 
   case 7:
   digitalWrite(a, HIGH);  // 7
 digitalWrite(b, HIGH);
 digitalWrite(c, HIGH);
 digitalWrite(d, LOW);
 digitalWrite(e, LOW);
 digitalWrite(f, LOW);
 digitalWrite(g, LOW);
 break;
 
   case 8:
   digitalWrite(a, HIGH);  // 8
 digitalWrite(b, HIGH);
 digitalWrite(c, HIGH);
 digitalWrite(d, HIGH);
 digitalWrite(e, HIGH);
 digitalWrite(f, HIGH);
 digitalWrite(g, HIGH);
 break;
 
   case 9:
   digitalWrite(a, HIGH);  // 9
 digitalWrite(b, HIGH);
 digitalWrite(c, HIGH);
 digitalWrite(d, LOW);
 digitalWrite(e, LOW);
 digitalWrite(f, HIGH);
 digitalWrite(g, HIGH);
 break;
 
 }
}


void setup() {
 pinMode(a, OUTPUT);
 pinMode(b, OUTPUT);
 pinMode(c, OUTPUT);
 pinMode(d, OUTPUT);
 pinMode(e, OUTPUT);
 pinMode(f, OUTPUT);
 pinMode(g, OUTPUT);
 pinMode(botonIncremento, INPUT);
 pinMode(botonDecremento, INPUT);
}

void loop() {
 estadoBotonIncremento = digitalRead(botonIncremento);
 if(estadoBotonIncremento !=estadoBotonAnteriorIncremento) {
   if(antirebote(botonIncremento)) {
     cuenta++;
     if(cuenta > 9) {
       cuenta = 9;
     }
   }
 }
 estadoBotonAnteriorIncremento = estadoBotonIncremento;
 
 estadoBotonDecremento = digitalRead(botonDecremento);
 if(estadoBotonDecremento !=estadoBotonAnteriorDecremento) {
   if(antirebote(botonDecremento)) {
     cuenta--;
     if(cuenta < 0) {
       cuenta = 0;
     }
   }
 }
 estadoBotonAnteriorDecremento = estadoBotonDecremento;
 
 actualizarNumero();
}

Por favor cuando entres en un foro nuevo siempre lee las normas del mismo.
Ahora edita tu último post y usa las etiquetas en enlace y código.

Veamos, la salida PWM tiene posibles valores de 0 a 255 o sea, 256 posiciones.
Si tu profesor quiere 9 cambios o 10 solo divide eso entre las posiciones posibles y en lugar de incrementar/decrementar por 1 que lo haga por el valor entero de 256/9 = 28 porque no puedes usar decimales.

Asi que cambia eso a tus contadores.