Go Down

Topic: Declaracion de varios pines como salida (Read 988 times) previous topic - next topic

mmsouto

Estoy liado con un codigo para hacer unos efectos de cara al carnaval y me esta volviendo loco el temita con una secuencia de leds.
El proyecto final es un cartel con dos palabras una sobre otra y en cada letra un grupo de leds
PALABRA1
PALABRA2
Tengo hechos varios efectos ya, pero ahora estoy con que alternen el encendido pero no consigo hacerlo bien, el codigo que tengo es este:

void setup(){
int palabra1[]={0,1,2,3,4,5};
int palabra2[]={6,7,8,9,10,11,12};
pinMode(palabra1, OUTPUT);
pinMode (palabra2, OUTPUT);
}
void loop(){
  alternar();
}
void alternar(){
  digitalWrite(palabra1, HIGH);
  delay(500);
  digitalWrite(palabra1,LOW);
  digitalWrite(palabra2,HIGH);
  delay(500);
}


Y al verificar me da el error

sketch_jan23a.ino: In function 'void setup()':
sketch_jan23a:4: error: invalid conversion from 'int*' to 'uint8_t'
sketch_jan23a:4: error: initializing argument 1 of 'void pinMode(uint8_t, uint8_t)'
sketch_jan23a:5: error: invalid conversion from 'int*' to 'uint8_t'
sketch_jan23a:5: error: initializing argument 1 of 'void pinMode(uint8_t, uint8_t)'
sketch_jan23a.ino: In function 'void alternar()':
sketch_jan23a:11: error: 'palabra1' was not declared in this scope
sketch_jan23a:14: error: 'palabra2' was not declared in this scope


¿Alguien me dice porque es y como tendria que declarar un array para poder usarlo de esa forma?

Gracias

Heke

¿Estas diciendole al arduino que el pin lo quieres en modo array?  :smiley-eek-blue:

¿No has mirado lo basico de arduino, el pinmode?

Solo le puedes dar un numero al pin, no tropecientos, por eso te da error.

Mientras le pegas un repaso a los arrays en arduino y como se usan te dejo esta pagina que hace lo que tu quieres, pero no se te olvide de leerte lo basico de arduino porque esto es darte los peces y te hara falta aprender a pescar...

http://opensourcehardwarejunkies.com/tutorial-09-how-to-use-arrays-with-arduino/
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

Cheyenne

Creo que no quiere asignar un array a un pin sino todos los números del array configurarlos como pines de salida. mmsouto para eso tienes que recorrer todas las posiciones del array con una instrucción for. Como te ha dicho Heke repasa los arrays.
http://cuadricopterodiyarduino.blogspot.com/

mmsouto

Igual me explique mal, lo que queria era simplificar el codigo para no tener que hace bucles for en cada secuencia, de forma que la variable palabra1 estuviera formada por los pimeros 5 pines, y asi al activar la salida con el write encender todos los led a la par.

Con bucles for, lo tengo hecho y funcionando ya segun el codigo siguiente:

Code: [Select]

[size=8pt]
void setup() {
for(int i=0;i<=13;i++){ //SE INICIALIZAN TODOS LOS PINES COMO SALIDA
  pinMode(i, OUTPUT);
}
}
/*  APAGAR:     APAGA TODO                  SECUENCIA1: ENCIENDE TODO               
     SECUENCIA2: ENCIENDE UNO APAGA OTRO     SECUENCIA3: ENCENDIDO ACUMULADO
     SECUENCIA4: COCHE FANTASTICO            PALABRA1:   ENCIENDE PRIMERA PALABRA
                                             PALABRA2:   ENCIENDE SEGUNDA PALABRA
*/
void loop() {
    apagar();secuencia1();delay(1000);
    apagar();palabra1();palabra2();palabra1();palabra2();palabra1();palabra2();
    apagar();secuencia2();delay(200);secuencia2();delay(200);secuencia2;
    apagar();secuencia3();delay(300);apagar();secuencia3();delay(300);apagar();secuencia3();delay(300);
    apagar();secuencia4();secuencia4();secuencia4();delay(300);
}
void apagar(){
for (int i=0; i<=13; i++){
  digitalWrite(i-1,LOW);
}
}
void secuencia1(){
for (int i=0; i<=13; i++){
  digitalWrite(i, HIGH);
}
}
void secuencia2(){
for (int i=0; i<=13; i++){
  digitalWrite(i, HIGH);
  digitalWrite(i-1,LOW);
  delay(200);
}
}
void secuencia3(){
for (int i=0; i<=13; i++){
  digitalWrite(i,HIGH);
  delay(50);
}
}
void secuencia4(){
for (int i=0; i<=13; i++){
  digitalWrite(i,HIGH);
  delay(30);
}
for (int i=13; i<=0; i++){
  digitalWrite(i,LOW);
  delay(30);
}
}
void palabra1(){
for (int i=0; i<=5; i++){
  digitalWrite(i,HIGH);
}
delay(300);
  for (int i=0; i<=5; i++){
  digitalWrite(i,LOW);
}
}
void palabra2(){
for (int i=6; i<=13; i++){
  digitalWrite(i,HIGH);
}
delay(300);
  for (int i=6; i<=13; i++){
  digitalWrite(i,LOW);
}
}
[/size]

Heke

#4
Jan 23, 2013, 03:14 pm Last Edit: Jan 23, 2013, 07:15 pm by Heke Reason: 1
Bufff....

Eso es una programacion muy "guarrilla"  :smiley-sad-blue:

Si te llega a ver mi profesora de Pascal... "SUSPENDIDO DE POR VIDA"

Si fuera Sheldon Cooper quien hubiera visto ese codigo diria:
http://youtu.be/93Q3uUQQhSs

Mirate el enlace que te he puesto que ahi lo tienes solucionado, pero miralo... que me da a mi que has hecho caso omiso :(
CUIDADO !! MIS POST NO SON APTOS PARA MENORES. SI ERES MENOR DE 14 AÑOS DEBES DE LEERLOS ACOMPAÑADO DE UN ADULTO

yOPERO


Bufff....

Eso es una programacion muy "guarrilla"  :smiley-sad-blue:

Si te llega a ver mi profesora de Pascal... "SUSPENDIDO DE POR VIDA"


lol :)

quien sabe a lo mejor son nuevas reglas de "concurrency, portability, reusability, and performance" del MISRA
Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Go Up