Управление трактором с помощью джойстика

int Led = 13;

const int pin_1hall_analog = A0;

const int pin_2hall_analog = A1;

const int pin_3hall_analog = A2;

int sensor;

void setup ()

{

pinMode (Led, OUTPUT) ;

Serial.begin (9600 ) ;

}

void loop()

{

Serial.println (analogRead (pin_1hall_analog));

Serial.println (analogRead (pin_2hall_analog));

Serial.println (analogRead (pin_3hall_analog));

Serial.println (“-”);

}

кавычки какие-то не те, на них компилятор жалуется. Надо которые по Shift на русской букве “Э” но в английской раскладке. Либо на “2” в русской раскладке

Ковычки проверил что то вообще стал выдавать проблему с загрузкой.

Скетч использует 2000 байт (6%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 190 байт (9%) динамической памяти, оставляя 1858 байт для локальных переменных. Максимум: 2048 байт.
avrdude: ser_open(): can’t open device “\.\COM3”: �������� � �������.

Не удалась загрузка: ошибка при загрузке: exit status 1

IDE не может получить доступ к порту. Надо смотреть вообще тот ли порт выбран в Tools → Port

Если всё правильно то нажать Reset на ардуине прям перед загрузкой скетча

Если не помогло то комп перезагрузить может помочь

Сигнал с ардуино видит. Но ничего не грузится.
Один скетч загрузил а после этого может вообще драйвер обновить.

Все пробовал кроме перезагрузки. сейчас перегружу

Да нужно было перезагрузить. Спасибо!

три переменных отображается. правда еще задержку 400 поставил.
А то было не понятно очень быстро менялись данные.
Нейтральное положение :
значит ось Х нейтральное положение = 505
вперед мах = 650
назад мах = 379

         ось У нейтральное положение = 505
                                              влево мах   = 630
                                              вправо мах = 405

          ось Z нейтральное положение = 340
                           против часовой мах   = 418
                                     по часовой мах = 354 но сначала идет на уменьшение до 335 примерно 1/3 хода а потом увеличивается до 354

в общем ось Z нужно разбирать и датчик переставлять.

ось У нейтральное положение = 505
влево мах = 630
вправо мах = 405

ось Z нейтральное положение = 340
против часовой мах = 418
по часовой мах = 354 но сначала идет на уменьшение до 335 примерно 1/3 хода а потом увеличивается до 35

хотел красиво написать по центру. Воспринялся как скетч

Попытайтесь поуправлять джойстиком каким-нибудь электромоторчиком (светлодиодиком или что там у вас есть)для начала. С теми значениями от джойстика которые есть.Сначала по одной оси . Потом добавите вторую. По ходу, возможно вы поймете , что третий датчик холла вам и не нужен будет .Калибровку оставьте на потом.

вот это хреново, надо попробовать магнит в джойстике покрутить, а то даже с массивом не получится обыграть ситуацию, когда одному значению две позиции соответствуют.

Ну либо отказаться от оси Z

я же правильно понял что увеличивается не до 35 а до 350?

Согласен завтра ближе к вечеру прилечу. Разберу попробую исправить этот момент.

@Sergey.B , это не Вы несколько лет назад по улицам дрифтовали на ПУМ-500 или подобном? Жаль ролик не найду🤣

Всем доброго дня!
Исправил положение магнита. Скажу было не легкою
В общем пришлось повернуть магнит на 30 градусов.
Новые значения оси Z
нейтральное положение = 528
против часовой = 649
по часовой = 407
Обалдеть диапазон стал почти 120 в каждую сторону

Да правильно.

Я в интернете вообще почти нигде. Это единственное место где я очень активно себя веду. Поэтому рад бы сказать да, но нет это не я.

Да вроде уже откалибровал. Сейчас буду дальше двигаться. Хочу подогнать вашу программу. Не вашу, а из примеров которую вы посоветовали и опять же по вашему совету на одном канале. Ну а там дальше больше.

Всем доброго дня!
Подскажите что я сделал не правильно.
Сильно не критикуйте. Это можно сказать моя первая попытка.

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);
}
}
}
}