Hola a todos. Estoy realizando un proyecto con nodemcu y tengo problemas para inicializar los pines de salida con el bucle for. Creo que entiendo bien la estructura y que está correctamente escrita, pero no funciona.
Esto es lo que tengo:
const int Led1OK = D0; // Salida relé 1 OK
const int Led1KO = D1; // Salida relé 1 KO
const int Led2OK = D2; // Salida relé 2 OK
const int Led2KO = D3; // Salida relé 2 KO
const int Led3OK = D4; // Salida relé 3 OK
const int Led3KO = D5; // Salida relé 3 KO
const int Led4OK = D6; // Salida relé 4 OK
const int Led4KO = D7; // Salida relé 4 KO
void setup() {
for(int i = D0; i < D8; i++){
pinMode(i, OUTPUT); //Inicializamos los pines D0 a D7 como salida
digitalWrite(i, HIGH); //Colocamos todas las salidas a HIGH
}
Serial.begin(115200);
Alguien me puede decir, qué estoy haciendo mal..
Gracias de antemano
En principio por favor lee las reglas sobre cómo insertar código.
Tu problema es que D0, D1, etc. no están definidos, por eso no te funciona el lazo (ni siguiera debería compilar).
Y de hecho, todas las constantes que definiste van a estar a 0 por lo mismo.
Usa 0; 1; etc. en su lugar (Por lo menos así se haría en arduino).
Gracias por la respuesta. Por qué dices que los pines no están definidos..? Para definir los pines en nodemcu, la expresión que se utiliza, o que se puede utilizar es D0....D8..etc. ya que el patillaje de este, no coincide con el de Arduino.
Si elimino el bucle for e inicializo los pines de uno en uno, funciona correctamente...
Moderador
Por favor edita tu post usando etiquetas de código.
Si un forero te solicita que postees debidamente el código, no lo dejes pasar porque luego llega el moderador y te lo dice en otro tono porque has pasado por la advertencia.
Asi que te dejo las normas a continuación y por favor edita tu código para que se vea adecuadamente.
Hilo movido a Software. Normas del foro
También escribí esta publicación en alemán y luego la traduje Google-translate. Estoy bastante seguro de que es fácil de entender en la traducción al español.
La regla más importante en programación es:
Cuando su programa hace algo diferente de lo que espera. Deje de adivinar, pero traiga los hechos y cifras muy concretos a la pantalla
Si hubiera buscado el pinout para la placa nodeMCU, lo habría encontrado usted mismo
const int Led1OK = D0; // Salida relé 1 OK
const int Led1KO = D1; // Salida relé 1 KO
const int Led2OK = D2; // Salida relé 2 OK
const int Led2KO = D3; // Salida relé 2 KO
const int Led3OK = D4; // Salida relé 3 OK
const int Led3KO = D5; // Salida relé 3 KO
const int Led4OK = D6; // Salida relé 4 OK
const int Led4KO = D7; // Salida relé 4 KO
void setup() {
Serial.begin(115200);
Serial.println("Setup-Start");
Serial.print("D0 value is:");
Serial.println(D0);
Serial.print("D1 value is:");
Serial.println(D1);
Serial.print("D2 value is:");
Serial.println(D2);
Serial.print("D3 value is:");
Serial.println(D3);
Serial.print("D4 value is:");
Serial.println(D4);
Serial.print("D5 value is:");
Serial.println(D5);
Serial.print("D6 value is:");
Serial.println(D6);
Serial.print("D7 value is:");
Serial.println(D7);
Serial.print("D8 value is:");
Serial.println(D8);
for(int i = D0; i < D8; i++){
Serial.print("i=");
Serial.println(i);
pinMode(i, OUTPUT); //Inicializamos los pines D0 a D7 como salida
digitalWrite(i, HIGH); //Colocamos todas las salidas a HIGH
}
}
void loop() {
// put your main code here, to run repeatedly:
}
const int Led1OK = D0; // Salida relé 1 OK
const int Led1KO = D1; // Salida relé 1 KO
const int Led2OK = D2; // Salida relé 2 OK
const int Led2KO = D3; // Salida relé 2 KO
const int Led3OK = D4; // Salida relé 3 OK
const int Led3KO = D5; // Salida relé 3 KO
const int Led4OK = D6; // Salida relé 4 OK
const int Led4KO = D7; // Salida relé 4 KO
void setup(){
for(int i=D0;i<D8;i++){
pinMode(i, OUTPUT); //Inicializamos los pines D0 a D7 como salida
digitalWrite(i, HIGH); //Colocamos todas las salidas a HIGH
}
Serial.begin(11250);
}
Hola. Lo primero de todo, mis disculpas por no haber seguido las normas del foro.
El pinout del nodemcu, lo tengo mirado y requetemirado, y sé, la correspondencia que hay entre el arduino y el nodemcu, pero no entiendo lo que intentas explicarme Stefan. Perdona mi ignorancia, pero es la primera vez que estoy programando, y a pesar de que he leído mucho y he visto muchos videos, no consigo que el código me deje las salidas en estado alto. Si inicializo los pines de uno en uno sin utilizar el bucle for, me funciona bien...
He probado tu código, y el resultado es el mismo. No funciona.
Yo si le entendí, si miras el código que él dejó es bastante obvia la respuesta.
¿Probaste correr ese código y ver los resultados?
¿No te resultó llamativo que imprima los valores de cada constante?
La respuesta es sencilla, la numeración de los pines no es consecutiva, tampoco ordenada, por lo tanto no podes usar los alias (D0, D1...) para controlar el lazo.
De acuerdo, tuve un "ataque" de ceguera experta a la dificultad de principiante:
Los comandos Serial.print () y Serial.println () envían letras y valores de variables al monitor en serie.
Puede iniciar el monitor de serie presionando la combinación de teclas Shift-Ctrl-M o haciendo clic en la opción Monitor de serie en el menú "Herramientas".
Si mam transfiere ahora el programa al ESP8266, se emite algo en el monitor en serie. Los valores numéricos reales de las constantes D0 a D8
Esto luego se muestra en el monitor de serie:
D0 value is:16
D1 value is:5
D2 value is:4
D3 value is:0
D4 value is:2
D5 value is:14
D6 value is:12
D7 value is:13
D8 value is:15
La idea básica de hacer el programa más compacto usando un bucle es buena.
En este caso no funciona porque los números no coinciden
NO hay salida en el bucle, lo que significa que el bucle NO se ejecuta en absoluto.
Esto también está perfectamente claro porque la condición para ejecutar el ciclo es
para (int i = D0; i <D8; i ++) {
donde D0 tiene el valor 16 y D8 el valor 15
i se establece en el número 16 y luego ejecuta el ciclo siempre que i sea menor que 15
I es 16 que es mayor que 15 ==> el bucle NO se ejecuta en absoluto
Esta técnica de salida de los valores numéricos de las variables con salida en serie es la técnica de resolución de problemas más importante.
Esto muestra lo que realmente está sucediendo en el programa.
Es mejor demostrar esta técnica en el primer programa.
Si. He probado el código, y el resultado es la correlación que existe entre el nombre que asigna nodemcu a los pines, D0....D8 y los gpio. Esto ya lo entiendo. Entonces, primero tendré que crear una relación ordenada y lógica, para que el programa lo entienda.