Étape 14 : Code Arduino Sketch & traitement
Voici le Arduino Sketch et Processing Source Code (Arduino Sketch et traitement sont dans le même fichier zip ci-dessous) :
Si vous utilisez cette esquisse, veuillez régler la vitesse de transmission de votre XBee selon votre configuration de XBee.
void setup() {}
...
changer la vitesse de transmission selon votre XBee, j’ai mis mon XBee à 115200.
Serial.Begin(115200) ;
...
}
=== Sketch Arduino
Langue : Arduino
RobotArmControl.pde
//
par Sam Thongrong 26 février 2012
Rev.02
Tableau de commandes de contrôles :
{GripOut, GripIn, WristUp, WristDown, ElbowUp, ElbowDown,
ShoulderUp, shoulderDown, BaseCW, BaseCCW, LightOn, déconvolue, Stop} ;
int contrôle [13] = {0 x 47, 0x67, 0 x 57, 0x77, 0 x 45, 0 x 65,
0 x 53, 0x73, 0 x 42, 0x62, 0x4c, 0x6c, 0 x 58} ;
Base de
int baseEnablePin = 3 ;
int basePin1 = 16 ;
int basePin2 = 17 ;
Épaule
int shoulderEnablePin = 14 ;
int shoulderPin1 = 2 ;
int shoulderPin2 = 4 ;
Coude
int elbowEnablePin = 6 ;
int elbowPin1 = 7 ;
int elbowPin2 = 15 ;
Poignet
int wristEnablePin = 11 ;
int wristPin1 = 8 ;
int wristPin2 = 12 ;
Grip
int gripEnablePin = 10 ;
int gripPin1 = 9 ;
int gripPin2 = 5 ;
int ledPin = 13 ;
définir une variable pour stocker les octets envoyés à partir du port série
int incomingByte ;
void setup() {}
jeu light LED
pinMode (ledPin, sortie) ;
digitalWrite (ledPin, basse) ;
Définissez les broches SN754410 comme sorties :
pinMode (basePin1, sortie) ;
pinMode (basePin2, sortie) ;
pinMode (baseEnablePin, sortie) ;
pinMode (shoulderPin1, sortie) ;
pinMode (shoulderPin2, sortie) ;
pinMode (shoulderEnablePin, sortie) ;
pinMode (elbowPin1, sortie) ;
pinMode (elbowPin2, sortie) ;
pinMode (elbowEnablePin, sortie) ;
pinMode (wristPin1, sortie) ;
pinMode (wristPin2, sortie) ;
pinMode (wristEnablePin, sortie) ;
pinMode (gripPin1, sortie) ;
pinMode (gripPin2, sortie) ;
pinMode (gripEnablePin, sortie) ;
commencer à envoyer des données à 115200 Baud
J’ai mis mon débit en bauds Xbee à 115200 bps,
changer la vitesse de transmission selon votre XBee
Serial.Begin(115200) ;
}
void loop() {}
vérifier qu’il y a quelque chose dans le tampon de série
Si (Serial.available() > 0) {}
lire l’octet et la stocker dans notre variable
l’octet envoyé est en réalité une valeur ascii
incomingByte = Serial.read() ;
Notez l’enveloppe supérieure de chaque lettre !
chaque lettre tourne moteur différemment.
=== Grip
Poignée en
Si (incomingByte == {controls[0])}
gripIn() ;
}
Adhérence sur
Si (incomingByte == {controls[1])}
gripOut() ;
}
Poignet
Si (incomingByte == {controls[2])}
digitalWrite (wristPin1, basse) ;
digitalWrite (wristPin2, HIGH) ;
wristUp() ;
}
Si (incomingByte == {controls[3])}
wristDown() ;
}
=== Coude
Coude vers le haut
Si (incomingByte == {controls[4])}
elbowUp() ;
}
Coude vers le bas
Si (incomingByte == {controls[5])}
elbowDown() ;
}
=== Épaule
Épaules vers le haut
Si (incomingByte == {controls[6])}
shoulderUp() ;
}
L’épaule vers le bas
Si (incomingByte == {controls[7])}
shoulderDown() ;
}
=== Base de
Base droite
Si (incomingByte == {controls[8])}
baseRight() ;
}
Base de gauche
Si (incomingByte == {controls[9])}
baseLeft() ;
}
Light ON
Si (incomingByte == {controls[10])}
digitalWrite (ledPin, HIGH) ;
}
Lumière s’éteint
Si (incomingByte == {controls[11])}
digitalWrite (ledPin, basse) ;
}
Si un O est envoyé faire sûr que les moteurs sont éteints
Si (incomingByte == {controls[12])}
allStop() ;
}
Delay(100) ;
}
}
void gripIn() {}
digitalWrite (gripEnablePin, HIGH) ;
digitalWrite (gripPin1, basse) ;
digitalWrite (gripPin2, HIGH) ;
}
void gripOut() {}
digitalWrite (gripEnablePin, HIGH) ;
digitalWrite (gripPin2, basse) ;
digitalWrite (gripPin1, HIGH) ;
}
void wristUp() {}
digitalWrite (wristEnablePin, HIGH) ;
digitalWrite (wristPin1, basse) ;
digitalWrite (wristPin2, HIGH) ;
}
void wristDown() {}
digitalWrite (wristEnablePin, HIGH) ;
digitalWrite (wristPin2, basse) ;
digitalWrite (wristPin1, HIGH) ;
}
void elbowUp() {}
digitalWrite (elbowEnablePin, HIGH) ;
digitalWrite (elbowPin1, basse) ;
digitalWrite (elbowPin2, HIGH) ;
}
void elbowDown() {}
digitalWrite (elbowEnablePin, HIGH) ;
digitalWrite (elbowPin2, basse) ;
digitalWrite (elbowPin1, HIGH) ;
}
void shoulderUp() {}
digitalWrite (shoulderEnablePin, HIGH) ;
digitalWrite (shoulderPin1, basse) ;
digitalWrite (shoulderPin2, HIGH) ;
}
void shoulderDown() {}
digitalWrite (shoulderEnablePin, HIGH) ;
digitalWrite (shoulderPin2, basse) ;
digitalWrite (shoulderPin1, HIGH) ;
}
void baseRight() {}
digitalWrite (baseEnablePin, HIGH) ;
digitalWrite (basePin1, basse) ;
digitalWrite (basePin2, HIGH) ;
}
void baseLeft() {}
digitalWrite (baseEnablePin, HIGH) ;
digitalWrite (basePin2, basse) ;
digitalWrite (basePin1, HIGH) ;
}
void allStop() {}
digitalWrite (baseEnablePin, basse) ;
digitalWrite (basePin1, basse) ;
digitalWrite (basePin2, basse) ;
digitalWrite (shoulderEnablePin, basse) ;
digitalWrite (shoulderPin1, basse) ;
digitalWrite (shoulderPin2, basse) ;
digitalWrite (elbowEnablePin, basse) ;
digitalWrite (elbowPin1, basse) ;
digitalWrite (elbowPin2, basse) ;
digitalWrite (wristEnablePin, basse) ;
digitalWrite (wristPin1, basse) ;
digitalWrite (wristPin2, basse) ;
digitalWrite (gripEnablePin, basse) ;
digitalWrite (gripPin1, basse) ;
digitalWrite (gripPin2, basse) ;
}
=== Arduino fin
Voici le Code Source de la transformation. You'ill besoin du fichier d’image de fond, et tous les boutons des fichiers image afin de voir les boutons de commande sur l’écran.
Et tous l’arrière-plan et les boutons sont fournis ad il y a dans le dossier appelé données. Vous devrez avoir ce dossier que se trouve dans le même dossier du code de traitement (RobotArmControl.pde)
Langue : traitement
RobotArmControl.pde
par Sam Thongrong 26 février 2012
charger la bibliothèque de série pour le traitement
Import processing.serial.* ;
instance de la classe série
Port série ;
Tableau de commandes de contrôles :
GripOut, GripIn, WristUp, WristDown, ElbowUp, ElbowDown,
ShoulderUp, shoulderDown, BaseCW, BaseCCW, LightOn, déconvolue, Stop
contrôles d’int [] = new int [] {}
0 x 47, 0x67, 0 x 57, 0x77, 0 x 45, 0 x 65,
0 x 53, 0x73, 0 x 42, 0x62, 0x4c, 0x6c, 0 x 58} ;
Bouton d’image.
Chargement des images et les utiliser pour créer un bouton.
ImageButtons GripIn ;
ImageButtons GripOut ;
ImageButtons WristUp ;
ImageButtons WristDown ;
ImageButtons ElbowUp ;
ImageButtons ElbowDown ;
ImageButtons ShoulderUp ;
ImageButtons ShoulderDown ;
ImageButtons BaseCW ;
ImageButtons BaseCCW ;
ImageButtons LightOn ;
ImageButtons déconvolue ;
ImageButtons Pause ;
arrière-plan
Bg de Byte ;
définir la police
PFont myFont ;
Sub controlGUI()
{
BG = loadImage("background.jpg") ;
Background(BG) ;
int buttonSize = 44 ;
Byte sélectionné = loadImage("controlSel.png") ;
Poignée en
GripInImage Byte = loadImage("controlIn.png") ;
GripInOver Byte = loadImage("controlInOver.png") ;
GripIn = new ImageButtons (30, 83, buttonSize, buttonSize,
gripInImage, gripInOver, sélectionné) ;
Adhérence sur
GripOutImage Byte = loadImage("controlOut.png") ;
GripOutOver Byte = loadImage("controlOutOver.png") ;
GripOut = new ImageButtons (78, 83, buttonSize, buttonSize,
gripOutImage, gripOutOver, sélectionné) ;
Poignet vers le haut
WristUpImage Byte = loadImage("controlUp.png") ;
WristUpOver Byte = loadImage("controlUpOver.png") ;
WristUp = new ImageButtons (150, 36, buttonSize, buttonSize,
wristUpImage, wristUpOver, sélectionné) ;
Poignet vers le bas
WristDownImage Byte = loadImage("controlDown.png") ;
WristDownOver Byte = loadImage("controlDownOver.png") ;
WristDown = new ImageButtons (198, 36, buttonSize, buttonSize,
wristDownImage, wristDownOver, sélectionné) ;
Coude vers le haut
ElbowUpImage Byte = loadImage("controlUp.png") ;
ElbowUpOver Byte = loadImage("controlUpOver.png") ;
ElbowUp = new ImageButtons (258, 83, buttonSize, buttonSize,
elbowUpImage, elbowUpOver, sélectionné) ;
Coude vers le bas
ElbowDownImage Byte = loadImage("controlDown.png") ;
ElbowDownOver Byte = loadImage("controlDownOver.png") ;
ElbowDown = new ImageButtons (306, 83, buttonSize, buttonSize,
elbowDownImage, elbowDownOver, sélectionné) ;
Épaules vers le haut
ShoulderUpImage Byte = loadImage("controlUp.png") ;
ShoulderUpOver Byte = loadImage("controlUpOver.png") ;
ShoulderUp = new ImageButtons (208, 160, buttonSize, buttonSize,
shoulderUpImage, shoulderUpOver, sélectionné) ;
L’épaule vers le bas
ShoulderDownImage Byte = loadImage("controlDown.png") ;
ShoulderDownOver Byte = loadImage("controlDownOver.png") ;
ShoulderDown = new ImageButtons (256, 160, buttonSize, buttonSize,
shoulderDownImage, shoulderDownOver, sélectionné) ;
Base de CW
BaseCWImage Byte = loadImage("controlCW.png") ;
BaseCWOver Byte = loadImage("controlCWOver.png") ;
BaseCW = new ImageButtons (130, 234, buttonSize, buttonSize,
baseCWImage, baseCWOver, sélectionné) ;
Base CCW
BaseCCWImage Byte = loadImage("controlCCW.png") ;
BaseCCWOver Byte = loadImage("controlCCWOver.png") ;
BaseCCW = new ImageButtons (178, 234, buttonSize, buttonSize,
baseCCWImage, baseCCWOver, sélectionné) ;
Lumière sur
LightOnImage Byte = loadImage("LightOn.png") ;
LightOnOver Byte = loadImage("LightOnOver.png") ;
LightOn = new ImageButtons (30, 184, buttonSize, buttonSize,
lightOnImage, lightOnOver, sélectionné) ;
Lumière s’éteint
LightOffImage Byte = loadImage("LightOff.png") ;
LightOffOver Byte = loadImage("LightOffOver.png") ;
Déconvolue = new ImageButtons (78, 184, buttonSize, buttonSize,
lightOffImage, lightOffOver, sélectionné) ;
}
void setup() {}
Liste de tous les ports série disponibles dans le volet de sortie.
Vous devrez choisir le port qui est de la carte Arduino
connecté à partir de cette liste. Est le premier port dans la liste
port port #0 et le troisième dans la liste est le #2.
println(Serial.List()) ;
Ouvrir le port connecté à la carte Arduino
(dans ce cas #0)
Assurez-vous d’avoir ouvert le port à la même vitesse Qu'arduino est
en utilisant (112500 bits/s)
port = nouvelle série (ce, Serial.list() [1], 112500) ;
Sur la fenêtre PC, utilisez « Sortant » de l’appareil bluetooth
Celui-ci pour XBee
port = nouvelle série (this, "COM30", 115200) ;
taille de l’écran du programme
taille (145, 455) ;
taille (400, 300) ;
Smooth() ;
ellipse de test
ellipseMode(RADIUS) ;
textFont (createFont ("Verdana", 14)) ;
controlGUI() ;
}
void updateDisplay() {}
GripIn.update() ;
GripIn.display() ;
GripOut.update() ;
GripOut.display() ;
WristUp.update() ;
WristUp.display() ;
WristDown.update() ;
WristDown.display() ;
ElbowUp.update() ;
ElbowUp.display() ;
ElbowDown.update() ;
ElbowDown.display() ;
ShoulderUp.update() ;
ShoulderUp.display() ;
ShoulderDown.update() ;
ShoulderDown.display() ;
BaseCW.update() ;
BaseCW.display() ;
BaseCCW.update() ;
BaseCCW.display() ;
LightOn.update() ;
LightOn.display() ;
LightOff.update() ;
LightOff.display() ;
}
Envoyer des commandes
void sendCommands() {}
Grip
{if(GripIn.Pressed)}
port.Write(Controls[0]) ;
println ("Grip dans:" + (char)controls[0]) ;
}
{if(GripOut.Pressed)}
port.Write(Controls[1]) ;
println ("Grip Out:" + (char)controls[1]) ;
}
Si (mouseX > 30 & & mouseX < 129 & &
mouseY > 51 & & mouseY < 79) {}
port.Write(Controls[12]) ;
println (« Grip Stop! » + (char)controls[12]) ;
}
Poignet
{if(WristUp.Pressed)}
port.Write(Controls[2]) ;
println ("poignet vers le haut:" + (char)controls[2]) ;
}
{if(WristDown.Pressed)}
port.Write(Controls[3]) ;
println ("poignet vers le bas:" + (char)controls[3]) ;
}
Si (mouseX > 148 & & mouseX < 248 & &
mouseY > 5 & & mouseY < 33) {}
port.Write(Controls[12]) ;
println (« Poignet Stop! » + (char)controls[12]) ;
}
Coude
{if(ElbowUp.Pressed)}
port.Write(Controls[4]) ;
println ("coude vers le haut:" + (char)controls[4]) ;
}
{if(ElbowDown.Pressed)}
port.Write(Controls[5]) ;
println ("coude vers le bas:" + (char)controls[5]) ;
}
Si (mouseX > 258 & & mouseX < 358 & &
mouseY > 51 & & mouseY < 79) {}
port.Write(Controls[12]) ;
println (« Coude Stop! » + (char)controls[12]) ;
}
Épaule
{if(ShoulderUp.Pressed)}
port.Write(Controls[6]) ;
println ("épaule vers le haut:" + (char)controls[6]) ;
}
{if(ShoulderDown.Pressed)}
port.Write(Controls[7]) ;
println ("épaule vers le bas:" + (char)controls[7]) ;
}
Si (mouseX > 208 & & mouseX < 308 & &
mouseY > 130 & & mouseY < 158) {}
port.Write(Controls[12]) ;
println (« Épaule Stop! » + (char)controls[12]) ;
}
Base de
{if(BaseCW.Pressed)}
port.Write(Controls[8]) ;
println ("Base de rotation CW:" + (char)controls[8]) ;
}
{if(BaseCCW.Pressed)}
port.Write(Controls[9]) ;
println ("Base tourner CCW:" + (char)controls[9]) ;
}
Si (mouseX > 130 & & mouseX < 230 & &
mouseY > 202 & & mouseY < 230) {}
port.Write(Controls[12]) ;
println (« Base Stop! » + (char)controls[12]) ;
}
Lumière
{if(LightOn.Pressed)}
port.Write(Controls[10]) ;
println ("lumière sur:" + (char)controls[10]) ;
}
{if(LightOff.Pressed)}
port.Write(Controls[11]) ;
println ("lumière éteinte:" + (char)controls[11]) ;
}
}
void draw()
{
updateDisplay() ;
sendCommands() ;
}
Bouton & ImageButtons Classes
classe de bouton
{
int x, y ;
int w, h ;
couleur basecolor, highlightcolor ;
couleur currentcolor ;
booléenne plus = false ;
pressé de Boolean = false ;
pressed() Sub {}
Si (plus & & mousePressed) {}
pressé = true ;
} else {}
pressé = false ;
}
}
Boolean overRect (int x, int y, int width, int height) {}
Si (mouseX > = x & & mouseX < = x + largeur & &
mouseY > = y & & mouseY < = y + height) {}
retourne la valeur true ;
} else {}
retourne la valeur false ;
}
}
}
classe ImageButtons étend bouton
{
Byte base ;
Tableau de Byte ;
Byte
Byte currentimage ;
ImageButtons (int ix, iy int, int iw, int ih,
Ibase Byte, Byte iroll, idown Byte)
{
x = ix ;
y = iy ;
w = iw ;
h = ih ;
base = ibase ;
rouleau = iroll ;
bas = idown ;
currentimage = base ;
}
void update()
{
Over() ;
Pressed() ;
{if(Pressed)}
currentimage = vers le bas ;
} ElseIf (sur) {}
currentimage = rouleau ;
} else {}
currentimage = base ;
}
}
Sub over()
{
Si (overRect (x, y, w, h)) {}
plus = true ;
} else {}
plus = false ;
}
}
display() Sub
{
image (currentimage, x, y) ;
}
}
Fin de traitement
Pour contrôler le moteur bras Robot, déplace le curseur sur la touche souhaitée et cliquez sur.
Pour arrêter l’opération il suffit de déplacer le curseur à toute étiquette. Robot s’arrête.
Afin d’exploiter simultanément plusieurs moteurs, amenez le curseur sur les boutons requis, puis cliquez sur ces boutons.
Mais ne pas traîner le curseur passe sur les étiquettes, ce qui provoquent l’opération arrêter
Profitez!.