Paso 2: Conecte al MegaMoto
En primer lugar, necesitamos conectar la MegaMoto. Haga lo siguiente:
-Conectar tu fuente de 12V a la BAT +-terminales
-Conectar el actuador con la MOTA y MOTB
-OPCIONAL conecte BAT + Vin para el Arduino de la computadora de encendido, o dejar el USB enchufado.
-Ajuste los pernos MegaMoto como sigue:
-Habilitar = 13
-PWMA = 11
-PWMB = 3
-Sensor = A5
El botón izquierdo debe hacer que el actuador se extienda, el botón derecho debe hacer el actuador de retracción. Si tus las direcciones son invertidas, luego invierta las conexiones de MOTA y MOTB.
Ahora que se configuran los botones podemos agregar el programa LCD para el resto del programa. Hemos añadido cuatro nuevas funciones. Read_LCD_buttons(), updateTrip(), updateLCD() y printFeedback().
Read_LCD_buttons() es el mismo que el programa de prueba, lee el estado de los botones de la pantalla LCD.
UpdateTrip() se utiliza para comprobar los resultados de la Up y botones y cambiar el límite de amperios para viaje el cierre de seguridad en.
UpdateLCD() es el LCD general escribiendo la función, que escribe la nueva información en la pantalla LCD.
PrintFeedback() escribe el amperaje actual en la pantalla LCD. Esto es independiente de la función principal updateLCD(), por lo que podemos ver la corriente en tiempo real, en lugar esperando el programa a lazo.
Cargar el programa de prueba es, en el siguiente paso que iré sobre las distintas secciones del código en detalle.
Nota: Los límites de viaje y comentarios actuales no son realmente el número de amperios que se están encontrando, son sólo los resultados del sensor de corriente. Puede añadir una ecuación para convertir el valor en amperios antes que escribir en la pantalla LCD.
! rightlatch; botón = btnNONE; firstRun = true; lastButtonpress = millis(); retorno; {}} //end si} //end btnRIGHT} //end latchButtons int read_LCD_buttons() {adc_key_in = analogRead(A0); / leer el valor del sensor delay(20); si (adc_key_in > ninguno - umbral & & adc_key_in < ninguno + umbral) devuelve btnNONE; si (adc_key_in > btnup - umbral & & adc_key_in < btnup + umbral) volver btnUP; si (adc_key_in > btndown - umbral & & adc_key_in < btndown + umbral) volver btnDOWN; si (adc_key_in > btnleft - umbral y & adc_key_in < btnleft + umbral) volver btnLEFT; Si (adc_key_in > btnright - umbral & & adc_key_in < btnright + umbral) volver btnRIGHT; Si (adc_key_in > seleccione - umbral & & adc_key_in < select + umbral) vuelta btnSELECT; volver btnNONE; Cuando todos los demás no devolver ninguno} //end readLCD void updateTrip() {si (botón == btnUP) {currentTimetrip = millis() - lastUpdate; si (currentTimetrip > updateTime) {maxAmps = maxAmps + 1; if (maxAmps > 999) maxAmps = 0; //check para el sobrevolar lcd.setCursor (13, 1); lcd.print(""); //clear valor anterior si lcd.setCursor (maxAmps > 99) (13, 1); else if (maxAmps > 9) lcd.setCursor (14, 1); lcd.setCursor otro (15, 1); //set cursor por consiguiente lcd.print (maxAmps); //write nuevo valor lastUpdate = millis(); } //end si} //end si btnUP else if (botón == btnDOWN) {currentTimetrip = millis() - lastUpdate; if (currentTimetrip > updateTime) {maxAmps = maxAmps - 1; si (maxAmps < 0) maxAmps = 999; //check para el sobrevolar lcd.setCursor (13, 1); lcd.print(""); //clear valor anterior si (maxAmps > 99) lcd.setCursor (13, 1); else if (maxAmps > 9) lcd.setCursor (14, 1); lcd.setCursor otro (15, 1); //set cursor por consiguiente lcd.print (maxAmps); //write nuevo valor lastUpdate = millis(); {} //end si} //end if else btnDOWN} //end updateTrip void moveMotor() {si (leftlatch == HIGH) motorForward(255); //speed = 0-255 si (leftlatch == LOW) motorStop(); si (rightlatch == HIGH) motorBack(255); //speed = 0-255 si (rightlatch == baja) motorStop();} fin moveMotor void motorForward (int speeed) {mientras que (dontExtend == false & & leftlatch == HIGH) {//Serial.println ("movimiento remite"); digitalWrite (EnablePin, alto); analogWrite (PWMPinA, speeed); analogWrite (PWMPinB, 0) if motor //move (firstRun == true) delay(firstfeedbacktimedelay); más delay(feedbacktimedelay); //small demora para llegar a velocidad getFeedback() firstRun = false; latchButtons();} final mientras} //end motorForward void motorBack (int speeed) {mientras que (rightlatch == HIGH) {//Serial.println ("regresando") digitalWrite (EnablePin alta); analogWrite (PWMPinA, 0); analogWrite (PWMPinB, speeed); delay(3) motor //move; //small demora para llegar a currentTimefeedback la velocidad = millis() - lastfeedbacktime; if (firstRun == true & & currentTimefeedback > firstfeedbacktimedelay) getFeedback(); //if no ha tenido tiempo suficiente, hacer nada si (firstRun == false & & currentTimefeedback > feedbacktimedelay) getFeedback(); //if no ha sido suficiente , no firstRun = false; latchButtons(); } //end mientras dontExtend = false; } //end motorBack void motorStop() {analogWrite (PWMPinA, 0); analogWrite (PWMPinB, 0); digitalWrite (EnablePin, LOW); firstRun = true; //once ha detenido el motor, volver a habilitar firstRun a picos corriente de inicio} //end stopMotor void getFeedback() {CRaw = analogRead(CPin1); if (CRaw == 0 & & hitLimits < hitLimitsmaxback) hitLimits = hitLimits + 1; else if (CRaw == 0 & & hitLimits < hitLimitsmaxfront) hitLimits = hitLimits + 1; hitLimits otra cosa = 0; si (hitLimits == hitLimitsmaxback) {rightlatch = bajo;} final si si (hitLimits == hitLimitsmaxfront) {leftlatch = bajo; hitLimits = 0;} final si si (CRaw > maxAmps) {dontExtend = true; leftlatch = bajo;} terminar si printFeedback(); lastfeedbacktime = millis (); //store tiempo anterior para recibir retroalimentación} //end getFeedback void printFeedback() {lcd.setCursor (5, 1); lcd.print(""); Si (CRaw > 99) lcd.setCursor (5, 1); else if (CRaw > 9) lcd.setCursor (6, 1); Else lcd.setCursor (7, 1); LCD.Print(CRaw); } //end printFeedback