動画
素材
アクリルカット用データ
ファームウェア(Arduino側)
// For RAMPS 1.4
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define X_MIN_PIN 3
#define X_MAY_PIN 2
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#define Y_MIN_PIN 14
#define Y_MAPIN 15
#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Z_ENABLE_PIN 62
#define Z_MIN_PIN 18
#define Z_MAX_PIN 19
#define FAN_PIN 9
int time=1000;
int num=4 ;
int text;
void setup(){
Serial.begin(9600);
pinMode(X_STEP_PIN,OUTPUT);
pinMode(X_DIR_PIN,OUTPUT);
pinMode(X_ENABLE_PIN,OUTPUT);
digitalWrite(X_STEP_PIN,HIGH);
digitalWrite(X_DIR_PIN,HIGH);
pinMode(Y_STEP_PIN,OUTPUT);
pinMode(Y_DIR_PIN,OUTPUT);
pinMode(Y_ENABLE_PIN,OUTPUT);
digitalWrite(Y_STEP_PIN,HIGH);
digitalWrite(Y_DIR_PIN,HIGH);
pinMode(Z_STEP_PIN,OUTPUT);
pinMode(Z_DIR_PIN,OUTPUT);
pinMode(Z_ENABLE_PIN,OUTPUT);
digitalWrite(Z_STEP_PIN,HIGH);
digitalWrite(Z_DIR_PIN,HIGH);
pinMode(FAN_PIN,OUTPUT);
digitalWrite(FAN_PIN,HIGH);
}
void loop(){
if (Serial.available() > 0) {
text=Serial.read();
Serial.print(text);
}
if(text==49){
digitalWrite(X_DIR_PIN,LOW);
step(125,num,X_STEP_PIN);
}
if(text==51){
digitalWrite(X_DIR_PIN,HIGH);
step(125,num,X_STEP_PIN);
}
if(text==52){
digitalWrite(Y_DIR_PIN,LOW);
step(125,num,Y_STEP_PIN);
}
if(text==54){
digitalWrite(Y_DIR_PIN,HIGH);
step(125,num,Y_STEP_PIN);
}
if(text==55){
digitalWrite(Z_DIR_PIN,LOW);
step(125,num,Z_STEP_PIN);
}
if(text==57){
digitalWrite(Z_DIR_PIN,HIGH);
step(125,num,Z_STEP_PIN);
}
text=0;
}
void step(int time,int num,int pin){
for(int i=0;i<num;i++){
digitalWrite(pin,HIGH);
delayMicroseconds(time);
digitalWrite(pin,LOW);
delayMicroseconds(time);
}
}
ソフトウェア(PC側)
import processing.serial.*;
float x1=0, x2=0, y1=-200, y2=-200, r1=radians(0), r2=radians(135);
int flag_r2=0;
int top_flag=0;
int middle_flag=0;
int bottom_flag=0;
// Serialクラスのインスタンス
Serial myPort;
// シリアルポートから取得したデータ(Byte)
int tmp;
int tmp2;
void setup() {
size(640, 640);
// Macのシリアルのリストの最初のポートがFTDIアダプタのポート
String portName = Serial.list()[0];
// ポートとスピードを設定して、Serialクラスを初期化、
myPort = new Serial(this, portName, 9600);
}
void draw() {
background(255, 255, 255);
arc(320, 240, 200, 200, -PI, 0);
arc(320, 240, 200, 300, 0, PI);
translate(320, 540);
ellipse(0, 0, 10, 10);
rotate(r1);
line(0, 0, x1, y1);
translate(x1, y1);
ellipse(0, 0, 10, 10);
rotate(r2);
line(0, 0, x2, y2);
if (top_flag!=1&°rees(r2)>0) {
tmp='4';
r2-=PI/400;
myPort.write(tmp);
}
else if (top_flag!=1&°rees(r2)<=0) {
top_flag=1;
}
if (top_flag==1&°rees(r2)<90) {
for (int i=0;i<5;i++) {
tmp='6';
r2+=PI/400;
myPort.write(tmp);
}
tmp='1';
r1-=PI/400;
myPort.write(tmp);
}
else if (top_flag==1&°rees(r2)>=90) {
middle_flag=1;
top_flag=0;
tmp='1';
r1-=PI/400;
myPort.write(tmp);
}
if (middle_flag==1&°rees(r2)<135) {
for (int i=0;i<3;i++) {
tmp='6';
r2+=PI/400;
myPort.write(tmp);
}
if(degrees(r1)>-30){
tmp='1';
r1-=PI/400;
myPort.write(tmp);
}
}else if (middle_flag==1&°rees(r2)>=135){
middle_flag=0;
bottom_flag=1;
}
if(bottom_flag==1&°rees(r1)<0){
tmp='3';
r1+=PI/400;
myPort.write(tmp);
}else if(bottom_flag==1&°rees(r1)>=0){
bottom_flag=0;
for(int i=0;i<0;i++){
tmp='7';
myPort.write(tmp);
}
}
delay(10);
if ((keyPressed == true) && (key == '1')) {
tmp='1';
r1-=PI/400;
myPort.write(tmp);
}
if ((keyPressed == true) && (key == '3')) {
tmp='3';
r1+=PI/400;
myPort.write(tmp);
}
if ((keyPressed == true) && (key == '4')) {
tmp='4';
r2-=PI/400;
myPort.write(tmp);
}
if ((keyPressed == true) && (key == '6')) {
tmp='6';
r2+=PI/400;
myPort.write(tmp);
}
if ((keyPressed == true) && (key == '7')) {
tmp='7';
myPort.write(tmp);
}
if ((keyPressed == true) && (key == '9')) {
tmp='9';
myPort.write(tmp);
}
tmp=0;
}
void serialEvent(Serial p) {
//変数xにシリアル通信で読み込んだ値を代入
tmp2=myPort.read();
}