Omet navegació

2.4.- Escriu les teues funcions

1. Funció sense paràmetres i que no retorna valors

Les funcions que no necessiten paràmetres d'entrada i que no retornen valors númerics es declaren amb void nomfunció ()

, mira l'exemple següent:

 

 

//  Programa Semafor  Definim un funció sense paràmetres d'entrada  i que no retorna valors numèrics

int ledRoig =8 ; //posem el led roig al pin 8

int ledVerd=7; // posem el led roig al pin 7

void setup() {

pinMode(ledRoig, OUTPUT);// el ledRoig és una eixida digital

pinMode(ledVerd, OUTPUT);// el ledVerd és una eixida digital

}

void loop() {

semafor(); //cridem la funció semafor dins d'un bucle infinit

}

//Anem a definir la funció semafor

void semafor() {

digitalWrite(ledVerd,HIGH);//engeguem el lerd verd

delay(2000); //aturem el programa 2 segons

digitalWrite(ledVerd, LOW); //aturem el led verd

delay(1000); //aturem el programa 1 segon

digitalWrite(ledRoig,HIGH);//engeguem el lerd roig

delay(2000); //aturem el programa 2 segons

digitalWrite(ledRoig, LOW); //aturem el led roig

delay(1000); //aturem el programa 1 segon

}

 

 Podem utilitzar aquest tipus de funció per definir un funció engegaMotorA () , aturaMotorA (), engegaMotorB () , o aturaMotorB () i simplificar l'ús del integrat L293D (driver motor) que veurem una mica després.

2. Funcion amb paràmetres i que no retorna valors

Podem definir una funció a la qual li calga una paràmetre d'entrada per mantindre el temps que vulguem engegat un dispositiu. La declararem amb void nomFunció ( tipusParametre paràmetre) , mira l'exemple a continuació:

 

 //  Programa Semafor2  Definim un funció amb un paràmetre d'entrada  i que no retorna valors numèrics 

int ledRoig =8 ; //posem el led roig al pin 8

int ledVerd=7; // posem el led roig al pin 7

int temps ; //declarem el temps com variable int

void setup() {

pinMode(ledRoig, OUTPUT);// el ledRoig és una eixida digital

pinMode(ledVerd, OUTPUT);// el ledVerd és una eixida digital

}

void loop() {

temps=4000;  //definim 4 segons com el temps a engegar els leds

semafor(temps); //cridem la funció semàfor dins d'un bucle infinit

}

//Anem a definir la funcio semafor2

void semafor(int temps) {

digitalWrite(ledVerd,HIGH);//engeguem el lerd verd

delay(temps); //aturem el programa "temps" segons

digitalWrite(ledVerd, LOW); //aturem el led verd

delay(1000); //aturem el programa 1 segon

digitalWrite(ledRoig,HIGH);//engeguem el lerd roig

delay(temps); //aturem el programa "temps" segons

digitalWrite(ledRoig, LOW); //aturem el led roig

delay(1000); //aturem el programa 1 segon

}

			

Podríem escriure així funcions per engegar el motor A "n" mili-segons del tipus engegaMotorA(int n) o per engegar el motor amb una velocitat polsada amb PWR de forma que no se'n isca de la ratlla el cotxe i amb una variable global int pwr pugam definir la velocitat del cotxe amb les funcions  MotorAavantPWR (int pwr) , MotorBavantPWR (int pwr) , MotorAenreraPWR (int pwr) , MotorBenreraPWR (int pwr) .

3. Funció que retorna un valor numèric

 

També podem definir una funció amb paràmetres i que retorne un valor numèric però aquesta vegada no utilitzarem void en la funció, sinò el tipus numèric d'eixida que tindrà com int funció (int paràmetre1, int paràmetre 2) . Mira l'exemple tret de la pàgina d'Arduino.

 

  // Programa funcioMultiplicació Definim un funció amb paràmetres d'entrada i que  retorna valors numèrics 

void setup(){

Serial.begin(9600); //declare el serial monitor

}

void loop() {

int i = 2; //definisc i com enter

int j = 3; //definisc j com enter

int k; //definisc k com enter

k = funcioMultiplicacio(i, j); // k conté el resultat 6

Serial.println(k); //imprimeix el resultat

delay(500); //atura el programa 0,5 segons

}

//declare la funció multiplicació

int funcioMultiplicacio(int x, int y){

int resultat;

resultat = x * y;

return resultat;

}