Saltatu nabigazioa

Kodea pausuz pausu

Bi liburutegietan topatutako adibideak kontsultatu ondoren, gure eskemaren kodea idatziko dugu.

Aldagai eta objektu globalak

Hiru hauek behar ditugu:

Servo serboa; // Objektu honen bidez serbomotore bat kontrolatuko dugu
Nunchuck nunchuck; // Objektu honen bidez Nunchuck aginte bat kontrolatuko dugu
int angelua = 90; // Serboaren angelua 0-180 ibiltartean egon behar du



setup funtzioa

Serboa eta nunchuck-a inizializatu ondoren, monitoreari goiburu moduko testu bat bidaliko diogu. Horrela, probak egiterakoan jakingo dugu programa funtzionatzen hasi dela.

void setup() 
{
  serboa.attach(9);  // Serbomotorea 9. pin digitalaren bidez kontrolatuko dugu
  nunchuck.begin();   // Nunchuck agintea martxan jartzen dugu
  
  // Ordenagailuare pantailara informazioa bidaliko dugu programaren funtzionamendua 
  // hobeto ulertzeko.
  Serial.begin(115200);
  Serial.print("\r\n ");
  Serial.println("WiiChuck bitartez serboaren angelua kontrolatu");
  Serial.print("\r\n ");
}

Nunchuketik datuak irakurri

loop funtzioaren barruan, lehenik eta behin Nunchuckek eskainitako informazioa irakurriko dugu. Horrela, probak egin ditzakegu eta, adibidez, jakin dezakegu zein balio bidaltzen dituen Joystick-ak ezker eta eskuin posizioan.

void loop() <br>{<br>  nunchuck.readData();  // agintetik jasotako informazioa irakurtzen dugu

  int x = nunchuck.getJoyX();       // Joystick-aren X erabiliko dugu serboaren angelua kontrolatzeko
  bool Z = nunchuck.checkButtonZ(); // C botoia erabiliko dugu serboa 
  
  // Irakurritako datuak pantailatik ateratzen ditugu
  Serial.print("\r\n ");
  Serial.print(" Joystick-aren x posizioa: ");
  Serial.print(x);
  Serial.print(" Z botoia: ");
  Serial.print(Z);

Serboari angelua bidali:

Lan hau egiteko, oso lagungarria da map funtzioa. Aurreko kodeari esker, proba batzuk egin ditugu eta badakigu jasotako balioa 30 eta 230 artean dagoela. Joystickarekin kontrolatutako angelua 30 eta 150 artean egotea nahi dugunez, funtzio honek mapeatuko du jasotako balioa. Adibidez: jasotako balioa 50 bada (joystick aren ibiltartearen %10) angelua 42 izango da (ibiltarteren %10).

  // Joystick-atik jasotako balioaren ibiltartea: 30-230
  // Angeluan nahi dugun ibiltartea: 30-150
  angelua = map(x,30,230,30,150); 

  if(Z == true) // Botoia sakatzen badugu, albo batera edo bestera joango gara
  {
    if (angelua < 90)
    {
      angelua = 0;
    }
    else
    {
      angelua = 180;
    }    
  }
  Serial.print(" Angelua: ");
  Serial.print(angelua);

  serboa.write(angelua);
  delay(15); 
}