Étape 7: Le code...
L’idée de base pour la OpenSquare consiste à contrôler la voiture avec votre ordinateur pour un essai de fonctionnement alors que le code enregistre chacun de tes mouvements. Le deuxième morceau de code puis « relit » les instructions que vous avez enregistrée afin que la voiture juste fait le tour et descend la poudre sur ses propres. Vous pouvez simplement déposer la voiture sur une place et regarder il dessiner autour, ou vous pourriez dessiner un élément simple et répéter plusieurs fois pour créer un énorme urbain copier coller.
J’ai utilisé le traitement pour communiquer avec Arduino la télécommande.
Pour faciliter les choses, je viens de téléchargé le croquis de StandardFirmata que vous pouvez trouver sous fichier/exemple/Firmata sur le logiciel Arduino.
Utilisez le W, S, A et D touches pour contrôler la direction de la voiture. J’ai eu quelques problèmes avec ma 5ème chaîne en haut tout le temps donc le moyen de contrôler le servo est en appuyant sur la touche C. Un appui court ouvre la porte et le ferme une pression longue. Pour quitter l’application, appuyez sur Alt.
Copiez le code ci-dessus dans deux sketches différents et les enregistrer comme « Record » et « Replay » dans le même dossier racine.
Vous devriez avoir quelque chose comme ceci sur votre ordinateur :
somewhere/OpenSquare/Record/Record.pde
somewhere/OpenSquare/Replay/Replay.pde
Voici le code pour le traitement de l’enregistreur :
OpenSquare v1.2 - 02/02/14
Import processing.serial.* ;
Import cc.arduino.* ;
Serial myPort ;
Arduino arduino ;
OutputFile PrintWriter ;
keyup booléen = false ;
keyright booléen = false ;
keyleft booléen = false ;
Boolean keydown = false ;
endofrec booléen = false ;
servo booléen = false ;
lastTime long = 0 ;
float x, y ;
void setup() {}
outputFile = createWriter("positions.csv") ;
println(Arduino.List()) ;
Arduino = nouvelle Arduino (ce, Arduino.list() [3], 57600) ;
arduino.pinMode (2, Arduino.OUTPUT) ;
arduino.pinMode (4, Arduino.OUTPUT) ;
arduino.pinMode (6, Arduino.OUTPUT) ;
arduino.pinMode (9, Arduino.OUTPUT) ;
arduino.pinMode (10, Arduino.OUTPUT) ;
Size(640,360) ;
x = largeur/2 ;
y = hauteur/2 ;
lastTime = millis() ;
}
{} void draw()
Background(51) ;
Fill(255) ;
ellipse(x,y,16,16) ;
outputFile.print(millis() + ",") ;
println(Millis()) ;
Si (keyup) {}
y--;
arduino.digitalWrite (4, Arduino.HIGH) ;
outputFile.print(1+",") ;
}
else {}
outputFile.print(0+",") ;
arduino.digitalWrite (4, Arduino.LOW) ;
}
Si (keydown) {}
y ++ ;
arduino.digitalWrite (6, Arduino.HIGH) ;
outputFile.print(1+",") ;
}
else {}
outputFile.print(0+",") ;
arduino.digitalWrite (6, Arduino.LOW) ;
}
Si {(keyleft)
x--;
arduino.digitalWrite (9, Arduino.HIGH) ;
outputFile.print(1+",") ;
}
else {}
outputFile.print(0+",") ;
arduino.digitalWrite (9, Arduino.LOW) ;
}
Si {(keyright)
x ++ ;
arduino.digitalWrite (10, Arduino.HIGH) ;
outputFile.print(1+",") ;
}
else {}
outputFile.print(0+",") ;
arduino.digitalWrite (10, Arduino.LOW) ;
}
Si {(servo)
//y--;
arduino.digitalWrite (2, Arduino.HIGH) ;
outputFile.print(1+",") ;
}
else {}
outputFile.print(0+",") ;
arduino.digitalWrite (2, Arduino.LOW) ;
}
outputFile.println() ;
println("bla") ;
tandis que (millis ()-lastTime < 20) ;
lastTime = millis() ;
Si {(endofrec)
outputFile.flush() ; Écrit les données restantes dans le fichier
outputFile.close() ; Termine le fichier
Exit() ; Arrête le programme
}
}
keyPressed() Sub {}
Si (clé == CODED) {}
Si (clé == « w ») keyup = true ;
Si (clé == de ') keydown = true ;
Si (clé == « a ») keyleft = true ;
Si (clé == « c ») servo = true ;
Si (clé == « v ») servo = false ;
Si (clé == avait ') {}
keyright = true ;
endofrec = true ;
}
Si (keyCode == ALT) endofrec = true ;
}
//}
void keyReleased() {}
Si (clé == CODED) {}
Si (clé == « w ») keyup = false ;
Si (clé == de ') keydown = false ;
Si (clé == « a ») keyleft = false ;
Si (clé == avait ") keyright = false ;
Si (clé == « c ») servo = false ;
Si (clé == « v ») servo = false ;
}
//}
Et maintenant le code pour la relecture :
OpenSquare v1.2 - 02/02/14
Import processing.serial.* ;
Import cc.arduino.* ;
Serial myPort ;
Arduino arduino ;
Tableau Tableau ;
int temps ;
int w ;
s int ;
int a ;
d int ;
int c ;
annuler le programme d’installation () {}
println(Arduino.List()) ;
Arduino = nouvelle Arduino (ce, Arduino.list() [3], 57600) ;
arduino.pinMode (2, Arduino.OUTPUT) ;
arduino.pinMode (4, Arduino.OUTPUT) ;
arduino.pinMode (6, Arduino.OUTPUT) ;
arduino.pinMode (9, Arduino.OUTPUT) ;
arduino.pinMode (10, Arduino.OUTPUT) ;
table = loadTable(".. / Record/positions.csv ","header") ;
println(table.GetRowCount() + "total de lignes dans la table") ;
}
{} void draw()
pour (int i = 0; i < table.getRowCount(); i ++) {}
Ligne de TableRow = table.getRow(i) ;
temps = row.getInt(0) ;
w = row.getInt(1) ;
s = row.getInt(2) ;
un = row.getInt(3) ;
d = row.getInt(4) ;
c = row.getInt(5) ;
Si (w == 1) {}
arduino.digitalWrite (4, Arduino.HIGH) ;
}
else {}
arduino.digitalWrite (4, Arduino.LOW) ;
}
Si (s == 1) {}
arduino.digitalWrite (6, Arduino.HIGH) ;
}
else {}
arduino.digitalWrite (6, Arduino.LOW) ;
}
Si (a == 1) {}
arduino.digitalWrite (9, Arduino.HIGH) ;
}
else {}
arduino.digitalWrite (9, Arduino.LOW) ;
}
Si (d == 1) {}
arduino.digitalWrite (10, Arduino.HIGH) ;
}
else {}
arduino.digitalWrite (10, Arduino.LOW) ;
}
Si (c == 1) {}
arduino.digitalWrite (2, Arduino.HIGH) ;
}
else {}
arduino.digitalWrite (2, Arduino.LOW) ;
}
Delay(20) ;
}
arduino.digitalWrite (2, Arduino.LOW) ;
arduino.digitalWrite (4, Arduino.LOW) ;
arduino.digitalWrite (6, Arduino.LOW) ;
arduino.digitalWrite (9, Arduino.LOW) ;
arduino.digitalWrite (10, Arduino.LOW) ;
Exit() ;
}