Subrutinas o llamadas en Arduino (Proyecto CW Keyer)

#1
Buenos dias!

Pues simple, estoy desarrollando una radio baliza para la banda de 50 MHz, y uno de sus componentes o bloques, es el generador de codigo morse a transmitir.

Esto pienso hacerlo con una placa Arduino Duemilanove que poseo, pero mi problema surge al momento de escribir el programa y que este tenga sintaxis.


Aqui un ejemplo del codigo a transmitir (el codigo, saldra de la placa como un tren de pulsos por un unico pin):

VVV CX/B GF15VG VVV

Mi idea es:
Escribir una biblioteca para cada carater a utilizar, para llamarlo cada vez que el programa lo requiera.

El inconveniente:

Aun no encuentro la instruccion adecuada para dar solucion al problema, tanto para ordenar al programa que salte a la subrutina, como para escribir esta y que esta vuelva al programa.

Esto en Basic o Assembler lo hubiese solusionado con un GOSUB o CALL.

Espero puedan ayudarme! Un fuerte abrazo desde Uruguay.
 
#2
El lenguaje de programación para Arduino es Wiring en el entorno de Processing que es similar al lenguaje C, lo que buscas se llama comunmente como "función", hay 3 posibles combinaciones y se declaran fuera de main o del bucle principal:

Código:
1: Sin valor de retorno y sin parámetros de entrada.
void MyFunction1 (void){
...
}

2: Sin valor de retorno y con parámetros de entrada.
void MyFunction2(int index){
...
}

3: Con valor de retorno y con parámetro de entrada.
char MyFunction3(byte a){
...
return 'A';
}
Los tipos pueden ser cualquiera de los que soporta arduino (int, byte, char, etc).
Como es similar al lenguaje C, te pueden servir los mismos tutoriales y también los del mismo Processing
 
#3
Pero aplicado a mi consulta como seria?

Yo pretendo que el programa corra, y salta y vuelva cada vez que sea necesario, no se si me explique.

Es totalmente autonomo.
 
#4
Por lo que entiendo, va a tomar uno a uno esos caracteres, podria no ser necesario una función si no un array de string o la mezcla de ambos y con ayuda de un contador o de un puntero tomar uno a uno de forma ordenada o no el caracter requerido; colocar ésta en una variable y enviarla bit a bit con ShiftOut por ejemplo.

Una función puede ser llamanda desde cualquier punto y no requiere alguna instrucción en especial.
Código:
void main (void){
...
MyFunction(); // Sin parámetro
...
MyFunction();
...
MyFunction2(21); // Con parámetro
}

void MyFunction(void){
}

void MyFunction2(int a){
}
 
#5
Si, exacto, el programa tomara uno a uno cada caracter algo asi:

Código:
Inicio:

call a:
pause 100
call b:
pause 100
call "n"
pause 100

end

a: digitalwrite pin1(high)
    pause 300
    digitalwrite pin1(low)
    return

b: digitalwrite pin1(high)
    pause 300
    digitalwrite pin1(low)
    pause 100
    digitalwrite pin1(high)
    pause 300
    digitalwrite pin1(low)
    return

n: digitalwrite pin1(high)
    pause 300
    digitalwrite pin1(low)
    return
Algo asi amigo! Disculpa mi ignorancia!
 
Arriba