Stap 9: Waardoor het een beetje beter
Als I 'm gonna stappen toevoegen aan het einde van dit instructable verbeteringen maken
10-11-09
De code sjabloonwaarden houdt de bal vrij goed maar de steppers in een zeer rotsachtig manier worden aangestuurd.
In deze geactualiseerde code signaal de verwerking schets slechts een naar de Arduino wanneer er een wijziging in de richting. Dus uitsluitend stormloop naar de stappenmotoren in welke richting waren ze laatst ingesteld op, totdat ze worden verteld om te wijzigen. Hierdoor kunnen de motoren te lopen een stuk sneller en soepeler.
Maar er is nog iets een beetje af. De Arduino lijkt te missen sommige van de signalen, zodat de RepStrap met de X-en Y-fase geduwd helemaal aan één kant eindigt.
Ik zal proberen om dit te bevestigen.
De Arduino en Processing code is hieronder. Ik heb meer reacties te helpen houden van duidelijkheid.
/////////////////////////////////////////////////
Arduino code:
Gegevens lezen uit de serie
Gebruik van gegevens om te bepalen van de richting van de X en Y stepper
#define XstepPin 10
#define XdirPin 7
#define YstepPin 2
#define YdirPin 3
int val; Gegevens ontvangen van de seriële poort
VOID Setup {}
pinMode (XstepPin, uitvoer);
pinMode (XdirPin, uitvoer);
pinMode (YstepPin, uitvoer);
pinMode (YdirPin, uitvoer);
Serial.begin(9600); De seriële communicatie start 9600 bps
}
void loop {}
int dirX;
int dirY;
Als (Serial.available()) {/ / indien gegevens beschikbaar om te lezen,
Val = Serial.read(); vervolgens lezen en opslaan van de waarde in de val
}
Als (val == 'H') {//set de richting van de X en Y op basis van gegevens die worden verzonden door verwerking
dirX = hoog;
}
Als (val == 'L') {}
dirX = laag;
}
Als (val == 'h') {}
dirY = hoog;
}
Als (val == 'l') {}
dirY = laag;
}
digitalWrite(XdirPin,dirX); verzameling X richting
digitalWrite(YdirPin,dirY); Y-richting instellen
digitalWrite(XstepPin,HIGH); stappen ondernemen
digitalWrite(YstepPin,HIGH);
delayMicroseconds(2);
digitalWrite(XstepPin,LOW);
digitalWrite(YstepPin,LOW);
delayMicroseconds(2);
delayMicroseconds(1000); <<<<<< Gebruik CHANGE SPEED <<<<<<<<
}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
Verwerking van Code:
Deze uitgangen de motie van de stuiterende bal aan de RepRap X- en Y-as
importeren van processing.serial.*;
Seriële myPort; Object maakt van seriële klasse
int val;
float x = 50,0;
float y = 50,0;
zweven mifluz = 1,0;
float snelle =. 4;
float straal = 15,0;
int directionX = 1;
int directionY = 1;
int old_directionX = 1;
int old_directionY = 1;
VOID Setup {}
grootte (100, 100);
Smooth();
noStroke();
ellipseMode(RADIUS);
String portName = Serial.list() [0];
myPort = nieuwe Serial (deze, portName, 9600);
}
VOID draw() {}
Fill(0,12);
rect (0,0, breedte, hoogte);
Fill(255);
ellips (x, y, straal, straal);
x += mifluz * directionX;
Als ((x > breedte-radius) || (x < RADIUS)) {//change X richting als de bal de kant van het vak raakt
directionX = - directionX;
}
y += snelle * directionY;
Als ((y > hoogte-radius) || (y < RADIUS)) {//change Y richting als de bal de kant van het vak raakt
directionY = - directionY;
}
Als ((directionX! = old_directionX) & & (directionX == 1)) {//if X richting veranderd print H
myPort.write('H');
Print('H');
delay(100);
}
Als ((directionX! = old_directionX) & & (directionX == -1)) {//if X richting veranderd print h
myPort.write('h');
Print('h');
delay(100);
}
Als ((directionY! = old_directionY) & & (directionY == 1)) {//if Y richting veranderd print L
myPort.write('L');
Print('L');
delay(100);
}
Als ((directionY! = old_directionY) & & (directionY == -1)) {//if Y richting veranderd print l
myPort.write('l');
Print('l');
delay(100);
}
old_directionX = directionX; slaat de richtingen die we net, zoals de oude richting gebruikt
old_directionY = directionY;
delay(100); uncomment te vertragen het hele ding voor het oplossen van
}