#include < Servo.h >
/ * door Gabe Magnuson
voor: Lego Nerf Arduino torentje
7/24/2013
*/
/*
deze schoen en testen van het bereik van getallen op uw analoge stick,
mijn ps1 stick waarden varieerden van 0 - 1000 en zet ze als sensorMin en sensorMax
ook controleren om ervoor te zorgen dat alle servo pinnen en pot pinnen kloppen
*/
Const int numReadings = 10; Const kan niet worden gewijzigd
Const int sensorMin = 0; minimumwaarde van analoge stick, test voor het gebruik van de seriële terminal
Const int sensorMax = 1000; maximale waarde van analoge stick, test hetzelfde manier
byte byteRead;
Servo servo1; Start een exemplaar van de servo en geef het een naam
Servo servo2;
Servo servoFire;
int pos = 0;
int servo1Readings [numReadings]; de lezingen van de analoge ingang
int servo2Readings [numReadings];
int index = 0; de index van de huidige lezing
int servo1total = 0; het lopend totaal
int servo1Average = 0; het gemiddelde
int servo2total = 0; het lopend totaal
int servo2Average = 0; het gemiddelde
int pos1 = 90;
int pos2 = 90;
int pos1Old = 90;
int pos2Old = 90;
int inputVertical = A0; input pinnen voor pot signaal draad
int inputHorizontal = a1 worden verkregen;
int sensorRange = 0; variabelen die worden gebruikt om het bereik van de beweging
int topRange = 0;
int bottomRange = 0;
VOID Setup
{
pinMode(OUTPUT,A5); initialiseren van deze pinnen als uitgang aan macht analoge sticks
pinMode(OUTPUT,A4);
pinMode(INPUT,inputVertical); pincode voor potten om input instellen
pinMode(INPUT,inputHorizontal);
Serial.begin(9600); Initialiseer seriële communicatie met de computer:
voor (int thisReading = 0; thisReading < numReadings; thisReading ++) / / initialiseren van alle lezingen op 0 in beide arrays (te glad waarden, als verward checkout "glad" op de arduino website)
{servo1Readings [thisReading] = 0;
servo2Readings [thisReading] = 0;}
servo1.attach(10); Dit is de A2, de numnering van de digitale pins blijven het analoge basisgewicht A0
servo2.attach(11); Dit is A3
servoFire.attach(16);
sensorRange = sensorMax - sensorMin; dit het bereik van de potten in zes brokken chops en dan neemt de boven- en onderkant 2 om te worden gebruikt in de beweging van de servo 's
sensorRange = sensorRange / 6;
bottomRange = sensorRange * 2;
topRange = sensorMax - bottomRange;
servoFire.write(0);
servo1.write(90);
servo2.write(90);
}
void loop {}
pos1Old = pos1; pos weerhoudt wijzigen als er geen beweging wordt gedetecteerd
pos2Old = pos2;
analogWrite(A5,168); deze twee pinnen worden gebruikt voor het aandrijven van analoge sticks
analogWrite(A4,168);
digitalWrite(12,HIGH);
de laatste lezing aftrekken:
servo1total = servo1total - servo1Readings [index]; glad data afkomstig van potten
lezen van de sensor:
servo1Readings [index] = analogRead(inputHorizontal);
de lezing aan het totaal toevoegen
servo1total = servo1total + servo1Readings [index];
het gemiddelde berekenen:
servo1Average = servo1total / numReadings;
de laatste lezing aftrekken:
servo2total = servo2total - servo2Readings [index];
lezen van de sensor:
servo2Readings [index] = analogRead(inputVertical);
de lezing aan het totaal toevoegen
servo2total = servo2total + servo2Readings [index];
verder naar de volgende positie in de matrix:
index = index + 1;
Als we aan het einde van de array...
Als (index > = numReadings)
.. .wrap rond naar het begin:
index = 0;
het gemiddelde berekenen:
servo2Average = servo2total / numReadings;
Als (servo1Average > topRange)
{pos1 ++;
Als (pos1 > 180)
{pos1 = 180;}
Serial.println ("servo1 omhoog");
}
else if (servo1Average < bottomRange)
{pos1--;
Als (pos1 < 0)
{pos1 = 0;}
Serial.println ("servo1 naar beneden");
}
anders
{pos1 = pos1Old;
Serial.println ("servo1 nergens");
}
Als (servo2Average > topRange)
{pos2 ++;
Als (pos2 > 110)
{pos2 = 110;} servo verplaatsing beperkt
Serial.println ("servo2 omhoog");
}
else if (servo2Average < bottomRange)
{pos2--;
Als (pos2 < 75)
{pos2 = 75;} servo verplaatsing beperkt
Serial.println ("servo2 naar beneden");
}
anders
{pos2 = pos2Old;
Serial.println ("servo2 nergens");
}
/ * Serial.println(pos2); u kunt dit stukje debuggen en in welke mate de servo's zijn ingesteld op bijhouden
Serial.println(Pos1); * /
servo2.write(pos2);
servo1.write(Pos1);
/ * controleren als gegevens zijn verzonden vanaf de computer: * /
Als (Serial.available()) {}
/ * Lees de meest recente byte * /
byteRead = Serial.read();
/ * ECHO van de waarde die werd voorgelezen, terug naar de seriële poort. */
Als (byteRead = 'F');
{Serial.println("fire");
voor (pos = 0; pos < 120; pos += 1) / / gaat van 0 graden tot 120 graden
{/ / in stappen van 1 graad
servoFire.write(pos); servo naar positie in de variabele 'pos' vertellen
delay(15); wacht 15ms voor de servo te bereiken de positie
}
voor (pos = 120; pos > = 1; pos-= 1) / / gaat van 120 graden tot 0 graden
{
servoFire.write(pos); servo naar positie in de variabele 'pos' vertellen
delay(15); wacht 15ms voor de servo te bereiken de positie
}
}
}
/ * Serial.println(analogRead(inputVertical));
Serial.println(analogRead(inputHorizontal)); * /
Dit kan worden gebruikt voor het testen van de min/max potten
delay(5); vertraging tussendoor servo om tijd te geven om te verplaatsen
}