OpenSquare - skriva stora med en RC-bil (7 / 8 steg)
Steg 7: Koden...
Den grundläggande idén för OpenSquare är att styra bilen med datorn för en provkörning medan koden registrerar ditt varje steg. Den andra halvan av koden sedan repriser"" instruktionerna som du spelat in så att bilen bara går och droppar pulvret på egen hand. Du kan bara släppa bilen på ett torg och titta på det Rita runt, eller du kunde rita ett enkelt element och upprepa det många gånger för att skapa en enorm urban kopia pasta.
Jag använde bearbetning för att kommunicera med fjärrkontrollens Arduino.
För att underlätta, jag lagt upp StandardFirmata skissen kan du hitta under File/exempel/Firmata på Arduino programvara.
Använd W, S, A och D för att styra riktningen på bilen. Jag hade vissa problem med min 5: e kanal att vara hög hela tiden så på sätt jag styr servo är genom att trycka på C. Ett kort tryck öppnar porten och ett långt tryck stänger den. Tryck på Alt om du vill avsluta app.
Kopiera ovanstående kod i två olika skisser och spara dem som "Record" och "Replay" i samma rotmapp.
Du bör ha något sånt här på din dator:
somewhere/OpenSquare/Record/Record.pde
somewhere/OpenSquare/Replay/Replay.pde
Här är koden för bearbetning för brännaren:
OpenSquare v1.2 - 2/2/14
import processing.serial.*;
import cc.arduino.*;
Seriella myPort;
Arduino arduino;
PrintWriter outputFile;
booleska keyup = false;
booleska keyright = false;
booleska keyleft = false;
booleska keydown = false;
booleska endofrec = false;
booleska servo = false;
lång lastTime = 0;
float x, y;
void setup() {
outputFile = createWriter("positions.csv");
println(Arduino.list());
Arduino = nya Arduino (denna, 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 = bredd/2;
y = höjd/2;
lastTime = millis();
}
void draw() {
Background(51);
Fill(255);
Ellipse(x,y,16,16);
outputFile.print(millis() + ",");
println(Millis());
om (keyup) {
y--;
arduino.digitalWrite (4, Arduino.HIGH);
outputFile.print(1+",");
}
annat {
outputFile.print(0+",");
arduino.digitalWrite (4, Arduino.LOW);
}
om (keydown) {
y ++;
arduino.digitalWrite (6, Arduino.HIGH);
outputFile.print(1+",");
}
annat {
outputFile.print(0+",");
arduino.digitalWrite (6, Arduino.LOW);
}
om (keyleft) {
x--;
arduino.digitalWrite (9, Arduino.HIGH);
outputFile.print(1+",");
}
annat {
outputFile.print(0+",");
arduino.digitalWrite (9, Arduino.LOW);
}
om (keyright) {
x ++;
arduino.digitalWrite (10, Arduino.HIGH);
outputFile.print(1+",");
}
annat {
outputFile.print(0+",");
arduino.digitalWrite (10, Arduino.LOW);
}
om (servo) {
//y--;
arduino.digitalWrite (2, Arduino.HIGH);
outputFile.print(1+",");
}
annat {
outputFile.print(0+",");
arduino.digitalWrite (2, Arduino.LOW);
}
outputFile.println();
println("bla");
medan (millis ()-lastTime < 20);
lastTime = millis();
om (endofrec) {
outputFile.flush(); Skriver återstående data till filen
outputFile.close(); Filen är klar
Exit(); Stoppar programmet
}
}
void keyPressed() {
om (nyckel == CODED) {
om (nyckel == "w") keyup = sant;
om (nyckel == 's ") keydown = sant;
om (nyckel == "a") keyleft = sant;
om (nyckel == "c") servo = sant;
om (nyckel == "v") servo = false;
om (nyckel == hade ") {
keyright = sant;
endofrec = sant;
}
om (keyCode == ALT) endofrec = sant;
}
//}
void keyReleased() {
om (nyckel == CODED) {
om (nyckel == "w") keyup = false;
om (nyckel == 's ") keydown = false;
om (nyckel == "a") keyleft = false;
om (nyckel == hade ') keyright = false;
om (nyckel == "c") servo = false;
om (nyckel == "v") servo = false;
}
//}
Och nu koden för reprisen:
OpenSquare v1.2 - 2/2/14
import processing.serial.*;
import cc.arduino.*;
Seriella myPort;
Arduino arduino;
Tabell tabellen.
int temps;
int w;
int s;
int a;
int d;
int c;
Ogiltiga inställningar () {
println(Arduino.list());
Arduino = nya Arduino (denna, 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.
tabell = loadTable(".. / Record/positions.csv ","huvud");
println(Table.getRowCount() + "totala rader i tabellen");
}
void draw() {
för (int jag = 0; jag < table.getRowCount(); i ++) {
TableRow rad = table.getRow(i);
temps = row.getInt(0);
w = row.getInt(1);
s = row.getInt(2);
en = row.getInt(3);
d = row.getInt(4);
c = row.getInt(5);
om (w == 1) {
arduino.digitalWrite (4, Arduino.HIGH);
}
annat {
arduino.digitalWrite (4, Arduino.LOW);
}
om (s == 1) {
arduino.digitalWrite (6, Arduino.HIGH);
}
annat {
arduino.digitalWrite (6, Arduino.LOW);
}
om (en == 1) {
arduino.digitalWrite (9, Arduino.HIGH);
}
annat {
arduino.digitalWrite (9, Arduino.LOW);
}
om (d == 1) {
arduino.digitalWrite (10, Arduino.HIGH);
}
annat {
arduino.digitalWrite (10, Arduino.LOW);
}
om (c == 1) {
arduino.digitalWrite (2, Arduino.HIGH);
}
annat {
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();
}