Nerf Vulcan Sentry Gun (10 / 11 steg)

Steg 10: elektronik



Ansluta två servon och elektroniska utlösaren till Arduino är relativt enkel. Ledningar som visas i den första bilden. 1 k resistorn skyddar Ardunio från elektriska shorts och dioden förhindrar herrelösa el och gnistor. Naturligtvis kan du lämna din krets på en skärbräda, men jag beslutade att använda en perfboard.
Spänningen i batteriet anslutet till din pistol motorstyrningar eldhastighet. Om du vill att ditt vapen att skjuta snabbare gärna använda ett andra batteri, eller en med en högre spänning.

Tack själv en lott lo Bob Rudolph för den awesome kod för sentry gun (du kan också ladda ner det här). Bara ladda upp filer till din Arduino. Se till att justera det servo placerar till din pistol!

PSG Arduino kod:

/*
---Projekt Sentry Gun---
============================================================
---Ett Open-Source projekt initierats av Bob Rudolph---
*/

Ange här ditt controller
Skriv alternativ: "Arduino_bare", "Shield_v4", "Shield_v6", "Shield_v7", "Standalone_v3", "Standalone_v5", "Standalone_v7", "Standalone_v8"
#define typ "Arduino_bare"

/ * Hjälpa & refererar till: http://projectsentrygun.rudolphlabs.com/make-your-own
Forum: http://projectsentrygun.rudolphlabs.com/forum

BIFOGADE instruktioner: (för att använda en Arduino ombord)
tillmäter digital i/o pin 8 x-axeln (pan) standard servo
Fäst y-axeln (lutning) standard servo digital i/o pin 9
Fäst trigger standard servo digital i/o pin 10
koppla USB-indikator LED till digital stift 11
bifoga bränning indikator LED till digital i/o pin 12
bifoga lägesindikatorn LED till digital i/o pin 13
bifoga omlastning switch till digital i/o pin 3 (låg-aktiva: när, ansluter pin till GND)
bifoga diable plattan momentan knapp till digital i/o pin 2 (låg-aktiva: när, ansluter pin till GND)
koppla elektriska trigger MOSFET krets till digital i/o pin 7

justera värdena nedan till de värden som arbetar för din pistol:

*/
// <=========================================================================>
Börja anpassade värden - ändra dessa servo positioner att arbeta med ditt torn
// <=========================================================================>

servo positioner:
#define panServo_scanningMin 60 / / hur långt sida till sida du vill ha den
#define panServo_scanningMax 120 / / pistol för att vända vid "skanning"
#define scanningSpeed 3000 / / total tid för 1 svep (i millisekunder)

#define panServo_HomePosition 90 / / "centrerad" gun position
#define tiltServo_HomePosition 90 / /

#define panServo_ReloadPosition 90 / / bekvämt läge för omlastning gun
#define tiltServo_ReloadPosition 85 / /

#define triggerServo_HomePosition 120 / / utlösa servo inte-bränning ställning
#define triggerServo_SqueezedPosition 90 / / trigger servo bränning ställning

Fler inställningar för utlösare:
#define triggerTravelMillis 1500 / / hur ofta bör utlösa pressas (i semi-auto bränning)
högre värde = långsammare bränning, lägre värde = snabbare bränning

Inaktivera inställningar för plattan:
#define disablePlateDelay 5000 / / hur lång inaktivera sentry när plattan trycks (i millisekunder)

ammunition tidningen/klipp inställningar:
booleska useAmmoCounter = false; Om du vill använda räknaren skott / clip storlek funktionen, ange detta till true
int clipSize = 100; Hur många skott innan vapnet är tomt och gun kommer att inaktiveras (ladda om switch återställer räknaren ammo)

// <=========================================================================>
Slutet anpassade värden
// <=========================================================================>

int panServoPin; Arduino pin för pan servo
int tiltServoPin; Arduino pin för tilt servo
int triggerServoPin; Arduino pin för trigger servo eller utdata till utlösa MOSFET
int firingIndicatorLEDPin; Arduino pin för bränning indikator LED
int USBIndicatorLEDPin; Arduino pin för USB-indikator LED
int modeIndicatorLEDPin; Arduino pin för lägesindikator LED
int reloadSwitchPin; Arduino pin för input från RELOAD switch
int disablePlatePin; Arduino pin för input från inaktivera plattan
int electricTriggerPin; Arduino pin för utgång till trigger MOSFET
booleska invertInputs; SANNA vänder på inre pull-ups, användning om stängda switch ansluter arduino pin till marken
Stifttilldelningar för varje installation av maskinvara ställs i funktionen assignPins() längst ner i koden

TypeDef struct config_t
{
Booleska värden men int
int controlMode;
int säkerhet.
int firingMode;
int scanWhenIdle;
int trackingMotion;
int trackingColor;
int leadTarget;
int safeColor;
int showRestrictedZones;
int showDifferentPixels;
int showTargetBox;
int showCameraView;
int mirrorCam;
int ljudeffekter;

Heltal
int camWidth;
int camHeight;
int nbDot;
int antSens;
int minBlobArea;
int tolerans.
int effect;
int trackColorTolerance;
int trackColorRed;
int trackColorGreen;
int trackColorBlue;
int safeColorMinSize;
int safeColorTolerance;
int safeColorRed;
int safeColorGreen;
int safeColorBlue;
int inaktivitet;

Flöten
dubbla propX;
dubbla propY;
dubbla xRatio;
dubbla yRatio;
dubbel xMin;
dubbel xMax;
dubbel yMin;
dubbel yMax;

}
konfiguration;
konfiguration configuration1;

#include < Servo.h >

Servo pan; x-axeln servo
Servo tilt; y-axeln servo
Servo avtryckaren. trigger servo

int xPosition; stereoplacering
int yPosition; luta position
int brand = 0; om 1, eld; annars, inte eld

int fireTimer = 0;
int fireSelector = 1; 1 - halv-automatisk bränning, auto/semi-auto pistol

3 - full automatisk bränning, full-auto pistol

int idleCounter = 0;
int watchdog = 0;
int watchdogTimeout = 2000.
Boolean tomgång = sant;
boolesk sökning = false;
booleska scanDirection = sant;
Boolean funktionshindrade = false;
osignerade långa int disableEndTime;
int scanXPosition = panServo_scanningMin;

int shotCounter = 0; antal skott bränder sedan i reload
booleska clipEmpty = false; är ammunition tidningen tom?

indikator för byte; om "a", fortsätter, om "z", inaktiv
byte x100byte; vissa byte som används under seriell kommunikation
byte x010byte;
byte x001byte;
byte y100byte;
byte y010byte;
byte y001byte;
byte fireByte;
byte fireSelectorByte;
byte scanningByte;

void setup() {
assignPins();

Pan.attach(panServoPin); Ställ in x-axeln servo
Pan.write(panServo_HomePosition);
Tilt.attach(tiltServoPin); Ställ in y-axeln servo
Tilt.write(tiltServo_HomePosition);
pinMode (electricTriggerPin, produktionen); elektriska trigger, ange
digitalWrite (electricTriggerPin, låg);
trigger.attach(triggerServoPin); servo för trigger, inrätta den servon
trigger.write(triggerServo_HomePosition);

pinMode (USBIndicatorLEDPin, OUTPUT); Ställ in USB-indikator LED
pinMode (modeIndicatorLEDPin, produktionen); Ställ in lägesindikator LED
pinMode (firingIndicatorLEDPin, produktionen); Ställ in avfyra indikator LED
pinMode (reloadSwitchPin, ingång); Ställ in reload switch ingång
pinMode (disablePlatePin, ingång); Ställ in inaktivera plattan ingång
IF(invertInputs) {
digitalWrite (reloadSwitchPin, hög); slå på inre pull-up
digitalWrite (disablePlatePin, hög); slå på inre pull-up
}
Serial.BEGIN(4800); börja meddelandet med dator

}

void loop() {
om (Serial.available() > = 10) {/ / kolla om en ny uppsättning kommandon finns tillgängliga
watchdog = 0;
indikator = Serial.read(); Läs första byte i bufferten
om (indikator == "a") {/ / kolla för "a" (anger början av meddelandet)
tomgång = false;
idleCounter = 0;
digitalWrite (USBIndicatorLEDPin, hög); Lys upp USB-indikatorn LED
x100byte = Serial.read(); Läs meddelandet, byte för byte
x010byte = Serial.read(); //
x001byte = Serial.read(); //
y100byte = Serial.read(); //
y010byte = Serial.read(); //
y001byte = Serial.read(); //
fireByte = Serial.read(); //
fireSelectorByte = Serial.read(); //
fireSelector = int(fireSelectorByte) - 48. konvertera byte till heltal
scanningByte = Serial.read();
IF((int(scanningByte) - 48) == 1) {
scanning = sant;
}
annat {
scanning = false;
}
}
annars om (indikator == "z") {/ / kolla för kommandot gå sysslolös (skickas av datorn när programmet är slut)
tomgång = sant;
}
annars om (indikator == 'b') {/ / start backup

Backup();

}
annars om (indikator == "r") {/ / starta återställning

Restore();

}
}
annat {
watchdog ++;
IF(watchdog > watchdogTimeout) {
tomgång = sant;
}
}
IF(Idle) {/ / när Arduino är inte att få kommandon från datorn...
Serial.write('T'); berätta för datorn att Arduino är här
idleCounter ++; med jämna mellanrum blinka indikatorn USB LED
IF(idleCounter > 1000) {/ /
sequenceLEDs (1, 100);
Delay(10);

digitalWrite (USBIndicatorLEDPin, hög); //
Delay(250); //
digitalWrite (USBIndicatorLEDPin, låg); //
idleCounter = 0; //
} //
annat {/ /
digitalWrite (USBIndicatorLEDPin, låg); //
} //
xPosition = panServo_HomePosition; hålla x axeln servo i ursprungsläget
yPosition = tiltServo_HomePosition; hålla y axeln servo i ursprungsläget
eld = 0; inte eld
}
annat {/ / när Arduino får kommandon från datorn...
xPosition = (100*(int(x100byte)-48)) + (10*(int(x010byte)-48)) + (int(x001byte)-48); avkoda dessa meddelandebyte till två 3-siffriga tal
yPosition = (100*(int(y100byte)-48)) + (10*(int(y010byte)-48)) + (int(y001byte)-48); //
eld = int(fireByte) - 48. konvertera byte till heltal
}

IF(scanning) {
digitalWrite (modeIndicatorLEDPin, hög);
IF(scanDirection) {
scanXPosition + = 1;
IF(scanXPosition > panServo_scanningMax) {
scanDirection = false;
scanXPosition = panServo_scanningMax;
}
}
annat {
scanXPosition-= 1;
IF(scanXPosition < panServo_scanningMin) {
scanDirection = sant;
scanXPosition = panServo_scanningMin;
}
}
xPosition = scanXPosition;
yPosition = tiltServo_HomePosition;
eld = 0;
Delay(scanningSpeed/ABS(panServo_scanningMax-panServo_scanningMin));
}
annat {
digitalWrite (modeIndicatorLEDPin, låg);
}

IF((digitalRead(disablePlatePin) == hög & &! invertInputs) || (digitalRead(disablePlatePin) == låg & & invertInputs)) {/ / Kolla inaktivera plattan för att se om den är intryckt
funktionshindrade = sant;
disableEndTime = millis() + disablePlateDelay;
}
IF(Millis() > disableEndTime) {
funktionshindrade = false;
}

IF((digitalRead(reloadSwitchPin) == hög & &! invertInputs) || (digitalRead(reloadSwitchPin) == låg & & invertInputs)) {/ / Kontrollera växeln reload för att se om det är vänt
shotCounter = 0;
xPosition = panServo_ReloadPosition; om det är vänt, åsidosätta datorkommandon,
yPosition = tiltServo_ReloadPosition; och skicka servon till sina reload positioner
eld = 0; inte eld medan omlastning
digitalWrite (modeIndicatorLEDPin, hög);
Delay(100);
digitalWrite (modeIndicatorLEDPin, låg);
Delay(100);
}

IF(disabled) {
xPosition = panServo_ReloadPosition; om det är vänt, åsidosätta datorkommandon,
yPosition = tiltServo_ReloadPosition; och skicka servon till sina reload positioner
eld = 0; inte eld medan omlastning
digitalWrite (modeIndicatorLEDPin, hög);
Delay(50);
digitalWrite (modeIndicatorLEDPin, låg);
Delay(50);
}

Pan.write(xPosition); Skicka servon till oavsett vilken ställning har fått befallning
Tilt.write(yPosition); //

om (useAmmoCounter & & shotCounter > = clipSize) {
clipEmpty = sant;
}
annat {
clipEmpty = false;
}

om (brand == 1 & &! clipEmpty) {/ / om bränning...
Fire(fireSelector); avfyra vapnet i oavsett bränning läge är markerat
}
annat {/ / om inte skjuta...
ceaseFire(fireSelector); sluta skjuta pistolen
}
}

Annullera brand (int selector) {/ / funktion för att avfyra pistolen, baserat på vad bränning läge är markerat
IF(Selector == 1) {
fireTimer ++;
om (fireTimer > = 0 & & fireTimer < = triggerTravelMillis) {
digitalWrite (electricTriggerPin, hög);
trigger.write(triggerServo_SqueezedPosition);
digitalWrite (firingIndicatorLEDPin, hög);
}
om (fireTimer > triggerTravelMillis & & fireTimer < 1,5 * triggerTravelMillis) {
digitalWrite (electricTriggerPin, låg);
trigger.write(triggerServo_HomePosition);
digitalWrite (firingIndicatorLEDPin, låg);
}
om (fireTimer > = 1,5 * triggerTravelMillis) {
fireTimer = 0;
IF(useAmmoCounter) {
shotCounter ++; ökar värdet för räknaren skott
}
}
}
IF(Selector == 3) {
digitalWrite (electricTriggerPin, hög);
trigger.write(triggerServo_SqueezedPosition);
digitalWrite (firingIndicatorLEDPin, hög);
}
}

void eldupphör (int selector) {/ / funktion att stoppa bränning vapnet, baserat på vad bränning läge är markerat
IF(Selector == 1) {
fireTimer = 0;
digitalWrite (electricTriggerPin, låg);
trigger.write(triggerServo_HomePosition);
digitalWrite (firingIndicatorLEDPin, låg);
}
IF(Selector == 3) {/ / för min pistol, båda bränning lägen upphöra bränning genom att helt enkelt stänga.
digitalWrite (electricTriggerPin, låg);
trigger.write(triggerServo_HomePosition);
digitalWrite (firingIndicatorLEDPin, låg);
}
}

void sequenceLEDs (int repetitioner, int fördröjningstid) {
int startDelay;
för (int jag = 0; jag < upprepar; i ++) {

digitalWrite (USBIndicatorLEDPin, låg);
digitalWrite (modeIndicatorLEDPin, låg);

startDelay = millis();
medan (millis ()-startDelay < fördröjningstid) {
digitalWrite (firingIndicatorLEDPin, hög);
}
digitalWrite (firingIndicatorLEDPin, låg);

startDelay = millis();
medan (millis ()-startDelay < fördröjningstid) {
digitalWrite (USBIndicatorLEDPin, hög);
}
digitalWrite (USBIndicatorLEDPin, låg);

startDelay = millis();
medan (millis ()-startDelay < fördröjningstid) {
digitalWrite (modeIndicatorLEDPin, hög);
}
digitalWrite (modeIndicatorLEDPin, låg);

startDelay = millis();
medan (millis ()-startDelay < fördröjningstid) {
Chill
}
}
}

void assignPins() {
om (typ == "Arduino_bare" || typ == "Arduino_Bare") {
PIN bilagor:
panServoPin = 8; Arduino pin för pan servo
tiltServoPin = 9; Arduino pin för tilt servo
triggerServoPin = 7. Arduino pin för trigger servo eller utdata till utlösa MOSFET
firingIndicatorLEDPin = 12; Arduino pin för bränning indikator LED
USBIndicatorLEDPin = 11; Arduino pin för USB-indikator LED
modeIndicatorLEDPin = 13. Arduino pin för lägesindikator LED
reloadSwitchPin = 3; Arduino pin för input från RELOAD switch
disablePlatePin = 2; Arduino pin för input från inaktivera plattan
electricTriggerPin = 10; Arduino pin för utgång till trigger MOSFET
invertInputs = sant; SANNA vänder på inre pull-ups, användning om stängda switch ansluter arduino pin till marken
}
annars om (typ == "Shield_v4" || typ == "Shield_v6") {
PIN bilagor:
panServoPin = 9; Arduino pin för pan servo
tiltServoPin = 8; Arduino pin för tilt servo
triggerServoPin = 7. Arduino pin för trigger servo eller utdata till utlösa MOSFET
electricTriggerPin = 6; Arduino pin för utgång till trigger MOSFET
firingIndicatorLEDPin = 11; Arduino pin för bränning indikator LED
USBIndicatorLEDPin = 12; Arduino pin för USB-indikator LED
modeIndicatorLEDPin = 13. Arduino pin för lägesindikator LED
reloadSwitchPin = 10; Arduino pin för input från RELOAD switch
disablePlatePin = 2; Arduino pin för input från inaktivera plattan
invertInputs = sant; SANNA vänder på inre pull-ups, användning om stängda switch ansluter arduino pin till marken
}
annars om (typ == "Shield_v7") {
PIN bilagor:
panServoPin = 8; Arduino pin för pan servo
tiltServoPin = 9; Arduino pin för tilt servo
triggerServoPin = 10; Arduino pin för trigger servo eller utdata till utlösa MOSFET
electricTriggerPin = 7. Arduino pin för utgång till trigger MOSFET
firingIndicatorLEDPin = 12; Arduino pin för bränning indikator LED
USBIndicatorLEDPin = 6; Arduino pin för USB-indikator LED
modeIndicatorLEDPin = 13. Arduino pin för lägesindikator LED
reloadSwitchPin = 11; Arduino pin för input från RELOAD switch
disablePlatePin = 2; Arduino pin för input från inaktivera plattan
invertInputs = sant; SANNA vänder på inre pull-ups, användning om stängda switch ansluter arduino pin till marken
}
annars om (typ == "Standalone_v3") {
PIN bilagor:
panServoPin = 8; Arduino pin för pan servo
tiltServoPin = 9; Arduino pin för tilt servo
triggerServoPin = 10; Arduino pin för trigger servo eller utdata till utlösa MOSFET
electricTriggerPin = 7. Arduino pin för utgång till trigger MOSFET
firingIndicatorLEDPin = 12; Arduino pin för bränning indikator LED
USBIndicatorLEDPin = 14. Arduino pin för USB-indikator LED
modeIndicatorLEDPin = 13. Arduino pin för lägesindikator LED
reloadSwitchPin = 11; Arduino pin för input från RELOAD switch
disablePlatePin = 2; Arduino pin för input från inaktivera plattan
invertInputs = sant; SANNA vänder på inre pull-ups, användning om stängda switch ansluter arduino pin till marken
}
annars om (typ == "Standalone_v5") {
PIN bilagor:
panServoPin = 8; Arduino pin för pan servo
tiltServoPin = 9; Arduino pin för tilt servo
triggerServoPin = 10; Arduino pin för trigger servo eller utdata till utlösa MOSFET
electricTriggerPin = 7. Arduino pin för utgång till trigger MOSFET
firingIndicatorLEDPin = 12; Arduino pin för bränning indikator LED
USBIndicatorLEDPin = 14. Arduino pin för USB-indikator LED
modeIndicatorLEDPin = 13. Arduino pin för lägesindikator LED
reloadSwitchPin = 11; Arduino pin för input från RELOAD switch
disablePlatePin = 2; Arduino pin för input från inaktivera plattan
invertInputs = sant; SANNA vänder på inre pull-ups, användning om stängda switch ansluter arduino pin till marken
}
annars om (typ == "Standalone_v7") {
PIN bilagor:
panServoPin = 8; Arduino pin för pan servo
tiltServoPin = 9; Arduino pin för tilt servo
triggerServoPin = 10; Arduino pin för trigger servo eller utdata till utlösa MOSFET
electricTriggerPin = 7. Arduino pin för utgång till trigger MOSFET
firingIndicatorLEDPin = 12; Arduino pin för bränning indikator LED
USBIndicatorLEDPin = 14. Arduino pin för USB-indikator LED
modeIndicatorLEDPin = 13. Arduino pin för lägesindikator LED
reloadSwitchPin = 11; Arduino pin för input från RELOAD switch
disablePlatePin = 2; Arduino pin för input från inaktivera plattan
invertInputs = sant; SANNA vänder på inre pull-ups, användning om stängda switch ansluter arduino pin till marken
}
annars om (typ == "Standalone_v8") {
PIN bilagor:
panServoPin = 8; Arduino pin för pan servo
tiltServoPin = 9; Arduino pin för tilt servo
triggerServoPin = 10; Arduino pin för trigger servo eller utdata till utlösa MOSFET
electricTriggerPin = 7. Arduino pin för utgång till trigger MOSFET
firingIndicatorLEDPin = 12; Arduino pin för bränning indikator LED
USBIndicatorLEDPin = 14. Arduino pin för USB-indikator LED
modeIndicatorLEDPin = 13. Arduino pin för lägesindikator LED
reloadSwitchPin = 11; Arduino pin för input från RELOAD switch
disablePlatePin = 2; Arduino pin för input från inaktivera plattan
invertInputs = sant; SANNA vänder på inre pull-ups, användning om stängda switch ansluter arduino pin till marken
}
}

Backup:

bidragit med Hugo K.

#include < EEPROM.h >
#include "EEPROMAnything.h"

/*
Booleska värden men int
int controlMode;
int säkerhet.
int firingMode;
int scanWhenIdle;
int trackingMotion;
int trackingColor;
int leadTarget;
int safeColor;
int showRestrictedZones;
int showDifferentPixels;
int showTargetBox;
int showCameraView;
int mirrorCam;
int ljudeffekter;

Heltal
int camWidth;
int camHeight;
int nbDot;
int antSens;
int minBlobArea;
int tolerans.
int effect;
int trackColorTolerance;
int trackColorRed;
int trackColorGreen;
int trackColorBlue;
int safeColorMinSize;
int safeColorTolerance;
int safeColorRed;
int safeColorGreen;
int safeColorBlue;
int inaktivitet;

Flöten
dubbla propX;
dubbla propY;
dubbla xRatio;
dubbla yRatio;
dubbel xMin;
dubbel xMax;
dubbel yMin;
dubbel yMax;
*/

void backup() {

char * Parameter;
char * i.

char BufferSerie [200].
för (int z = 0; z < = 200; z ++) BufferSerie [z] = '\0';

Spara på sträng skicka

byte bufferPos = 0;
char ch;
booleska endOfString = false;

medan (! endOfString) {
IF(Serial.available()) {
CH = Serial.read();

om (ch! = '!') {

BufferSerie [bufferPos ++] = ch;

} annat {

endOfString = sant;
}
}
}

Dela upp strängen mottagna och uppdatera struct konfigurationen." Värdet"

Booleska värden
Parametern = strtok_r (BufferSerie, ";", & i);
configuration1.controlMode = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.Safety = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.firingMode = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.scanWhenIdle = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.trackingMotion = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.trackingColor = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.leadTarget = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.safeColor = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.showRestrictedZones = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.showDifferentPixels = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.showTargetBox = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.showCameraView = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.mirrorCam = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.soundEffects = atoi(Parameter);

Heltal
Parametern = strtok_r (NULL, ";", & i);
configuration1.camWidth = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.camHeight = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.nbDot = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.antSens = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.minBlobArea = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.Tolerance = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.Effect = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.trackColorTolerance = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.trackColorRed = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.trackColorGreen = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.trackColorBlue = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.safeColorMinSize = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.safeColorTolerance = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.safeColorRed = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.safeColorGreen = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.safeColorBlue = atoi(Parameter);

Parametern = strtok_r (NULL, ";", & i);
configuration1.idleTime = atoi(Parameter);

flöten
Parametern = strtok_r (NULL, ";", & i);
configuration1.propX = strtod(Parameter,NULL);

Parametern = strtok_r (NULL, ";", & i);
configuration1.propY = strtod(Parameter,NULL);

Parametern = strtok_r (NULL, ";", & i);
configuration1.xRatio = strtod(Parameter,NULL);

Parametern = strtok_r (NULL, ";", & i);
configuration1.yRatio = strtod(Parameter,NULL);

Parametern = strtok_r (NULL, ";", & i);
configuration1.xMin = strtod(Parameter,NULL);

Parametern = strtok_r (NULL, ";", & i);
configuration1.xMax = strtod(Parameter,NULL);

Parametern = strtok_r (NULL, ";", & i);
configuration1.yMin = strtod(Parameter,NULL);

Parametern = strtok_r (NULL, ";", & i);
configuration1.yMax = strtod(Parameter,NULL);

Delay(20);

Backup på EEPROM 92 bytes, Start på 0
EEPROM_writeAnything (0, configuration1); ta mer än 92 * 3.3ms

}

void restore() {

EEPROM_readAnything (0, configuration1); Relode Struct konfiguration från EEPROM

Delay(20);

Serial.println('R'); Tel bearbetning Arduino redo för att skicka värden

Booleska värden
Serial.Print(configuration1.controlMode);
Serial.Print(";");

Serial.Print(configuration1.Safety);
Serial.Print(";");

Serial.Print(configuration1.firingMode);
Serial.Print(";");

Serial.Print(configuration1.scanWhenIdle);
Serial.Print(";");

Serial.Print(configuration1.trackingMotion);
Serial.Print(";");

Serial.Print(configuration1.trackingColor);
Serial.Print(";");

Serial.Print(configuration1.leadTarget);
Serial.Print(";");

Serial.Print(configuration1.safeColor);
Serial.Print(";");

Serial.Print(configuration1.showRestrictedZones);
Serial.Print(";");

Serial.Print(configuration1.showDifferentPixels);
Serial.Print(";");

Serial.Print(configuration1.showTargetBox);
Serial.Print(";");

Serial.Print(configuration1.showCameraView);
Serial.Print(";");

Serial.Print(configuration1.mirrorCam);
Serial.Print(";");

Serial.Print(configuration1.soundEffects);
Serial.Print(";");

Heltal
Serial.Print(configuration1.camWidth);
Serial.Print(";");

Serial.Print(configuration1.camHeight);
Serial.Print(";");

Serial.Print(configuration1.nbDot);
Serial.Print(";");

Serial.Print(configuration1.antSens);
Serial.Print(";");

Serial.Print(configuration1.minBlobArea);
Serial.Print(";");

Serial.Print(configuration1.Tolerance);
Serial.Print(";");

Serial.Print(configuration1.Effect);
Serial.Print(";");

Serial.Print(configuration1.trackColorTolerance);
Serial.Print(";");

Serial.Print(configuration1.trackColorRed);
Serial.Print(";");

Serial.Print(configuration1.trackColorGreen);
Serial.Print(";");

Serial.Print(configuration1.trackColorBlue);
Serial.Print(";");

Serial.Print(configuration1.safeColorMinSize);
Serial.Print(";");

Serial.Print(configuration1.safeColorTolerance);
Serial.Print(";");

Serial.Print(configuration1.safeColorRed);
Serial.Print(";");

Serial.Print(configuration1.safeColorGreen);
Serial.Print(";");

Serial.Print(configuration1.safeColorBlue);
Serial.Print(";");

Serial.Print(configuration1.idleTime);
Serial.Print(";");

Flöten
Serial.Print(configuration1.propX);
Serial.Print(";");

Serial.Print(configuration1.propY);
Serial.Print(";");

Serial.Print(configuration1.xRatio);
Serial.Print(";");

Serial.Print(configuration1.yRatio);
Serial.Print(";");

Serial.Print(configuration1.xMin);
Serial.Print(";");

Serial.Print(configuration1.xMax);
Serial.Print(";");

Serial.Print(configuration1.yMin);
Serial.Print(";");

Serial.Print(configuration1.yMax);
Serial.Print("!");

}

EEPROMAnything.h

#include < EEPROM.h >
#include < Arduino.h > / / för typdefinitioner

mall < klass T > int EEPROM_writeAnything (int ee, const T & värde)
{
CONST byte * p = (const byte *)(const void*) & värde;
int i;
för (jag = 0; jag < sizeof(value); i ++)
EEPROM.write (ee ++, * p ++);
tillbaka i;
}

mall < klass T > int EEPROM_readAnything (int ee, T & värde)
{
byte * p = (byte*)(void*) & värde;
int i;
för (jag = 0; jag < sizeof(value); i ++)
*p++ = EEPROM.read(ee++);
tillbaka i;
}

Se Steg
Relaterade Ämnen

WiFi / Internet / Android kontrollerade Nerf Vulcan Sentry Gun

Ansluta till en router med en WiFi sköld, kontrollen en vaktpost pistol med en terminalemulator installerad på din bärbara dator eller med en app installerad på din Android-enhet.Om routern är ansluten till internet, kunde denna sentry gun teoretiskt...

Nerf Sentry Gun

jag började med målet att med en halvautomatisk nerf pistol för att skapa en sentry gun. Tanken var att om någon går framför pistolen och är inom ett visst avstånd de skulle bli bombarderade av nerf kulor. Denna idé kom ur en omgång människor Vs. Zom...

Hur du mod nerf vulcan

Ive gjort lite forskning och har grunda ute hur till mod nerf pistolen. Jag ingår också något annorlunda för batteriet att hålla det svalt och hindra motorn från smältande. Vissa andra människor är sannolikt bättre än mig på detta i detta fallet modd...

Nerf Vulcan modifiering Project

i detta Instructable, jag kommer att dokumentera de ändringar jag göra till min nya NERF Vulcan EBF - 25 helautomatisk Nerf gun.Många av dessa ändringar är inte REVERSIBEL , och, om gjort fel, kommer att resultera i oreparerbara skador på pistolen.Ja...

Arduino kontrollerade Nerf Vulcan

Ja, det är precis vad titeln säger det är. Detta instructable lär du dig att kontrollera alla Nerf Vulcan, med din Arduino. Den medföljande handledningen kommer bara skjuta för 2,5 sekunder, stopp för 2,5 sekunder, och så vidare. Det är som en "hello...

Hur man gör en 50 Dart bälte för din Nerf Vulcan

Steg 1: Saker som behövs • 2 Nerf Vulcan Dart bälten • Pocket kniv • liten stjärnskruvmejselSteg 2: Ta skruvar ut Linje ena änden av varje dart bälte med kulorna vänd bort från dig. Ta skruvarna ur varje ände och av toppen i slutet. Lämna remmarna so...

Nerf Vulcan kamerastativ

Jag gillar att filmen saker, och när jag var intresserad av att få ett mindre stativ även om det var inte dyrt att köpa en märkesvaror en, jag insåg att jag hade en extra gamla nerf Vulcan stativ är oanvända. Det var en så rolig och lätt projekt och...

Ta bort alla ARs i din Nerf Vulcan

Hey Guys! Igår köpte jag en Nerf Vulcan och Raider (används) för $20! När jag sköt Vulcan det skulle bara eld 25-35 fot och jag tänkte "Jag önskar att detta skulle gå vidare" så då beslutade jag att mod det! Jag tittade på Zinventors och Nickbur...

(MINECRAFT 1.9 +) Hur man gör en snö Golem sentry gun

* Obs * detta endast fungerar i den 1,9 före pre-release/RELEASE och uppI denna tutorial kommer jag visa dig hur man gör en snö golem i Minecraft 1.9DET DU BEHÖVER:1. Minecraft2. snö block (du behöver bara 2 kvarter)3. en pumpa (det är lätt att hitta...

Den ultimata Nerf Vulcan Mod

gjorde vi en NERF christianwahlberg eld om så snabbt som en 7,62 mm M60 kulspruta. Det är cirka 500 varv per minut (RPM). Vi gjorde två stora ändringar, öka spänningen till motorn bränning, och lägga till en rund disk och en färg jobb.Den totala kost...

Nerf Vulcan AC power mod

denna mod mål var att flytta från ett batteripaket och gör Nerf Vulcan EBF-25 ett stillastående anfall eller försvar vapen. Detta är idealiskt för målskjutning och fast position försvar.Steg 1: Hitta en 9V power supply Rota runt källaren och hitta en...

Ta bort det klickande ljudet i en Nerf Vulcan EBF-25 stativ

detta är en instructable att ta bort det klickande ljudet i en Nerf Vulcan EBF-25 stativ (uppenbarligen???). Dess mycket irriterande som den Nerf Vulcan EBF-25 stativ klickar varje gång du slår det lite, som kommer att berätta var du befinner dig und...

Hur man gör en robot för barn (Sentry Gun)

Som bedriver robotics, definitivt vill göra en robot. Och den omedelbart uppstår ifrågasätta, hur man gör en robot med egna händer? Om du vill skapa en robot måste en mängd av ett svårt radio komponenter. Också, för byggandet av roboten, kommer du be...

Autonoma Paintball Sentry Gun

gör dina egna, anpassade autonoma SENTRY GUN!En mikrokontroller tävling Finalist och tvåan vinnare.Detta instructable är inaktuell. För den senaste versionen av handledning, se hemsida . Skål!Denna sentry gun självständigt spår, mål, och skjuter på m...

Hur man gör en Airsoft Sentry Gun

https://www.youtube.com/watch?v=JyAHxu_VQh8I filmen ovan, kommer jag att förklara hur du kan göra din egen airsoft sentry gun. Jag hoppas att du njuta av denna video. Så, skulle jag uppskatta om du gav det en likadan!Reservdelslista:-Arduino Uno-1K O...

Andee Sentry Gun med Annikken Andee

har du ett projekt som kan styra en missilsystem och laser med en Android eller iOS-enhet? Vi talar inte om de verkliga missilsystem, men vår Andee Sentry Gun modell som har 6 fat av ammunition för att frigöra eldkraft på din nästa fiende!Ladda ner v...

Lätt arduino sentry gun

Detta instructable visar dig hur man gör en enkel billig sentry gun.Steg 1: delarFör detta projekt behöver du:-en skärbräda-7 startkablar (hane-hane)-Arduino Uno-HC-SR04 ultrasonic sensor-sg90 Servo-Elastiskt pistolSteg 2: Ledningar / bygga ditt proj...

Angry Birds Sentry Gun

MålDet bästa sättet att lära sig C programmering kommer hands-on med det. Och ännu bättre om du kan styra en angry bird launcher torn!För min programmering klass bygger jag en arduino kontrollerade sentry gun.Målet var utveckla en programvara i C spr...

Fullt fungerande Team Fortress 2 Sentry Gun

Nice prova blå spy men du kan inte luraDettaSteg 1: leveranser Trä/metall ditt valEn hink, för ammo fatVarierar VVS delarX3 servon för pannan x. Och tilt y.Och en mer att dra avtryckarenBatteri pack servonWebbkamera för att låta din pistol seOch sist...