#include // double coordinaten_x[13, 13, 13, 13, 13, 13, 14, 14, 15, 15, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 24, 24, 25, 25, 26, 26, 26, 26, 26, 26]; //X produced by gui prog double coordinaten_y[16, 17, 18, 19, 20, 21, 15, 22, 14, 23, 13, 20, 24, 13, 16, 21, 24, 13, 22, 24, 13, 22, 24, 13, 22, 24, 13, 22, 24, 13, 16, 21, 24, 13, 20, 24, 14, 23, 15, 22, 16, 17, 18, 19, 20, 21]; //Y produced by gui prog int coordSize = 46; bool joystick_on = false; //END GUI PRODUCED CODE double pi=3.1415; // Servo klservo; // object voor kleine servo// Servo grservo; // object voor grote servo// Servo miniservo; // object voor mini servo// // int pin_gezaaid=4; // bepaling van welke outputs op welke poorten staan// int pin_rood_groot=5;// int pin_groen_groot=6;// int pin_rood_klein=7;// int pin_groen_klein=8;// // int pin_joystick_x=A0; // bepaling van welke inputs op welke poorten staan// int pin_joystick_y=A1;// int pin_joystick_druk=A2;// int pin_pot_groot=A3;// int pin_pot_klein=A4;// int pin_IRsense=A5;// // int pot_groot=0; // waarde van de potentiometer van grote servo, wordt gebruikt voor bepaling van de huidige positie van die servo// int pot_klein=0; // idem voor kleine servo// int IRvalue=0; // waarde van de IR sensor// // double alfa=0; //deze hoeken en afstanden staan aangeduid op de tekeninging op de site// double gamma=0;// double phi=0;// double theta=0;// double beta=0;// double R1 = 190; // double R2= 185;// int i=0;// // double quotient_groot=0; // deze parameters worden verduidelijkt in de procedures waar ze gebruikt worden// double quotient_klein=0;// double hoek_klein=0;// double hoek_groot=0;// boolean gezaaid=false;// int pogingen=0;// long start=0;// // double stap=5;// double xpos=0;// double ypos=0;// double x_gestuurd=50;// double y_gestuurd=50;// double x_nieuw;// double straal=40;// double hoek=0;// double val_x= 50; // double val_y= 50;// int knop=0;// // // double L=0;// void setup() // { // miniservo.attach(9); // hang mini servo aan pin 9// klservo.attach(10); // hang kleine servo aan pin 10// grservo.attach(11); // hang grote servo aan pin 11// miniservo.write(610); //deze drie lijnen brengen de sevo's in een gewenste beginpositie // klservo.write(1500); //// grservo.write(1600); //// pinMode(pin_groen_groot, OUTPUT); // veltel aan controller welke pinnen als output moeten geschakeld worden// pinMode(pin_rood_groot, OUTPUT);// pinMode(pin_groen_klein, OUTPUT);// pinMode(pin_rood_klein, OUTPUT);// pinMode(pin_gezaaid,OUTPUT);// Serial.begin(9600);// } // // void loop() // { // while (joystick_on) // oneindige lus als de robot bestuurd wordt met de joystick // { // x_gestuurd = analogRead(A0);// y_gestuurd = analogRead(A1);// x_gestuurd = map(x_gestuurd, 1023, 180, -4, 4);// y_gestuurd = map(y_gestuurd, 114, 900, -4, 4); // val_x=val_x+x_gestuurd;// val_y=val_y+y_gestuurd;// knop=analogRead(pin_joystick_druk);// plaats(val_x,val_y);// if (knop<500)// {// zaaien();// }// } // for (i=0;i=0.03) // als de stelwaarde voor de servos is veranderd sinds deze procedure is opgeroepen zal het quotient niet gelij aan 1 zijn en// moeten de indicatorleds veranderd worden// {// digitalWrite(pin_rood_groot,HIGH); // rode led wil zeggen dat de servo nog onderwerg is naar zijn gewenste positie// digitalWrite(pin_groen_groot,LOW); // groene led wil zeggen dat de servo zijn gewenste positie heeft bereikt// }// if (abs(quotient_klein-1)>=0.03)// {// digitalWrite(pin_rood_klein,HIGH); // rode led wil zeggen dat de servo nog onderwerg is naar zijn gewenste positie// digitalWrite(pin_groen_klein,LOW); // groene led wil zeggen dat de servo zijn gewenste positie heeft bereikt// }// while ((abs(quotient_groot-1)>0.02) || (abs(quotient_klein-1)>0.03)) // als de uitgelezen waarde van de potentiometer binnen 3% van zijn gewenste waarde is gekomen// wordt veronderstelt dat de servo op de gewenste positie is, zolang dit niet het geval is blijft het // { // programma de potentiometers uitlezen// if (abs(quotient_groot-1)<=0.03)// {// digitalWrite(pin_rood_groot,LOW); // rode led wil zeggen dat de servo nog onderwerg is naar zijn gewenste positie// digitalWrite(pin_groen_groot,HIGH); // groene led wil zeggen dat de servo zijn gewenste positie heeft bereikt// }// if (abs(quotient_klein-1)<=0.03)// {// digitalWrite(pin_rood_klein,LOW); // rode led wil zeggen dat de servo nog onderwerg is naar zijn gewenste positie// digitalWrite(pin_groen_klein,HIGH); // groene led wil zeggen dat de servo zijn gewenste positie heeft bereikt// }// pot_groot = analogRead(A3); // de waarde van de potentiometers moet steeds opnieuw worden uitgelezen// pot_groot = map(pot_groot, 85, 350, 590, 2240); //// quotient_groot = (float)hoek_groot/(float)pot_groot; //// pot_klein = analogRead(A4); //// pot_klein = map(pot_klein, 545, 80, 1140, 1910); //// quotient_klein = (float)hoek_klein/(float)pot_klein; //// // Serial.print("klein: ");// // Serial.print(quotient_klein-1,DEC);// // Serial.print("groot ");// // Serial.println(quotient_groot-1,DEC);// }// digitalWrite(pin_rood_groot,LOW); // als de while lus doorlopen is zal voor de servo die het laatst op zijn positie is geraakt de led nog niet veranderd zijn, dat gebeurt hier// digitalWrite(pin_groen_groot,HIGH); //// digitalWrite(pin_rood_klein,LOW); //// digitalWrite(pin_groen_klein,HIGH); //// delay(200); // een kleine delay om ervoor te zorgen dat de servos tot stilstand zijn gekomen// }// // void zaaien()// {// gezaaid=false; // wordt true al de IRsensor aangeeft dat er een zaadje is gevallen// pogingen=0;// while (pogingen<3 && gezaaid==false) // zolang er niet gezaaid is zal het programma poginen ondernemen om alsnog een zaadje te doen vallen, na 3 pogingen wordt er verder gegaan// {// miniservo.write(2500); // breng de miniservo naar zijn onderste positie zodat een zaadje kan vallen// start=millis();// while (gezaaid==false && (millis()-start)<2000) // gedurende 2 seconden zal gewacht worden of het zaadje is gevallen// {// IRvalue= analogRead(pin_IRsense);// if (IRvalue>500) // De IRsensor geeft 0 (of iets in die buurt) als er IR straling op valt, als de straling wordt onderbroken (en er dus een zaadje is gevallen)// wordt de waarde 1013// { // gezaaid=true;// digitalWrite(pin_gezaaid,HIGH); // Door deze led kort te doen oplichten wordt de gebruiker vertelt dat er een zaadje is gevallen// delay(200); //// digitalWrite(pin_gezaaid,LOW); //// } // }// if (gezaaid==false) // Als na 2 seconden er geen gevallen zaadje is gedetecteerd, gaat het programma er van uit dat de zaadjes opgestopt zitten in de zaaikop en zal de verste arm snel heen en weer bewegen om de zaadjes los te schudden// {// miniservo.write(610); // breng de miniservo eerst terug naar zijn hoogste positie// delay(500); // wacht tot de miniservo in zijn hoogste positie is geraakt// grservo.write(1500); // de grote servo wordt in een positie gebracht zodat de verste arm goed kan bewegen// klservo.write(1300); // De kleine servo wordt snel na mekaar in posities gestuurd met ongeveer 30° verschil, hierbij wordt geen gebruikt gemaakt van de procedure zetservos omdat hier niet gewacht moet worden tot de servo in de juiste positie is// delay(200); // het is alleen belangrijk dat de servo de beweging maakt en dit snel genoeg doet zodat de zaadjes worden losgeschud// klservo.write(1700); //// delay(200); //// klservo.write(1300); //// delay(200); //// klservo.write(1700); //// delay(200); //// plaats(val_x, val_y); // na het schudden worden de servos terug in hun juiste positie gebracht// } // pogingen=pogingen+1; // }// if (gezaaid==false) // als na 3 pogingen er nog geen vallend zaadje gedetecteerd is, zal de gebruiker hiervan gewaarschuwd door de led die gedurende 3seconden blijft branden. Dit kan dan geinterpreteerd worden als teken dat de zaadkop leeg is of er een verstopping// { // is die niet op bovenstaande manier kan worden opgelost// digitalWrite(pin_gezaaid,HIGH);// delay(3000);// digitalWrite(pin_gezaaid,LOW);// }// miniservo.write(610);// }// // // void druk()// {// Serial.print("x ");// Serial.print(val_x,DEC);// Serial.print(" "); // Serial.print("y: ");// Serial.print(val_y,DEC);// Serial.print(" "); // Serial.print("alfa ");// Serial.print(alfa,DEC);// Serial.print(" ");// Serial.print("gamma ");// Serial.print(gamma,DEC);// Serial.print(" ");// Serial.print("theta ");// Serial.print(theta,DEC);// Serial.print(" ");// Serial.print("phi ");// Serial.println(phi,DEC);// }//