Si estas en España, tus instalaciones tienen un golpe de calor !!!
Hasta pronto!!!
Si estas en España, tus instalaciones tienen un golpe de calor !!!
Hasta pronto!!!
Hola sigo con el código, ahora simplificado.
De la sección motor:
He suprimido el array y reducido el millis.
A partir de ahora, responded sobre el código siguiente .
NO el del #19, es casi igual, salvo las correcciones comentadas y sigue funcionando bien.
Os comentaba en el #19 :
( He conseguido escribir un código nuevo, que mediante millis enciendo intermitentes dos leds, independientes entre si y ademas hago funcionar un motor pap, todo al mismo tiempo y sin interferirse entre si.
Vuelvo a la pregunta del principio:
Como conseguir que el motor corra 145 pasos y se detenga un tiempo determinado de descanso y vuelva a empezar ...????? )
Un saludo !!!.....
/*
*
* M_MOTOR_PAP_UNIPO_EXPER_3_copia_FORO
*
*
*/
// ================================== ENGRAL JUL 2023 =================================
const int Limite = 4;
int Saltos;
byte IntervaloMotor = 3 ; // Tiempo del IntervaloMotor
unsigned long TiempoMotor;
// *****************************************
boolean estadoLED7 = true;
boolean estadoLED12 = true;
int INTERVALO_LED_7 = 513 ; //tiempo de INTERVALO LED 7
int INTERVALO_LED_12 = 200 ; //tiempo de INTERVALO LED 12
unsigned long TiempoLED7;
unsigned long TiempoLED12;
// =================================== FUNCIONES " Pasos" DEL MOTOR PAP ===================================
void Paso0() // Función del paso "0".
{
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
void Paso1() // Función del paso "1".
{
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
}
void Paso2() // Función del paso "2".
{
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
}
void Paso3() // Función del paso "3".
{
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
}
void setup()
{
Serial.begin(9600);
Serial.println(" ======== TITULO: M_MOTOR_PAP_UNIPO_EXPER_3_copia_FORO =============");
Serial.println("");
pinMode(7, OUTPUT); // pin digital 7 de Arduino a intermitente
pinMode(8, OUTPUT); // pin digital 8 de Arduino a IN1 de modulo controlador
pinMode(9, OUTPUT); // pin digital 9 de Arduino a IN2 de modulo controlador
pinMode(10, OUTPUT); // pin digital 10 de Arduino a IN3 de modulo controlador
pinMode(11, OUTPUT); // pin digital 11 de Arduino a IN4 de modulo controlador
pinMode(12, OUTPUT); // pin digital 12 de Arduino a intermitente
Saltos = 0;
}
void loop()
{
// ***************************** SECCION: LEDS INTERMITENTES *****************************
if ((millis()- TiempoLED7) >= INTERVALO_LED_7)// Tiempo 513
{
estadoLED7 = !estadoLED7;
digitalWrite (7, estadoLED7);
TiempoLED7 = millis();
}
if ((millis() - TiempoLED12) >= INTERVALO_LED_12)// Tiempo 200
{
estadoLED12 = !estadoLED12;
digitalWrite (12, estadoLED12);
TiempoLED12 = millis();
}
// ******************************* SECCION: MOTOR PAP ***********************
if ( millis() - TiempoMotor > IntervaloMotor )
{
TiempoMotor = millis(); // ============== "TiempoMotor" toma el valor actual de "millis"
Saltos++; // ============ Incrementa en "1" el "case" / "Saltos" en SWITCH .
if ( Saltos == Limite ) Saltos = 0; // Si "Saltos" llega al valor "LimiteSaltos"=4: cambia al primer "Saltos":"case 0".
switch ( Saltos )
{
case 0:
Paso0(); //============= realiza la funcion "Paso "0"
break;
case 1:
Paso1();// ============= realiza la funcion "Paso 1"
break;
case 2:
Paso2(); // ============ realiza la funcion "Paso 2"
break;
case 3:
Paso3(); // ============ realiza la funcion "Paso 3"
break;
}
}
}
// ============================================= FIN ===============================
Naaah... Bs. As. "Voló" un transformador, hace 3 días que estamos esperando que lo repongan.
Ahora estoy trabajando y acá todo funciona, al menos por ahora...
Fijate si así te sirve
/*
M_MOTOR_PAP_UNIPO_EXPER_2_copia_FORO
*/
// ================================== ENGRAL JUL 2023 =================================
const int LIMITEPASOS = 145;
int pasos;
const int LIMITESALTOS = 5;
int saltos;
const unsigned long INTERVALO[LIMITESALTOS] = { 3, 3, 3, 3, 2000};
unsigned long TiempoInicial;
// *****************************************
boolean estadoLED7 = true;
boolean estadoLED12 = true;
const int INTERVALO_LED_7 = 513 ; //tiempo de INTERVALO LED 7
const int INTERVALO_LED_12 = 200 ; //tiempo de INTERVALO LED 12
unsigned long TiempoLED7;
unsigned long TiempoLED12;
// =================================== FUNCIONES " saltos" DEL MOTOR PAP ===================================
void salto0() // Función del paso "0".
{
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
void salto1() // Función del paso "1".
{
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
}
void salto2() // Función del paso "2".
{
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
}
void salto3() // Función del paso "3".
{
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
}
void salto4() // Función del paso "4". DESCANSO
{
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
void setup()
{
Serial.begin(9600);
Serial.println(" ======== TITULO: M_MOTOR_PAP_UNIPO_EXPER_2_copia_FORO =============");
Serial.println("");
pinMode(7, OUTPUT); // pin digital 7 de Arduino a intermitente
pinMode(8, OUTPUT); // pin digital 8 de Arduino a IN1 de modulo controlador
pinMode(9, OUTPUT); // pin digital 9 de Arduino a IN2 de modulo controlador
pinMode(10, OUTPUT); // pin digital 10 de Arduino a IN3 de modulo controlador
pinMode(11, OUTPUT); // pin digital 11 de Arduino a IN4 de modulo controlador
pinMode(12, OUTPUT); // pin digital 12 de Arduino a intermitente
pasos = 0;
saltos = 0;
}
void loop()
{
// ***************************** SECCION: LEDS INTERMITENTES *****************************
if ((millis() - TiempoLED7) >= INTERVALO_LED_7) // Tiempo 513
{
estadoLED7 = !estadoLED7;
digitalWrite (7, estadoLED7);
TiempoLED7 = millis();
}
if ((millis() - TiempoLED12) >= INTERVALO_LED_12)// Tiempo 200
{
estadoLED12 = !estadoLED12;
digitalWrite (12, estadoLED12);
TiempoLED12 = millis();
}
// ******************************* SECCION: MOTOR PAP ***********************
if ( millis() - TiempoInicial > INTERVALO[saltos] )
{
TiempoInicial = millis(); // ============== "TiempoInicial" toma el valor actual de "millis"
switch ( saltos )
{
case 0:
salto0(); //============= realiza la funcion "salto "0"
break;
case 1:
salto1();// ============= realiza la funcion "salto 1"
break;
case 2:
salto2(); // ============ realiza la funcion "salto 2"
break;
case 3:
if (pasos < LIMITEPASOS)
{
salto3(); // ============ realiza la funcion "salto 3"
saltos = -1; // pongo -1 para que incremento a continuación ponga en 0
pasos++;
}
break;
case 4:
salto4(); // ============ realiza la funcion "salto 3"
pasos = 0;
saltos = -1; // pongo -1 para que incremento a continuación ponga en 0
break;
}
saltos++; // incrementa
}
}
// ============================================= FIN ===============================
Cambié algunos nombres para que fuese más claro (creo...)
La simulación
.
Hola MaximoEsfuerzo
He recibido tu variación y parece que funciona correctamente, ya te lo confirmare.
Saludos y paciencia con los "apagones" !!!!!.... y karma para el caballero !!!
.
Fijate que en el primer bucle da 1 paso de menos, tendría que mostrar 580 pasos y marca 579 cuando hace el primer descanso, después marca bien.
No encontré error en el código (o no lo estoy viendo) por el cual da 1 paso menos, tal vez es un error del simulador.
Hola MaximoEsfuerzo
Creo que ya lo tenemos dominado !!!
El código que has revisado, realiza perfectamente lo que en un principio consulté.
He añadido un Serialprint en case 3 para controlar los pasos y llegan perfectamente a los 145 solicitados.
Solo me quedan unas pequeñas dudas:
Por el resto,.... felicitaciones !!!!
Gracias por tu tiempo !!!! ... ....
/*
M_MOTOR_PAP_UNIPO_EXPER_2_copia_FORO-REVISADO
*/
// ================================== ENGRAL JUL 2023 =================================
const int LIMITEPASOS = 145;
int pasos;
const int LIMITESALTOS = 5; // Declara el numero de posiciones en el array.
int saltos;
const unsigned long INTERVALO[LIMITESALTOS] = { 3, 3, 3, 3, 4000};
unsigned long TiempoInicial;
// *****************************************
boolean estadoLED7 = true;
boolean estadoLED12 = true;
const int INTERVALO_LED_7 = 513 ; //tiempo de INTERVALO LED 7
const int INTERVALO_LED_12 = 200 ; //tiempo de INTERVALO LED 12
unsigned long TiempoLED7;
unsigned long TiempoLED12;
// =================================== FUNCIONES " saltos" DEL MOTOR PAP ===================================
void salto0() // Función del paso "0".
{
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
void salto1() // Función del paso "1".
{
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
}
void salto2() // Función del paso "2".
{
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
}
void salto3() // Función del paso "3".
{
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
}
void salto4() // Función del paso "4". DESCANSO
{
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
void setup()
{
Serial.begin(9600);
Serial.println(" ======== TITULO: M_MOTOR_PAP_UNIPO_EXPER_2_copia_FORO_REVISADO =============");
Serial.println("");
pinMode(7, OUTPUT); // pin digital 7 de Arduino a intermitente
pinMode(8, OUTPUT); // pin digital 8 de Arduino a IN1 de modulo controlador
pinMode(9, OUTPUT); // pin digital 9 de Arduino a IN2 de modulo controlador
pinMode(10, OUTPUT); // pin digital 10 de Arduino a IN3 de modulo controlador
pinMode(11, OUTPUT); // pin digital 11 de Arduino a IN4 de modulo controlador
pinMode(12, OUTPUT); // pin digital 12 de Arduino a intermitente
pasos = 0;
saltos = 0;
}
void loop()
{
// ***************************** SECCION: LEDS INTERMITENTES *****************************
if ((millis() - TiempoLED7) >= INTERVALO_LED_7) // Tiempo 513
{
estadoLED7 = !estadoLED7;
digitalWrite (7, estadoLED7);
TiempoLED7 = millis();
}
if ((millis() - TiempoLED12) >= INTERVALO_LED_12)// Tiempo 200
{
estadoLED12 = !estadoLED12;
digitalWrite (12, estadoLED12);
TiempoLED12 = millis();
}
// ******************************* SECCION: MOTOR PAP ***********************
if ( millis() - TiempoInicial > INTERVALO[saltos] )
{
TiempoInicial = millis(); // ============== "TiempoInicial" toma el valor actual de "millis"
switch ( saltos )
{
case 0:
salto0(); //============= realiza la funcion "salto "0"
break;
case 1:
salto1();// ============= realiza la funcion "salto 1"
break;
case 2:
salto2(); // ============ realiza la funcion "salto 2"
break;
case 3:
if (pasos < LIMITEPASOS)
{
salto3(); // ============ realiza la funcion "salto 3"
saltos = -1; // pongo -1 para que INCRMENTO SALTOS a continuación ponga en 0
pasos++;
Serial.print ( "======= pasos "); // SERIAL AÑADIDO PARA CONTROLAR nº PASOS !!!!
Serial.println ( pasos );
}
break;
case 4:
salto4(); // ============ realiza la funcion "salto 4"
pasos = 0;
saltos = -1; // pongo -1 para que incremento a continuación ponga en 0
break;
}
saltos++; // INCREMENTO SALTOS
}
}
// ============================================= FIN ===============================
Espérame un rato que tengo una versión que funciona a la perfección.
Encontré la explicación al paso de menos (que en la nueva versión era de más), está mal la secuencia de energizado de las bobinas (al menos lo está para como está conectado el motor en el simulador), modifiqué la secuencia y se arregló.
Sobre lo que quedan las bobinas con energía, es un problema del código.
Lo hice en base al tuyo (mala costumbre mía de tratar de no modificar las ideas de los demás) y resulta que tu código primero hace la espera y cuando se cumple el tiempo hace el paso.
Cuando hace el descanso todavía no ejecuta el paso 4 que apaga las bobinas, recien lo hace cuando pasan los 2 segundos, por eso quedan energizadas.
En realidad lo correcto es que ejecute el paso y luego espere lis 3 mseg o los 2 seg.
Consulta: el motor se conecta invariablemente en esos pines, cierto?
.
Hola MaximoEsfuerzo:
Si, son los pines que cito en el código.
Son los: 8 y 9.
Parece que es en el salto2 el que queda anclado, según veras.
void salto2() // Función del paso "2".
{
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
}
Fíjate que amplié el tiempo a 4 segundos para verlo mejor (durante este tiempo, están encendidos LEDS del Arduino y las bobinas a través del ULN2003).
const unsigned long INTERVALO[LIMITESALTOS] = { 3, 3, 3, 3, 4000};
Quedo a la espera que me has dicho.
Saludos !!!!
.
Te consulté lo de los pines porque este código trabaja directamente sobre el puerto entonces cambia el estado de los pines todos de un tirón.
/*
M_MOTOR_PAP_UNIPO_EXPER_2_FORO v2
*/
// ================================== ENGRAL JUL 2023 =================================
const int LIMITE_CICLOS = 145;
int contadorCiclos;
const int LIMITE_PASOS = 4;
int contadorPasos;
const unsigned long INTERVALO_PASOS = 3;
const unsigned long INTERVALO_CICLOS = 2000;
unsigned long TiempoInicial;
// *****************************************
boolean estadoLED7 = true;
boolean estadoLED12 = true;
const int INTERVALO_LED_7 = 513 ; //tiempo de INTERVALO LED 7
const int INTERVALO_LED_12 = 200 ; //tiempo de INTERVALO LED 12
unsigned long tiempoLED7;
unsigned long tiempoLED12;
boolean ejecutarPaso = true;
boolean ejecutarDescanso = true;
const byte CONF_DESCANSO = 0B0000;
// const byte CONF_PASO[LIMITE_PASOS + 1] = {0B0110, 0B0101, 0B1001, 0B1010, CONF_DESCANSO};
const byte CONF_PASO[LIMITE_PASOS + 1] = {0B1100, 0B0110, 0B0011, 0B1001, CONF_DESCANSO};
// =================================== FUNCIONES " contadorPasos" DEL MOTOR PAP ===================================
void darPaso(int numPaso) {
byte tmpB = PORTB; // copia el estado del port B
tmpB &= 0B11110000; // enmascara los pines 8 a 11
PORTB = tmpB | CONF_PASO[numPaso]; // cambia los 4 pines en una sola operación
/*
Serial.print(contadorCiclos);
Serial.print("\t\t");
Serial.println(numPaso);
*/
}
void setup() {
Serial.begin(115200);
Serial.println(" ======== TITULO: M_MOTOR_PAP_UNIPO_EXPER_2_copia_FORO =============");
Serial.println("");
pinMode(7, OUTPUT); // pin digital 7 de Arduino a intermitente
pinMode(8, OUTPUT); // pin digital 8 de Arduino a IN1 de modulo controlador
pinMode(9, OUTPUT); // pin digital 9 de Arduino a IN2 de modulo controlador
pinMode(10, OUTPUT); // pin digital 10 de Arduino a IN3 de modulo controlador
pinMode(11, OUTPUT); // pin digital 11 de Arduino a IN4 de modulo controlador
pinMode(12, OUTPUT); // pin digital 12 de Arduino a intermitente
contadorCiclos = 0;
contadorPasos = 0;
byte tmpB = PORTB; // copia el estado del port B
tmpB &= 0B11110000; // enmascara los pines 8 a 11
PORTB = tmpB; // pone LOW en los pines 8 a 11 sin cambiar los otros
delay(50);
}
void loop() {
// ***************************** SECCION: LEDS INTERMITENTES *****************************
if ((millis() - tiempoLED7) >= INTERVALO_LED_7) { // Tiempo 513
estadoLED7 = !estadoLED7;
digitalWrite (7, estadoLED7);
tiempoLED7 = millis();
}
if ((millis() - tiempoLED12) >= INTERVALO_LED_12) { // Tiempo 200
estadoLED12 = !estadoLED12;
digitalWrite (12, estadoLED12);
tiempoLED12 = millis();
}
// ******************************* SECCION: MOTOR PAP ***********************
if (contadorCiclos < LIMITE_CICLOS) {
if (ejecutarPaso) {
darPaso(contadorPasos);
ejecutarPaso = false;
}
else {
if (millis() - TiempoInicial > INTERVALO_PASOS ) {
TiempoInicial = millis(); // ============== "TiempoInicial" toma el valor actual de "millis"
if (contadorPasos == 3) {
contadorPasos = 0;
contadorCiclos++;
} else {
contadorPasos++;
}
ejecutarPaso = true;
}
}
}
else {
if (ejecutarDescanso) {
darPaso(LIMITE_PASOS);
ejecutarDescanso = false;
}
else {
if (millis() - TiempoInicial > INTERVALO_CICLOS) {
TiempoInicial = millis(); // ============== "TiempoInicial" toma el valor actual de "millis"
contadorPasos = 0;
contadorCiclos = 0;
ejecutarDescanso = true;
}
}
}
// delay(1); // para wokwi
}
// ============================================= FIN ===============================
Cambié nuevamente algunos nombres por aquí y por allá (creo que ahora está más claro lo que es cada cosa).
Cualquier duda consulta.
Hola MaximoEsfuerzo
Veo que sigues con problemas eléctricos. !!!!
Veo que estas reformando mi código con contadores, yo también estoy haciendo pruebas por ese camino.
A ver si al fin lo matamos (por insistencia o por cansancio)
Seguimos !!!
Un saludo !!!... ...
He probado en conexión real tu nueva propuesta.
Hace la parada de 2 segundos, pero luego vibra, no decidiéndose si avanzar o atrasar.
Bufff..... que pesado se esta poniendo !!!...
Un saludo !!!....
Debe ser la secuencia de las bobinas
const byte CONF_PASO[LIMITE_PASOS + 1] = {0B0110, 0B0101, 0B1001, 0B1010, CONF_DESCANSO};
Cambiala por
const byte CONF_PASO[LIMITE_PASOS + 1] = {0B1100, 0B0110, 0B0011, 0B1001, CONF_DESCANSO};
Hola MaximoEsfuerzo
AL FIN HA FUNCIONADO !!!! .
Siguiendo tus instrucciones, he cambiado la configuración en el código y ya no vibra y se apaga todo en el descanso.
El resto funciona tal como deseábamos.
Podemos dar por acabado este hilo.
Te doy mis felicitaciones, por tu aportación y dedicación a pesar de los "apagones" !!!
Un saludo !!!.. ...
...
i cant speak your language but as i understand from code samples you are tring to implement millis functions for dc motors and leds. here is a simple solution of 2 dc motor 4 direction with duration sketch.there 2 sketch tab main and motors main file has loop motor files has functions
int duration = 0;
unsigned long startMillis;
unsigned long currentMillis;
float temp, humid;
//============
void setup() {
Serial.begin(57600);
startMillis = millis();
temp_setup();
motor_setup();
Serial.println("This app expects 2 pieces of data - text Direction, an integer movement duration");
Serial.println("Enter data in this style <f, 500> ");
Serial.println();
}
//============
void loop() {
//there is some code to get serial commands here
set_motor_directions(direction);
newData = false;
}
/* motor duration function*/
stop_motors();
/* read temp & Humidity function*/
temp_read(temp, humid);
// Serial.print(t);
// Serial.print(h);
}
}
motors sketch
// Define the control inputs
#define MOT_A1_PIN 2
#define MOT_A2_PIN 3
#define MOT_B1_PIN 4
#define MOT_B2_PIN 5
void motor_setup() {
// Set all the motor control inputs to OUTPUT
pinMode(MOT_A1_PIN, OUTPUT);
pinMode(MOT_A2_PIN, OUTPUT);
pinMode(MOT_B1_PIN, OUTPUT);
pinMode(MOT_B2_PIN, OUTPUT);
// Turn off motors - Initial state
digitalWrite(MOT_A1_PIN, LOW);
digitalWrite(MOT_A2_PIN, LOW);
digitalWrite(MOT_B1_PIN, LOW);
digitalWrite(MOT_B2_PIN, LOW);
}
void set_motor_pwm(int pwm, int IN1_PIN, int IN2_PIN) {
if (pwm < 0) { // reverse speeds
analogWrite(IN1_PIN, -pwm);
digitalWrite(IN2_PIN, LOW);
} else { // stop or forward
digitalWrite(IN1_PIN, LOW);
analogWrite(IN2_PIN, pwm);
}
}
void set_motor_currents(int pwm_A, int pwm_B) {
set_motor_pwm(pwm_A, MOT_A1_PIN, MOT_A2_PIN);
set_motor_pwm(pwm_B, MOT_B1_PIN, MOT_B2_PIN);
// Print a status message to the console.
// Serial.println();
// Serial.print("Set motor A PWM = ");
// Serial.print(pwm_A);
// Serial.print(" motor B PWM = ");
// Serial.println(pwm_B);
}
void set_motor_directions(String direction) {
char a = direction.charAt(0);
startMillis = currentMillis; //IMPORTANT to save the start time of the current LED state.
switch (a) {
case 'f':
set_motor_currents(255, 255);
break;
case 'b':
set_motor_currents(-255, -255);
break;
case 'l':
set_motor_currents(-255, 255);
break;
case 'r':
set_motor_currents(255, -255);
break;
default:
set_motor_currents(0, 0);
break;
}
}
void stop_motors(){
currentMillis = millis();
if (currentMillis - startMillis >= (duration)) {
set_motor_currents(0, 0);
startMillis = currentMillis;
}
}
Hola drascom
Gracias por tu interés, pero se trata de motores paso a paso.
De todas maneras, tu codigo, seguro que sera útil en otra ocasión.
Thanks for your interest, but these are stepper motors.
Anyway, your code will surely be useful another time.
All the best!!!
Near
Un saludo !!!
Hola a todos
Aunque casi esta a tiempo de cerrarse este hilo,
he creído interesante añadir otro código que cumple la pregunta inicial de: utilizar millis en un código de un motor paso-paso.
Tal vez, le sirva alguien esta nueva aportación.
Un saludo !!!!... ...
/* Gira MOTOR PAP en una sola direccion, al mismo tiempo
Dos Leds parpadean con diferente secuencia
SIN Serial.println
( si se utilizan los SERIAL PRINT: TODO MAS LENTO !!!!)
Cada"PasoX" determina la ejecucion de su funcion.
El INTERVALO de MILLIS determina el tiempo entre cada Paso.
El Paso "0" es el primer Paso: cuenta: 0, 1, 2, 3.
*/
// ================================== ENGRAL FEB 2023 =================================
const int Pasos = 4; //: 0, 1, 2, 3, 4.
int Paso;
unsigned long Tanterior; //Declaracion GLOBAL tiempo ANTERIOR de millis.
// *****************************************
boolean estadoLED7 ;
boolean estadoLED12 ;
const int INTERVALO_LED_7 = 500 ; //tiempo de INTERVALO led 7
const int INTERVALO_LED_12 = 200 ; //tiempo de INTERVALO led 12
int INTERVALO = 4 ; //tiempo de INTERVALO motor = 4
unsigned long TiempoLED5;
unsigned long TiempoLED12;
// =================================== FUNCIONES " Pasos" ===================================
void Paso0() // La función del paso "0".
{
//Serial.println(" paso: 0");
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
void Paso1() // La función del paso "1".
{
//Serial.println(" paso: 1");
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
}
void Paso2() // La función del paso "2".
{
//Serial.println(" paso: 2");
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
}
void Paso3() // La función del paso "3".
{
//Serial.println(" paso: 3");
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
}
void setup()
{
Serial.begin(9600);
Serial.println(" ======== TITULO: A_A_MOTOR_PAP_MILLIS_SWITCH_2 FORO =============");
Serial.println("");
pinMode(7, OUTPUT); // pin digital 7 de Arduino a intermitente
pinMode(8, OUTPUT); // pin digital 8 de Arduino a IN1 de modulo controlador
pinMode(9, OUTPUT); // pin digital 9 de Arduino a IN2 de modulo controlador
pinMode(10, OUTPUT); // pin digital 10 de Arduino a IN3 de modulo controlador
pinMode(11, OUTPUT); // pin digital 11 de Arduino a IN4 de modulo controlador
pinMode(12, OUTPUT); // pin digital 12 de Arduino a intermitente
Paso = 0; // ========== Iniciacion secuencia de SWITCH.
Paso0(); // Empieza por "Paso "0"
}
void loop()
{
// ***************************** SECCION LEDS INTERMITENTES *****************************
if ((millis() - TiempoLED5) >= INTERVALO_LED_7) // Tiempo 500
{
estadoLED7 = !estadoLED7;
digitalWrite (7, estadoLED7);
// Serial.print("======== LED 7 = ");
// Serial.println(estadoLED7);
TiempoLED5 = millis();
}
if ((millis() - TiempoLED12) >= INTERVALO_LED_12)// Tiempo 200
{
estadoLED12 = !estadoLED12;
digitalWrite (12, estadoLED12);
// Serial.print("======== LED 12 = ");
// Serial.println(estadoLED12);
TiempoLED12 = millis();
}
// ******************************* SECCION MOTOR PAP ***********************
if ( millis() - Tanterior > INTERVALO )
{
Tanterior = millis(); // ============== "Tanterior" toma el valor actual de "millis"
Paso++; //Incrementa en "1" el "case" / "Paso" en SWITCH .
if ( Paso == 4 ) Paso = 0; // Si "Paso" llega a(4): cambia al primer "Paso" :"0".
switch ( Paso )
{
case 0:
Paso0(); //============= realiza la funcion "Paso "0"
break; //================================ devuelve a principio de loop
case 1:
Paso1();// ============= realiza la funcion "Paso 1"
break;
case 2:
Paso2(); // ============ realiza la funcion "Paso 2"
break;
case 3:
Paso3(); // ============ realiza la funcion "Paso 3"
break;
}
}
}
// ========================= FIN ==================
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.