Subrutinas o llamadas en Arduino (Proyecto CW Keyer)

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.
 
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
 
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.
 
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){
}
 
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!
 
Atrás
Arriba