Nerf Vulcan Sentry Gun (10 / 11 steg)
Steg 10: elektronik
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;
}