ich bin jetzt noch einmal zurück zu der "normalen" steuerung der Stepper zurück, der code sieht nun so aus:
Code:
#include <CustomStepper.h>
#include <NewPing.h>
#define TRIGGER_PIN 8 // Arduino pin tied to trigger pin on the ultrasonic sensor. //12
#define ECHO_PIN 7 // Arduino pin tied to echo pin on the ultrasonic sensor. //11
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
uint16_t distanz;
uint16_t uS;
//uint8_t hindernis, start_ping;
CustomStepper stepper_HL(23, 25, 27, 29);
CustomStepper stepper_VL(31, 33, 35, 37);
CustomStepper stepper_HR(47, 49, 51, 53);
CustomStepper stepper_VR(46, 48, 50, 52);
boolean rotate_li;
boolean rotate_deg_li;
boolean rotate_re;
boolean rotate_deg_re;
boolean vorwaerts;
boolean rueckwaerts;
boolean start_ping;
boolean hindernis;
void setup()
{
rotate_li = false;
rotate_deg_li = false;
rotate_re = false;
rotate_deg_re = false;
vorwaerts = false;
rueckwaerts = false;
start_ping = false;
hindernis = false;
Serial.begin(115200);
}
void loop()
{
hindernis_vorh();
/****************************************/
if (stepper_VL.isDone() && rueckwaerts == false && hindernis == true)
{
alle_stepper_rueckwaerts();
//alle_stepper_stop();
}
else if (stepper_VL.isDone() && rueckwaerts == false && hindernis == false)
alle_stepper_vorwaerts();
/*************************************/
if (stepper_VL.isDone() && rueckwaerts == true && rotate_li == false)
{
rotieren_links();
}
/**************************************/
if (stepper_VL.isDone() && rotate_li == true && vorwaerts == true)
{
alle_stepper_vorwaerts();
}
/**********************************/
if (stepper_VL.isDone() && vorwaerts == true && rotate_re == false)
{
rotieren_rechts();
}
/********************************/
if (stepper_VL.isDone() && rotate_re == true && vorwaerts == true)
{
alle_stepper_vorwaerts();
}
/*****************************/
stepper_VL.run();
stepper_HL.run();
stepper_HR.run();
stepper_VR.run();
}
habe nicht alle funktionen hier reinkopiert, nur die für vorwärts:
Code:
void alle_stepper_vorwaerts()
{
vorwaerts = true;
stepper_VL.setRPM(12);
stepper_HL.setRPM(12);
stepper_HR.setRPM(12);
stepper_VR.setRPM(12);
stepper_VL.setSPR(4075.7728395);
stepper_HL.setSPR(4075.7728395);
stepper_HR.setSPR(4075.7728395);
stepper_VR.setSPR(4075.7728395);
stepper_VL.setDirection(CW);
stepper_VL.rotate(1);
stepper_HL.setDirection(CW);
stepper_HL.rotate(1);
stepper_HR.setDirection(CW);
stepper_HR.rotate(1);
stepper_VR.setDirection(CW);
stepper_VR.rotate(1);
//vorwaerts = true;
}
ping distanz:
Code:
void ping_distanz(void)
{
delay(500);// Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
Serial.print("Ping: ");
Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range)
Serial.println(" cm");
start_ping = true;
}
und der hindernis erkennung:
Code:
void hindernis_vorh(void)
{
if (start_ping == false) ping_distanz();
if (((uS / US_ROUNDTRIP_CM) <= 10))
hindernis = true;
}
an und für sich funktioniert die hinderniserkennung, am start fährt der robby an, oder eben nicht (bei hindernis vorne)
wo es noch klemmt ist das mit den blockierenden funktionen für die stepper. Die reagieren also während der fahrt nicht auf hindernisse und das stört natürlich 
mir ist es bis jetzt nicht gelungen das irgendwie zu lösen - hab ich da keine chance in diese blockierenden funktionen einzugreifen? Oder reicht es, wenn die ping funktion vor dem aufruf der stepperfunktion erfolgt? Irgendwie klappte es aber auch nicht...
Eine idee?
Lesezeichen