Hej,
superschysst! Jag ska försöka dokumentera felen ikväll, dvs. det är inte alls hemligt. Mitt problem nu är att 2 easydriver-kort gör så att respektive motor endast vibrerar (inte snurrar), ett tredje kort kör motorn, men gör så att den hänger sig i bland för att senare fortsätta snurra.
*****
Uppdatering
*******
filmer
http://videobam.com/LJoZj Översikt
http://videobam.com/Whlsz Visar en fungerande motor + den som hackar
http://videobam.com/qrekG den som hackar tickar även då den har el ansluten
Jag har kommit en bit med koden, men den känns inte så smart gjord. Jag borde kanske använda fler arrays? Nu är det ju fruktansvärt många variablar som defineras. Dock är jag inte helt säker på att hu jag ska arbeta med arrays:
Kod: Markera allt
int brytareArray[] = {vBrytareOne, vBrytareTwo, vBrytareThree, hBrytareOne, hBrytareTwo, hBrytareThree};
tror inte att jag använder den rätt. Te.x här försöker jag hitta om någon av elementen i 'brytareArray' är 'low'
if ( sonar == true && digitalRead(brytareArray[1]) == LOW ) {
När te.x. en motor stängs av (då en brytare är intryckt) går de andra snabbare,
jag använder dessa motorer:
https://www.sparkfun.com/products/10551
Kodens uppbyggnad
1. kör alla motorer tills de slår i sin brytare
2. Nolla alla motorer
3. Ge varje motor en ny pos
4. Kör dom till sin nya pos
5. Börja samla info från sensorn (har inte börjat med detta)
Tusen tacl
Kod: Markera allt
#include <AccelStepper.h>
// Declare variables
int led = 2;
//Mikro-brytare
int hBrytareOne = 8;
int hBrytareTwo = 9;
int hBrytareThree = 10;
int vBrytareOne = 11;
int vBrytareTwo = 12;
int vBrytareThree = 13;
int brytareArray[] = {vBrytareOne, vBrytareTwo, vBrytareThree, hBrytareOne, hBrytareTwo, hBrytareThree};
int switchState = LOW;
//Motorer
AccelStepper vStepperOne(1, 45, 44);
AccelStepper vStepperTwo(1, 49, 48);
AccelStepper vStepperThree(1, 53, 52);
AccelStepper hStepperOne(1, 33, 32);
AccelStepper hStepperTwo(1, 28, 29);
AccelStepper hStepperThree(1, 41, 40);
long hStepperOneCurrentMotorPos;
long hStepperTwoCurrentMotorPos;
long hStepperThreeCurrentMotorPos;
long vStepperOneCurrentMotorPos;
long vStepperTwoCurrentMotorPos;
long vStepperThreeCurrentMotorPos;
long hStepperOneNewMotorPos;
long hStepperTwoNewMotorPos;
long hStepperThreeNewMotorPos;
long vStepperOneNewMotorPos;
long vStepperTwoNewMotorPos;
long vStepperThreeNewMotorPos;
long newMotorPos;
boolean allMotorsReset = false;
boolean startState = true;
boolean sonar = false;
long previousMillis = 0;
long interval = 2;
// End vars
void setup() {
Serial.begin(115200);
pinMode(vBrytareOne, INPUT);
pinMode(vBrytareTwo, INPUT);
pinMode(vBrytareThree, INPUT);
pinMode(hBrytareOne, INPUT);
pinMode(hBrytareTwo, INPUT);
pinMode(hBrytareThree, INPUT);
}
/* //////////////
Stepper Setup
*//////////////
void stepperSetSpeed () {
hStepperOne.setMaxSpeed(1000);
hStepperOne.setAcceleration(1000);
hStepperTwo.setMaxSpeed(1000);
hStepperTwo.setAcceleration(1000);
hStepperThree.setMaxSpeed(1000);
hStepperThree.setAcceleration(1000);
vStepperOne.setMaxSpeed(1000);
vStepperOne.setAcceleration(1000);
vStepperTwo.setMaxSpeed(1000);
vStepperTwo.setAcceleration(1000);
vStepperThree.setMaxSpeed(1000);
vStepperThree.setAcceleration(1000);
hStepperOne.setSpeed(500);
hStepperTwo.setSpeed(500);
hStepperThree.setSpeed(500);
vStepperOne.setSpeed(500);
vStepperTwo.setSpeed(500);
vStepperThree.setSpeed(500);
}
/* //////////////
Void Startup Kör alla motorer tills alla brytare trycks in
*//////////////
void stegStart () {
//Stanna respektive motor då resp brytare trycks in
if (digitalRead (hBrytareOne) == HIGH) {
hStepperOne.runSpeed();
Serial.print(hStepperOne.currentPosition());
}
if (digitalRead (hBrytareTwo) == HIGH) {
hStepperTwo.run();
}
if (digitalRead (hBrytareThree) == HIGH) {
hStepperThree.runSpeed();
}
if (digitalRead (vBrytareOne) == HIGH) {
vStepperOne.runSpeed();
}
if (digitalRead (vBrytareTwo) == HIGH) {
vStepperTwo.runSpeed();
}
if (digitalRead (vBrytareThree) == HIGH) {
vStepperThree.runSpeed();
}
// Om alla brytare är intryckta, reseta motorpositioner
if (digitalRead(brytareArray[5]) == LOW) {
startState = false;
//Serial.print("NU KÖRS ALLA MOT NOLLNING ");
resetMotorPos ();
}
}
/* //////////////
Void resetMotorPos Nolla alla motorer
*//////////////
void resetMotorPos () {
hStepperOne.setCurrentPosition(0);
hStepperTwo.setCurrentPosition(0);
hStepperThree.setCurrentPosition(0);
vStepperOne.setCurrentPosition(0);
vStepperTwo.setCurrentPosition(0);
vStepperThree.setCurrentPosition(0);
switchState = HIGH;
Serial.print("reset");
Serial.print(hStepperOne.currentPosition());
stegGroundPos();
stepperSetSpeed ();
}
/* //////////////
Void stegGroundPos Kör alla motorer till en grundposition
*//////////////
void stegGroundPos () {
allMotorsReset = true;
hStepperOneCurrentMotorPos = hStepperOne.currentPosition();
hStepperTwoCurrentMotorPos = hStepperTwo.currentPosition();
hStepperThreeCurrentMotorPos = hStepperThree.currentPosition();
vStepperOneCurrentMotorPos = vStepperOne.currentPosition();
vStepperTwoCurrentMotorPos = vStepperTwo.currentPosition();
vStepperThreeCurrentMotorPos = vStepperThree.currentPosition();
hStepperOneNewMotorPos = 1000;
hStepperTwoNewMotorPos = 200;
hStepperThreeNewMotorPos = 300;
vStepperOneNewMotorPos = 400;
vStepperTwoNewMotorPos = 500;
vStepperThreeNewMotorPos = 600;
// Uppdatera alla motorer
setStepperPosition();
Serial.println("kör mot grundpos");
// När alla motorer nått sin grunpos börja leta efter sensor-info
if (hStepperOneCurrentMotorPos == hStepperOneNewMotorPos &&
hStepperTwoCurrentMotorPos == hStepperTwoNewMotorPos &&
hStepperThreeCurrentMotorPos == hStepperThreeNewMotorPos &&
vStepperOneCurrentMotorPos == vStepperOneNewMotorPos &&
vStepperTwoCurrentMotorPos == vStepperTwoNewMotorPos &&
vStepperThreeCurrentMotorPos == vStepperThreeNewMotorPos ) {
switchState = LOW;
allMotorsReset = false;
Serial.println("GRUNDPOS delay");
delay (10);
Serial.println("Börja leta efter sensor-info");
sonar = true;
}
}
void setStepperPosition() {
// Uppdatera alla motorer tills de nått sin nya position
if(hStepperOneCurrentMotorPos < hStepperOneNewMotorPos) {
hStepperOne.runSpeed();
hStepperOne.moveTo(hStepperOneNewMotorPos);
}
if(hStepperTwoCurrentMotorPos < hStepperTwoNewMotorPos) {
hStepperTwo.runSpeed();
hStepperTwo.moveTo(hStepperOneNewMotorPos);
}
if(hStepperThreeCurrentMotorPos < hStepperThreeNewMotorPos) {
hStepperThree.runSpeed();
hStepperThree.moveTo(hStepperThreeNewMotorPos);
}
if(vStepperOneCurrentMotorPos < vStepperOneNewMotorPos) {
vStepperOne.runSpeed();
vStepperOne.moveTo(vStepperOneNewMotorPos);
}
Serial.println(vStepperTwoCurrentMotorPos);
if(vStepperTwoCurrentMotorPos < vStepperTwoNewMotorPos) {
vStepperTwo.runSpeed();
vStepperTwo.moveTo(vStepperTwoNewMotorPos);
}
if(vStepperThreeCurrentMotorPos < vStepperThreeNewMotorPos) {
vStepperThree.runSpeed();
vStepperThree.moveTo(vStepperThreeNewMotorPos);
}
}
/* //////////////
Void LOOOOP
*//////////////
void loop() {
if(startState == true) {
stepperSetSpeed();
Serial.println("startstate");
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
stegStart();
}
}
//reseta alla motorer
else if ( allMotorsReset == true && switchState==HIGH) {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
stegGroundPos();
}
}
//hämta sensor value, om alla brytare är HIHG & sonar true starta funktion XXXX, denna ska jag snart börja med
else if ( sonar == true && digitalRead(brytareArray[5]) == HIGH) {
Serial.println("sonar körs");
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
}
}
//Om ngn brytare trycks in medan sonar = true kör startState för att resetta alla motorer
else if ( sonar == true && digitalRead(brytareArray[1]) == LOW ) {
startState = true;
}
}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.