Étape 6: logiciels
Alors, quand vous appuyer sur l’interrupteur dans un seul sens d’autre part et si la caméra n’a pas déclenché le correspondant interrupteur reed la caméra commence à déplacer et prendre des photos. Si vous appuyez sur le bouton tout en se déplaçant, la caméra met en mouvement rapide, pour des fins de débogage. Aussi si vous appuyez sur le bouton alors que l’interrupteur à bascule 3-État est dans middle(-off) il y a une fonction de panorama. Les possibilités de mouvements combinant le servo et dc moteur sont infinies.
#include < AFMotor.h >
#include < Servo.h >
#include < SoftwareSerial.h >SoftwareSerial mySerial (A3, A2) ; RX, TX
AF_DCMotor motor(4) ; créer le moteur #4, 64KHz pwm
Servo servo ;int swDirFor = 2 ; bouton suivant
int swDirBack = 3 ; Bouton en arrière
int swStopBeg = 10 ; STOP1 bouton
int swStopEnd = A1 ; pylône2 bouton
int swPhoto = 11 ; Relais de SW pour photo
int servoPin = 9 ; servopin
étapes d’int = 100 ; étape durée 1200 fotos
int servoPos = 96 ; position moyenne du servo
int servoStart = 20 ; position du servo de départ
int servoStop = 155 ; fin de course du servo
int servoPot = A0 ; broche du pot de servo
int noOfSteps = 0 ; nombre d’étapes
int swFast = A5 ; SW à mouvement rapide
int i = 0; //for bouclevoid setup() {}
mySerial.begin(9600) ;
Serial.Begin(9600) ; mettre en place une bibliothèque série à 9600 bps
servo.Attach(servoPin) ; servopin
motor.setSpeed(200) ; Réglez la vitesse sur 200/255
pinMode(swDirFor,INPUT) ;
pinMode(swDirBack,INPUT) ;
pinMode(swStopBeg,INPUT) ;
pinMode(swStopEnd,INPUT) ;
pinMode(servoPin,OUTPUT) ;
pinMode(swPhoto,OUTPUT) ;
pinMode(servoPot,INPUT) ;
pinMode(swFast,INPUT) ;
digitalWrite(swPhoto,LOW) ;
servoMove(servoPos) ;
}
///////////////////////////////////////////////////////////////
void loop() {}
Si (mySerial.available()) {}
mySerial.write('a') ;
mySerial.print ("butée bouton:") ;
mySerial.println(digitalRead(swStopEnd)) ;
}
Serial.Print ("État pour le bouton:") ;
Serial.println(digitalRead(swDirFor)) ;
Serial.Print ("dos d’État bouton:") ;
Serial.println(digitalRead(swDirBack)) ;
Serial.Print ("bouton stop Beg:") ;
Serial.println(digitalRead(swStopBeg)) ;
Serial.Print ("butée bouton:") ;
Serial.println(digitalRead(swStopEnd)) ;
Serial.Print ("pot de servo:") ;
Serial.println(analogRead(servoPot)) ;
Serial.Print ("interrupteur rapide:") ;
Serial.println(digitalRead(swFast)) ;
servoPos=map(analogRead(servoPot), 0,1024,1,180) ;
servoMove(servoPos) ;
mouvement vers l’avant
tandis que ((digitalRead(swDirFor)==1)) {}
Si (digitalRead(swStopEnd)==0) {}
Serial.println ("BREAK stopEnd") ;
rupture ;
} //if fermer
tandis que (digitalRead(swFast)==1) {}
Serial.println("FF") ;
runMotor(0,1000) ;
} //while swFast fermer
noOfSteps ++ ;
runMotor(0,steps) ;
retard (750); //final delay(2k-1hour)
takeFoto() ;
} //while swDirFor) == 1 Fermez
déplacement vers l’arrière
tandis que ((digitalRead(swDirBack)==1)) {}
Si (digitalRead(swStopBeg)==0) {}
Serial.println ("BREAK stopBeg") ;
rupture ;
} //if fermer
tandis que (digitalRead(swFast)==1) {}
Serial.println("FB") ;
runMotor(1,1000) ;
} //while swFast fermer
runMotor(1,steps) ;
noOfSteps ++ ;
servoMove(160) ;
retard (1000); //final retard
takeFoto() ;
} //while swDirBack) == 1 Fermez
mouvement de servo
Si ((digitalRead(swFast)==1)) {}
Serial.println ("mesa sto si") ;
servoMove(20) ;
retard (2000); //time pour déplacer le servo à pos de départ
pour (i = 20; i < = 155 ; (i = i + 27)) {
Serial.println ("mesa sto pour") ;
servoMove(i) ;
Delay(2000) ;
takeFoto() ;
Delay(100) ;
noOfSteps ++ ;
} //for fermer
} //if fermer
Delay(500) ;
Serial.Print ("comme suit:") ;
Serial.println(noOfSteps) ;
} //loop fermer
Routine de mouvement / / /
void runMotor (int dir, étapes int) {}
commutateur (dir) {}
case 0 :
Serial.println ("avant") ;
Motor.Run(Forward) ; mettre en marche à l’avenir
Delay(Steps) ;
Motor.Run(Release) ; arrêté
Serial.println ("Stop avant") ;
rupture ;
cas 1 :
Serial.println("backward") ;
Motor.Run(Backward) ;
Delay(Steps) ;
Motor.Run(Release) ;
Serial.println ("Stop arrière") ;
rupture ;
} //switch fermer
retard (100) ;
} //runMotor fermer
//Routine foto//////////////////////////////////////////////////
void takeFoto() {}
retard (500) ;
Serial.Print ("clic!") ;
digitalWrite(swPhoto,HIGH) ;
Delay(1500) ;
digitalWrite(swPhoto,LOW) ;
} //takeFoto fermer
//Routine servo//////////////////////////////////////////////////
void servoMove (int pos) {}
servo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Serial.Print ("déplacement de servo à:") ;
Serial.println(POS) ;
Delay(150) ; attend 15 ms pour le servo atteindre la position
} //servo fermer