Hola, quisiera saber si alguien pude aclararme un poco, entiendo muy poco de programación (y electronica) osea estoy como quien dice payando.
Estoy intentando hacer algo creo bastante basico que es usar reles para encender/apagar luces, uso una shield ethernet y lo tengo funcionando bien (va a medias me estoy peleando con html también), pero el tema a consultar es si al declarar las variable de los pines tengo forma de reducir u optimizar la programacion, en este momento estoy haciendo de la forma ej: int PR=2, int PR=3 y asi hasta el 9, y al momento de activarlos tengo que hacer lo mismo pinmode (PR2, HIGH),... etc
Estuve intentando leer sobre arrays, pero no logro aplicarlo y menos si quiera si se puede hacer, asi que si alguien puede decirme algo...
Gracias
Deberías poner tu código y expresar cuales son tus inquietudes.
Tal vez de ese modo resulte mas fácil visualizar como simplificarlo.
mau_m:
Hola, quisiera saber si alguien pude aclararme un poco, entiendo muy poco de programación (y electronica) osea estoy como quien dice payando.
Estoy intentando hacer algo creo bastante basico que es usar reles para encender/apagar luces, uso una shield ethernet y lo tengo funcionando bien (va a medias me estoy peleando con html también), pero el tema a consultar es si al declarar las variable de los pines tengo forma de reducir u optimizar la programacion, en este momento estoy haciendo de la forma ej: int PR=2, int PR=3 y asi hasta el 9, y al momento de activarlos tengo que hacer lo mismo pinmode (PR2, HIGH),... etc
Estuve intentando leer sobre arrays, pero no logro aplicarlo y menos si quiera si se puede hacer, asi que si alguien puede decirme algo...
Gracias
Si lo que quieres es optimizar memoria ,puedes substituir las variables por #define:
#define PR2 2
#define PR3 3
// y asi hasta el 9
Si te refieres a ahorrar lineas de codigo:
void setup(){
for (int cont = 2;cont < 10;cont++)// pines correlativos del 2 al 9
pinMode(cont,OUTPUT);
digitalWrite(cont,LOW); // Si tienes reles de logica invertida: digitalWrite(cont,HIGH);
}
}
pinMode es para definir si el pin se va usar como entrada o salida,para cambiar su estado se usa digitalWrite y para leer su estado digitalRead
Hola, si exactamante esas dos cosas son las que quiero hacer, reducir memoria y lineas, este es mi codigo
#include <SPI.h>
#include <Ethernet.h>
//Declaración de la direcciones MAC e IP. También del puerto 80
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED}; //MAC
IPAddress ip(192,168,0,49); //IP
EthernetServer servidor(533);
int PR2=2;
int PR3=3;
int PR4=4;
int PR5=5;
int PR6=6;
int PR7=7;
int PR8=8;
int PR9=9;
String readString=String(30);
String st2, st3, st4, st5, st6, st7, st8, st9 =String(3);
void setup()
{
Ethernet.begin(mac, ip); //Inicializamos con las direcciones asignadas
servidor.begin();
pinMode(PR2,OUTPUT);
pinMode(PR3,OUTPUT);
pinMode(PR4,OUTPUT);
pinMode(PR5,OUTPUT);
pinMode(PR6,OUTPUT);
pinMode(PR7,OUTPUT);
pinMode(PR8,OUTPUT);
pinMode(PR9,OUTPUT);
digitalWrite(PR2,HIGH);
digitalWrite(PR3,HIGH);
digitalWrite(PR4,HIGH);
digitalWrite(PR5,HIGH);
digitalWrite(PR6,HIGH);
digitalWrite(PR7,HIGH);
digitalWrite(PR8,HIGH);
digitalWrite(PR9,HIGH);
st2="OFF";
st3="OFF";
st4="OFF";
st5="OFF";
st6="OFF";
st7="OFF";
st8="OFF";
st9="OFF";
Gracias por las respuestas, voy a intentar adecuarlo a los ejemplos que me pasaron...
Saludos
Edite este post para evitar hacer otro
Modifique el código y quedó asi
#include <SPI.h>
#include <Ethernet.h>
#define PR2 2
#define PR3 3
#define PR4 4
#define PR5 5
#define PR6 6
#define PR7 7
#define PR8 8
#define PR9 9
byte mac[]={0xDE,0xAD,0xBE,0xEF,0xFE,0xED};
IPAddress ip(192,168,0,49);
EthernetServer servidor(533);
String readString=String(30);
String st2, st3, st4, st5, st6, st7, st8, st9 =String(3);
void setup()
{
Ethernet.begin(mac, ip);
servidor.begin();
for (int PR = 2;PR < 9;PR++)// pines correlativos del 2 al 9
pinMode(PR,OUTPUT);
digitalWrite(PR,HIGH);
st2="OFF";
st3="OFF";
st4="OFF";
st5="OFF";
st6="OFF";
st7="OFF";
st8="OFF";
st9="OFF";
}
me da este error al querer compilar
Arduino:1.6.5 (Windows 8.1), Placa:"Arduino Uno"
led_4.ino: In function 'void setup()':
led_4:27: error: name lookup of 'PR' changed for ISO 'for' scoping [-fpermissive]
led_4.ino:27:17: note: (if you use '-fpermissive' G++ will accept your code)
name lookup of 'PR' changed for ISO 'for' scoping [-fpermissive]
This report would have more information with
"Show verbose output during compilation"
activala desde Archivo > Preferencias
y ya que estamos agrego los que nombre st=2, st=3, etc. (son para ponerle el estado en el html) también se pueden abreviar de la misma forma?, ademas cuando uso el codigo html tengo otras variables
int R2 = readString.indexOf("R2=");
int R3 = readString.indexOf("R3=");
int R4 = readString.indexOf("R4=");
int R5 = readString.indexOf("R5=");
int R6 = readString.indexOf("R6=");
int R7 = readString.indexOf("R7=");
int R8 = readString.indexOf("R8=");
int R9 = readString.indexOf("R9=");
Espero lograr entender la lógica en algún momento ![]()
Gracias
lo que hace #define es que cuando se compila el sketch se substituye el nombre por el valor,es decir si pones #define PR 2 cada vez que el compilador encuentre PR lo substituira por 2,por lo que estas poniendo:
for (int PR = 2;PR < 9;PR++)
que en realidad el compilador entiende:
for (int 2 = 2;2 < 9;2++)
tienes que usar otro nombre para esa variable.para llegar al pin 9 ,la condicion tiene que ser <10 ya que <9 ,el ultimo numero en cumplir condicion seria el 8 y no llegarias al 9.
Tienes que hechar un ojo a como declarar Strings,esto no crea un String de 30 posiciones (es lo que creo que quieres hacer) si no que crea un String que contiene los caracteres '30':
y esto idem:
String st2, st3, st4, st5, st6, st7, st8, st9 =String(3);
Hola, voy a leer de strings, en realidad leeo de todo salteado y termino agarrandome unos enrredos geniales, pero lo intento, esas lineas de string(30) es del código original y como funciono (aunque no se que hace jeje) lo deje así
ahora el problema de compilación que esta dando es
Arduino:1.6.5 (Windows 8.1), Placa:"Arduino Uno"
led_4.ino: In function 'void setup()':
led_4:28: error: name lookup of 'PR' changed for ISO 'for' scoping [-fpermissive]
led_4.ino:28:17: note: (if you use '-fpermissive' G++ will accept your code)
name lookup of 'PR' changed for ISO 'for' scoping [-fpermissive]
This report would have more information with
"Show verbose output during compilation"
activala desde Archivo > Preferencias
la linea digitalWrite(PR,HIGH);
de nuevo muchas gracias, entendí la parte de conteo que hace el "for"
saludos
Amigo tienes problemas básicos, porque no lees un buen libro de C o de arduino y luego continuas con esto.
La guia que esa en documentación con videos es muy buena y muy recomendable.
PR no existe ,arriba me confundi ,el fallo del for que tenias es por lo mismo que ahora ,has definido PR1,PR2,etc pero PR no.coincido con surbyte ,un buen repaso a un buen manual te va a ahorrar muchos dolores de cabeza.
Si gracias a los dos, el tema que la forma autodidacta de leer un manual sin entender bien lo que leo, osea alguien que al mismo tiempo te explique algunas y porque cosas, es complicado, tengo dos empezados, uno de arduino y uno de C/C++, pero la ansiedad de meter mano a veces me gana....
Saludos