Beruflich Dokumente
Kultur Dokumente
h>
#include "filters.h"
#define startpin 2
#define noOfSensor 6
#define echoTimeOut 12000
#define
#define
#define
#define
Pr
Pp
Pd
Pa
(millis() - last_time[count]);
last_time[count] = millis();
last_distance[count] = distance[count];
Serial.print(distance[count]);
Serial.print("\t");
count++;
}
//Serial.println();
double temp = left_speed.Median_Filter(raw_velocity[2]);
filtered_velocity[2] = left_speed.Final_Output(temp);
temp = right_speed.Median_Filter(raw_velocity[3]);
filtered_velocity[3] = right_speed.Final_Output(temp);
temp = forward_speed.Median_Filter(raw_velocity[0]);
filtered_velocity[0] = forward_speed.Final_Output(temp);
temp = backward_speed.Median_Filter(raw_velocity[1]);
filtered_velocity[1] = backward_speed.Final_Output(temp);
calculate_OA_output(distance[0], distance[1], distance[0], distance[5],
distance[4], distance[5]);
temp = OA_roll.Median_Filter(raw_OA_roll);
OA_roll_angle = OA_roll.Final_Output(temp);
OA_roll_angle = constrain(OA_roll_angle, -30, 30);
//
//
//
//
Serial.print(raw_velocity[3]);
Serial.print("
");
Serial.print(filtered_velocity[3]);
Serial.print("
");
Serial.println(OA_roll_angle);
}
double US_read(int pin) {
digitalWrite(pin, LOW);
delayMicroseconds(2);
digitalWrite(pin, HIGH);
delayMicroseconds(10);
digitalWrite(pin, LOW);
unsigned long time = micros();
//delayMicroseconds(5);
unsigned long echo = pulseIn(pin + 1, HIGH, echoTimeOut);
return (micros() - time <= echoTimeOut) ? (double)echo : (double)echoTim
eOut;
}
void calculate_OA_output(double front_distance, double back_distance, double lef
t_distance, double right_distance, double up_distance, double down_distance)
{
if (left_distance + right_distance > 2000)//no obstacles on both left an
d right, OR, obstacles are only on one side
{
if ((left_distance < right_distance) && (left_distance < 1000))
//if obstacles on the left side only
{
state = 1;
RC_scale_down_factor = 0.9;