int Led = 13;
const int pin_1hall_analog = A0; // ось X
const int pin_2hall_analog = A1; // ось Y
const int pin_3hall_analog = A2; // ось Z
const int valve_APin = 9; // Пин для управления электромагнитом A (вперед левая)
const int valve_BPin = 10; // Пин для управления электромагнитом B (вперед правая)
const int valve_CPin = 11; // Пин для управления электромагнитом C (назад левая)
const int valve_DPin = 12; // Пин для управления электромагнитом D (назад правая)
int fspeed; // скорость (ШИМ сигнала)
int sensor_1Value; // значение с оси Х джстк
int output_1Value;
int output_2Value;
int sensor_2Value; // значение с оси у джстк
int output_3Value;
int output_4Value;
int sensor_3Value; // значение с оси z джстк
int output_5Value;
int output_6Value;
void setup ()
{
Serial.begin (9600 ) ;
pinMode (Led, OUTPUT) ;
pinMode (pin_1hall_analog, INPUT);
pinMode (pin_2hall_analog, INPUT);
pinMode (pin_3hall_analog, INPUT);
pinMode (valve_APin, OUTPUT);
pinMode (valve_BPin, OUTPUT);
pinMode (valve_CPin, OUTPUT);
pinMode (valve_DPin, OUTPUT);
void loop()
{
sensor_1Value = analogRead(pin_1hall_analog);
sensor_2Value = analogRead(pin_2hall_analog);
sensor_3Value = analogRead(pin_3hall_analog);
output_1Value = map(sensor_1Value, 515, 650, 0, 255); // движение вперед (А, В)
output_2Value = map(sensor_1Value, 490, 380, 0, 255); // движение назад (C, D)
output_3Value = map(sensor_2Value, 515, 630, 0, 255); // движение влево А или C умен. В или D пост
output_4Value = map(sensor_2Value, 490, 410, 0, 255); // вижение вправо В или D умен. А или C пост
output_5Value = map(sensor_3Value, 540, 650, 0, 255); // вращение против часовой (C, B)
output_6Value = map(sensor_3Value, 510, 410, 0, 255); // вращение по часовой (А, D)
if (sensor_3Value > 510 && sensor_3Value < 540)
{
if (sensor_2Value > 490 && sensor_3Value < 520)
{
if (sensor_1Value > 520) // впред Х
{
analogWrite(valve_APin, output_1Value); // вперед
analogWrite(valve_BPin, output_1Value); // вперед
}
else if (sensor_1Value < 490) // назад Х
{
analogWrite(valve_CPin, output_2Value); // назад
analogWrite(valve_DPin, output_2Value); // назад
}
}
else if (sensor_2Value > 520) // влево У
{
if (sensor_1Value > 520) // впред Х
{
analogWrite(valve_BPin, output_1Value); // вперед и влево
analogWrite(valve_APin, output_1Value-output_3Value, valve_DPin < 0 == 0 );
}
else if (sensor1Value < 490) // назад Х
{
analogWrite(valve_DPin, output_2Value); // назад и влево
analogWrite(valve_CPin, output_2Value-output_3Value, valve_DPin < 0 == 0 );
}
}
else if (sensor_2Value < 490) // вправо У
{
if (sensor_1Value > 520) // впред Х
{
analogWrite(valve_APin, output_1Value); // вперед и вправо
analogWrite(valve_BPin, output_1Value-output_4Value, valve_DPin < 0 == 0 );
}
else if (sensor_1Value < 490) // назад Х
{
analogWrite(valve_CPin, output_2Value); // назад и вправо
analogWrite(valve_DPin, output_2Value-output_4Value, valve_DPin < 0 == 0 );
}
}
}
else if (sensor_3Value > 540 ) // против часовой
{
if (sensor_2Value > 490 && sensor_3Value < 520)
{
if (sensor_1Value > 490 && sensor_3Value < 520)
{
analogWrite(valve_APin, output_5Value);
analogWrite(valve_CPin, output_5Value);
}
}
}
else if (sensor_3Value < 510) // по часовой
{
if (sensor_2Value > 490 && sensor_3Value < 520)
{
if (sensor_1Value > 490 && sensor_3Value < 520)
{
analogWrite(valve_APin, output_6Value);
analogWrite(valve_DPin, output_6Value);
}
}
}
}