ошибка в скетче помогите пожалуйста разобраьься
- Войдите на сайт для отправки комментариев
Сб, 04/07/2015 - 21:18
Собрал поворотную системку на ардуино нано с магнитометром GY-273 должна удерживать направление и двумя кнопками вправо влево крутиться. крутится с помощью двигателя который подключен через драйвер 298. Но вот залил скетчь а результат тишина и спокойствие... Посмотрите плиз скетчь-помогите где капашиться)) спасибо))
// Reference the I2C Library
#include <Wire.h>
#include <HMC5883L.h>
#include "I2Cdev.h".
HMC5883L compass;
int error = 0;
#define XX 6 // XX подключен к пину 6
#define YY 7 // YY подключен к пину 7
const int step = 10; // шаг приращения
const int max = 360; // максимум
const int min = 0; // минимум
int dir; // переменная, хранящая направлени
int IN3 = 5;
int IN4 = 4;
int ENB = 3;
int sensor; // переменная для хранения показания сенсора
//int dir = 180; // заданное направление
int tol = 20; // допустимая точность удерживания направления
void setup()
{
pinMode(XX, INPUT_PULLUP); // пин подключен напрямую, без резистора, поэтому используем внутреннюю подтяжку
pinMode(YY, INPUT_PULLUP);
dir = 180; // задаем уставку по умолчанию
pinMode (ENB, OUTPUT);
pinMode (IN3, OUTPUT);
pinMode (IN4, OUTPUT);
// Initialize the serial port.
Serial.begin(9600);
Serial.println("Starting the I2C interface.");
Wire.begin(); // Start the I2C interface.
Serial.println("Constructing new HMC5883L");
compass = HMC5883L(); // Construct a new HMC5883 compass.
Serial.println("Setting scale to +/- 1.3 Ga");
error = compass.SetScale(1.3); // Set the scale of the compass.
if(error != 0) // If there is an error, print it out.
Serial.println(compass.GetErrorText(error));
Serial.println("Setting measurement mode to continous.");
error = compass.SetMeasurementMode(Measurement_Continuous); // Set the measurement mode to Continuous
if(error != 0) // If there is an error, print it out.
Serial.println(compass.GetErrorText(error));
}
// Our main program loop.
void loop()
{
// Retrive the raw values from the compass (not scaled).
MagnetometerRaw raw = compass.ReadRawAxis();
// Retrived the scaled values from the compass (scaled to the configured scale).
MagnetometerScaled scaled = compass.ReadScaledAxis();
// Values are accessed like so:
int MilliGauss_OnThe_XAxis = scaled.XAxis;// (or YAxis, or ZAxis)
// Calculate heading when the magnetometer is level, then correct for signs of axis.
float heading = atan2(scaled.ZAxis, scaled.XAxis);
// Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location.
// Find yours here: http://www.magnetic-declination.com/
// Mine is: 2? 37' W, which is 2.617 Degrees, or (which we need) 0.0456752665 radians, I will use 0.0457
// If you cannot find your Declination, comment out these two lines, your compass will be slightly off.
float declinationAngle = 0.0457;
heading += declinationAngle;
// Correct for when signs are reversed.
if(heading < 0)
heading += 2*PI;
// Check for wrap due to addition of declination.
if(heading > 2*PI)
heading -= 2*PI;
// Convert radians to degrees for readability.
float headingDegrees = heading * 180/M_PI;
// Output the data via the serial port.
Output(raw, scaled, heading, headingDegrees);
// Normally we would delay the application by 66ms to allow the loop
// to run at 15Hz (default bandwidth for the HMC5883L).
// However since we have a long serial out (104ms at 9600) we will let
// it run at its natural speed.
// delay(66);
//int heading = compass.heading(); // вынимаем из показаний величину направление компаса
if (abs(heading - sensor)>320) sensor = heading; // отсекаем проблемный переход из 359° в 1°
sensor = (int)digitalLowPass(sensor, heading, 0.7); // отфильтровываем показания компаса (сглаживаем)
int dif = sensor - dir; // вычисляем разницу между реальным направлением и заданным
int absdif = abs(dif);
if (absdif <= tol) Stop(); // если разница меньше допустимой погрешности, то останавливаемся
else if (((absdif > 180) && (dif != absdif)) || ((absdif < 180) && (dif == absdif))) TurnLeft(); // иначе определяем кратчайшее направление поворота
else TurnRight();
if(!digitalRead(XX)) // если на пин XX подали HIGH
{
dir = dir + step; // прибавляем 10
}
if(!digitalRead(YY)) // если на пин YY подали HIGH
{
dir = dir - step; // убавляем 10
}
if(dir > max) // проверяем выход за пределы верхней границы
{
dir = dir - max;
}
if(dir < min) // проверяем выход за пределы нижней границы
{
dir = max - dir;
}
if(dir == max) // корректируем непонятки с 360 и 0 (один и тот же угол)
{
dir = min;
}
// delay(25);
} // конец основной программы, начинаем все сначала
//
// Подпрограммы
//
// Цифровой низкочастотный фильт
double digitalLowPass(double last_smoothed, double new_value, double filterVal)
{
return (new_value * (1 - filterVal)) + (last_smoothed * filterVal);
}
// Output the data down the serial port.
void Output(MagnetometerRaw raw, MagnetometerScaled scaled, float heading, float headingDegrees)
{
Serial.print("Raw:\t");
Serial.print(raw.XAxis);
Serial.print(" ");
Serial.print(raw.YAxis);
Serial.print(" ");
Serial.print(raw.ZAxis);
Serial.print(" \tScaled:\t");
Serial.print(scaled.XAxis);
Serial.print(" ");
Serial.print(scaled.YAxis);
Serial.print(" ");
Serial.print(scaled.ZAxis);
Serial.print(" \tHeading:\t");
Serial.print(heading);
Serial.print(" Radians \t");
Serial.print(headingDegrees);
Serial.println(" Degrees \t");
}
void Stop(){ // подпрограмма Остановка
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
analogWrite(ENB,0);
delay(200);
}
void TurnRight(){ // подпрограмма Поворот направо
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
analogWrite(ENB,60);
delay(200);
analogWrite(ENB,100);
delay(100);
analogWrite(ENB,180);
delay(100);
analogWrite(ENB,255);
delay(100);
}
void TurnLeft(){ // подпрограмма Поворот налево
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
analogWrite(ENB,60);
delay(200);
analogWrite(ENB,100);
delay(100);
analogWrite(ENB,180);
delay(100);
analogWrite(ENB,255);
delay(100);
}
перед этим heading объявлен как float
что то не выходит-уже пытался и как flot декларировать
что то не выходит-уже пытался и как flot декларировать
FLOT это когда там корабли всякие кучей собираются...
а вот floAt это уже как то ближе к типа переменных :)
FLOT это когда там корабли всякие кучей собираются...
а вот floAt это уже как то ближе к типа переменных :)
Пухлявый, хотел узнать твоё мнение как лингвиста в области программирования, а скетчь - это шо за нах?
Пухлявый, хотел узнать
угу, как с таким количеством ошибок, опечаток и прочего можно вообще написать хоть что то работающее?
впечатление, что имеем дело с тем самым пресловутым миллионом обезьян которым выдали клавиатуры.
Ну я как раз с флота))) и для флота делаю)))) должно антену крутить по магнитометру)))
Не спорю в ардуине я еще как обезьяна-тыкаю куда получится))))) склепывал это произведение из разных скетчей и спотыкаюсь как раз на магнитометре.... и так и сяк тыкаю-а толку как от козла молока))
Ну я как раз с флота))) и для флота делаю)))) должно антену крутить по магнитометру)))
шото у меня сомнения, что оно будет стабильно работать без системы магнитного экранирования локальных магнитных источников магнитного поля лазящего по пасудине.
Вот именно, попробуйте, зная где Север, поискать его с помощью сотовика.....
Может указывать куда угодно
Или софтом типа SatFinder найти куда направить тарелку.
На мобильнике компас работает хорошо в любой точке судна...думаю что и ардуинка сбоить не будет...
ты как определял критерий "хорошо" - есть дефолтный компАс, что бы стравнить или, по каким звёздам сейчас навигация происходит?
мне в принцепе не нужно вообще определять правильные координаты, а нужно чтобы точно было позиционирование относительно палубы... тоесть начинает крутить палубу относительно магнитного поля земли а ардуинка компенсирует с помощью разворота это смещение.... так что юг там или север пофиг главное чтобы могло определить что есть смещение. А компас на моем мобильнике стабильно показывал не хуже старого механического-так что проблем быть не должно
проблема только скетчь доделать я уже и в метале все собрал и плату спаял
качьку сделал компенсацию с помощью мультивия-таместь для подвеса конфигурацию(работает отлично) а вот с направлением пока запара а это основное(вот и ищу кто бы помог с магнитометром разобраться
весь день ковыряюсь вот такое наковырял
// Reference the I2C Library // Reference the I2C Library #include <Wire.h> #include <HMC5883L.h> #include "I2Cdev.h". HMC5883L compass; int error = 0; #define XX 6 // XX подключен к пину 6 #define YY 7 // YY подключен к пину 7 const int step = 10; // шаг приращения const int max = 360; // максимум const int min = 0; // минимум int dir; // переменная, хранящая направлени int IN3 = 5; int IN4 = 4; int ENB = 3; int sensor; // переменная для хранения показания сенсора //int dir = 180; // заданное направление int tol = 20; // допустимая точность удерживания направления float heading; void setup() { Serial.begin(9600); Wire.begin(); compass = HMC5883L(); // создаем экземпляр HMC5883L библиотеки setupHMC5883L(); // инициализация HMC5883L pinMode(XX, INPUT_PULLUP); // пин подключен напрямую, без резистора, поэтому используем внутреннюю подтяжку pinMode(YY, INPUT_PULLUP); dir = 180; // задаем уставку по умолчанию pinMode (ENB, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); } void loop(){ float heading = getHeading(); Serial.println(heading); delay(100); //only here to slow down the serial print } void setupHMC5883L(){ // инициализация HMC5883L, и проверка наличия ошибок int error; error = compass.SetScale(0.88); // чувствительность датчика из диапазона: 0.88, 1.3, 1.9, 2.5, 4.0, 4.7, 5.6, 8.1 if(error != 0) Serial.println(compass.GetErrorText(error)); // если ошибка, то выводим ее error = compass.SetMeasurementMode(Measurement_Continuous); // установка режима измерений как Continuous (продолжительный) if(error != 0) Serial.println(compass.GetErrorText(error)); // если ошибка, то выводим ее } float getHeading(){ // считываем данные с HMC5883L и рассчитываем направление MagnetometerScaled scaled = compass.ReadScaledAxis(); // получаем масштабированные элементы с датчика float heading = atan2(scaled.YAxis, scaled.XAxis); // высчитываем направление //* корректируем значения с учетом знаков if(heading < 0) heading += 2*PI; if(heading > 2*PI) heading -= 2*PI; return heading* RAD_TO_DEG; // переводим радианы в градусы } { heading = compass.heading(); // вынимаем из показаний величину направление компаса if (abs(heading - sensor)>320) sensor = heading; // отсекаем проблемный переход из 359° в 1° sensor = (int)digitalLowPass(sensor, heading, 0.7); // отфильтровываем показания компаса (сглаживаем) int dif = sensor - dir; // вычисляем разницу между реальным направлением и заданным int absdif = abs(dif); if (absdif <= tol) Stop(); // если разница меньше допустимой погрешности, то останавливаемся else if (((absdif > 180) && (dif != absdif)) || ((absdif < 180) && (dif == absdif))) TurnLeft(); // иначе определяем кратчайшее направление поворота else TurnRight(); if(!digitalRead(XX)) // если на пин XX подали HIGH } { dir = dir + step; // прибавляем 10 } if(!digitalRead(YY)) // если на пин YY подали HIGH { dir = dir - step; // убавляем 10 } if(dir > max) // проверяем выход за пределы верхней границы { dir = dir - max; } if(dir < min) // проверяем выход за пределы нижней границы { dir = max - dir; } if(dir == max) // корректируем непонятки с 360 и 0 (один и тот же угол) { dir = min; } // delay(25); } // конец основной программы, начинаем все сначала // // Подпрограммы // // Цифровой низкочастотный фильт double digitalLowPass(double last_smoothed, double new_value, double filterVal) { return (new_value * (1 - filterVal)) + (last_smoothed * filterVal); } // Output the data down the serial port. void Output(MagnetometerRaw raw, MagnetometerScaled scaled, float heading, float headingDegrees) { Serial.print("Raw:\t"); Serial.print(raw.XAxis); Serial.print(" "); Serial.print(raw.YAxis); Serial.print(" "); Serial.print(raw.ZAxis); Serial.print(" \tScaled:\t"); Serial.print(scaled.XAxis); Serial.print(" "); Serial.print(scaled.YAxis); Serial.print(" "); Serial.print(scaled.ZAxis); Serial.print(" \tHeading:\t"); Serial.print(heading); Serial.print(" Radians \t"); Serial.print(headingDegrees); Serial.println(" Degrees \t"); } { void Stop(){ // подпрограмма Остановка digitalWrite (IN3, LOW); digitalWrite (IN4, LOW); analogWrite(ENB,0); delay(200); } void TurnRight(){ // подпрограмма Поворот направо digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); analogWrite(ENB,60); delay(200); analogWrite(ENB,100); delay(100); analogWrite(ENB,180); delay(100); analogWrite(ENB,255); delay(100); } void TurnLeft(){ // подпрограмма Поворот налево digitalWrite (IN3, LOW); digitalWrite (IN4, HIGH); analogWrite(ENB,60); delay(200); analogWrite(ENB,100); delay(100); analogWrite(ENB,180); delay(100); analogWrite(ENB,255); delay(100); }но оно один фиг не работает.... с магнитометра данные идут это до строчки return heading* RAD_TO_DEG; // переводим радианы в градусы
а вот далее идет из другого скетча где магнитометр был другой и как я понимаю там алгоритм другой какой то... плюс непонятная переменная sensor.... короче мрак....
В общем, тут вот сначала про войну а дальше я надрал страницы из комиксов и Капитала от Карл Маркса. И чет сюжет замылился.
Примерно так))) концовка тожея про войну сам про моторчик писал)) а вот серединка точно из комиксов.... Может что подскажете?)))
Примерно так))) концовка тожея про войну сам про моторчик писал)) а вот серединка точно из комиксов.... Может что подскажете?)))
Примерно так))) концовка тожея про войну сам про моторчик писал)) а вот серединка точно из комиксов.... Может что подскажете?)))
Подсказываю.
берете другую библиотеку
или берете учебник математики и учитесь как при помощи карандаша и бумаги пересчитать радианы в градусы. Потом пишите формулу в скече.
Примерно так))) концовка тожея про войну сам про моторчик писал)) а вот серединка точно из комиксов.... Может что подскажете?)))
УУУУУУУУУ))))) Аж страшно))))))) Так там вроде с градусами все ок?.... я запускал до строчки return heading* RAD_TO_DEG; // переводим радианы в градусы
в частности откуда брать SENSOR и что это.... heading-как я понял это как раз то что мы с магнитометра получим
вообще я это все выковырял из скетча робота удерживающего напрвление-но беда в том что у меня магнитометры HMC5883L...... Вот и пытаюсь ковыряться пока безрезультатно... Может хотябы про sensor и heading подскажете? а то мозг кипит а толку нет, а скоро в море, а устройство хотелось бы иметь-на рейдах позволит на связь выходить
Может для начала взять библиотеки для своих компасов и там есть примеры. А не пытаться впихнуть невпихуемое
ну так я взял и впихнул-данные с магнитометра идут
а проблемма где то тут
Почему тут а не там?
ну так я взял и впихнул-данные с магнитометра идут
а проблемма где то тут
ну во первых если залить до этого места то скетчь работает и данные идут
во вторых подсвечивает желтым float heading = heading();
ну и в третих не понятно только это место и в частности sensor
тут как раз обрабатываются данные с компаса, а за этим куском уже к мотору и кнопкам поворота относится с приращением к переменной поворота
И чего тут понимать то?
heading(); функция которая осталась там откуда вырвали строчку.вот и всё.
я в свой перенес-она должна по идее оттуда брать данные-получается с магнитометра.... Или я неправ? и что там за sensor
Гыыыы. . Тоесть если к дизельному двигателю приклеить наклейку от бензинового. То все должно работать? Вы вообще впиливаете что датчики разные и читать их нужно поразному. Даже если они ездят одинаково.
понятно ---как я понял sensor и есть данные а функция не заработает(((((( И значит все пропало с моей проектиной так необходимой.... надо искать скетчь такого же робота с моим GY-273..... Стлько времени пилил и все зря((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
А если я Вас очень попрошу мне помочь, Вы мне конечно же откажете? Не осилю за 2 недели до моря, а сейчас просто некогда заниматься, жена не в том положении чтобы днями за ардуиной сидеть))) да и жалко все бросать, уже собрал в алюминии огромную фигулину спаял Poe пассивный на 34V и плата спаяна, вся и стабилизацию по гераскопу полностью сделана на мультивие(работает отлично), USB удленитель по витой паре 13 метров с доп питанием спаял, осталось только скетчь залить этот а тут запара такая...
Я откажу? Я вообще никому не отказываю вроде. Просто если я это сделаю за вас, то зачем оно мне? А если вы сами будете разбираться при помощи пинков , то видимо это займет время. Ибо вам уже все написали. Просто нужно брать родную датчикам библиотеку и пользоваться ее методами. В примерах к библиотекам все показано.
Да я ее крутил уже и так и сяк сам по профессии механик и электрик судовой... но электроника и програмирование не мой конек.... вроде начало и концовка там понятно-даже что то сам дописал а вот с датчиком что то я не совсем вкурил(точнее совсем не вкурил) там в принцепе весь пример в начале скетча.... Как я понял там как раз и должна где то храниться переменная которая в продолжении(от другого датчика) имеет название sensor , но даже если ее найти гипотетически, остается функция...которая тоже не совсем понятно...
как я понял вывод ее в монитор
Serial.println(heading); как раз выдает показания с сенсора-значитheading как раз и содержит в моем магнитометре данные которые в том скетче в sensor записаны..... а с другой стороны там есть строка heading = compass.heading(); значит heading присваивается значение с compass.heading а в моем есть просто compass...... короче манная каша из ушей течет а в голове уже пригорает....heading = getHeading(); // вынимаем из показаний величину направление компаса if (abs(heading - sensor)>320) sensor = heading; // отсекаем проблемный переход из 359° в 1° sensor = (int)digitalLowPass(sensor, heading, 0.7); // отфильтровываем показания компаса (сглаживаем) int dif = sensor - dir; // вычисляем разницу между реальным направлением и заданным int absdif = abs(dif); if (absdif <= tol) Stop(); // если разница меньше допустимой погрешности, то останавливаемся else if (((absdif > 180) && (dif != absdif)) || ((absdif < 180) && (dif == absdif))) TurnLeft(); // иначе определяем кратчайшее направление поворота else TurnRight(); if(!digitalRead(XX)) // если на пин XX подали HIGH }поменял на getHeading(); если копаться в библиотеке кажется что там данные магнитометра-в компиляторе проскочило, но что то мне подсказывает что не все так просто и работать не будет, потому как что делать с sensor я так и не вкурил.. ну и дальше начинает на токены ругаться
фиг с ним я сдался!!!!
https://github.com/sleemanj/HMC5883L_Simple
Библиотека и простой пример
Посмотрю сейчас))) хотя я был уже там))
Что там смотреть?
Старую библиотеку удаляем в топку.
качаем эту. Ставим.
открываем пример от нее
там весь пример 5 строчек. Остальные очень подробное обьяснение что каждая строчка делает.
профит
Спасибо)))) буду мучать сейчас)))
библиотека и правда простая совсем все всунул но опять засада
// Reference the I2C Library #include <Wire.h> #include <HMC5883L_Simple.h> #include "I2Cdev.h". HMC5883L_Simple Compass; int error = 0; #define XX 6 // XX подключен к пину 6 #define YY 7 // YY подключен к пину 7 const int step = 10; // шаг приращения const int max = 360; // максимум const int min = 0; // минимум int dir; // переменная, хранящая направлени int IN3 = 5; int IN4 = 4; int ENB = 3; int sensor; // переменная для хранения показания сенсора //int dir = 180; // заданное направление int tol = 20; // допустимая точность удерживания направления float heading; void setup() { Serial.begin(9600); Wire.begin(); Compass.SetDeclination(23, 35, 'E'); Compass.SetSamplingMode(COMPASS_CONTINUOUS); Compass.SetScale(COMPASS_SCALE_130); Compass.SetOrientation(COMPASS_HORIZONTAL_X_NORTH); pinMode(XX, INPUT_PULLUP); // пин подключен напрямую, без резистора, поэтому используем внутреннюю подтяжку pinMode(YY, INPUT_PULLUP); dir = 180; // задаем уставку по умолчанию pinMode (ENB, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); } void loop(){ float heading = Compass.GetHeadingDegrees(); // вынимаем из показаний величину направление компаса if (abs(heading - sensor)>320) sensor = heading; // отсекаем проблемный переход из 359° в 1° sensor = (int)digitalLowPass(sensor, heading, 0.7); // отфильтровываем показания компаса (сглаживаем) int dif = sensor - dir; // вычисляем разницу между реальным направлением и заданным int absdif = abs(dif); if (absdif <= tol) Stop(); // если разница меньше допустимой погрешности, то останавливаемся else if (((absdif > 180) && (dif != absdif)) || ((absdif < 180) && (dif == absdif))) TurnLeft(); // иначе определяем кратчайшее направление поворота else TurnRight(); if(!digitalRead(XX)) // если на пин XX подали HIGH { dir = dir + step; // прибавляем 10 } if(!digitalRead(YY)) // если на пин YY подали HIGH { dir = dir - step; // убавляем 10 } if(dir > max) // проверяем выход за пределы верхней границы { dir = dir - max; } if(dir < min) // проверяем выход за пределы нижней границы { dir = max - dir; } if(dir == max) // корректируем непонятки с 360 и 0 (один и тот же угол) { dir = min; } // delay(25); } // конец основной программы, начинаем все сначала // // Подпрограммы // // Цифровой низкочастотный фильт double digitalLowPass(double last_smoothed, double new_value, double filterVal) { return (new_value * (1 - filterVal)) + (last_smoothed * filterVal); } // Output the data down the serial port. void Output(MagnetometerRaw raw, MagnetometerScaled scaled, float heading, float headingDegrees) { Serial.print("Heading: \t"); Serial.println( heading ); delay(1000); } void Stop(){ // подпрограмма Остановка digitalWrite (IN3, LOW); digitalWrite (IN4, LOW); analogWrite(ENB,0); delay(200); } void TurnRight(){ // подпрограмма Поворот направо digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); analogWrite(ENB,60); delay(200); analogWrite(ENB,100); delay(100); analogWrite(ENB,180); delay(100); analogWrite(ENB,255); delay(100); } void TurnLeft(){ // подпрограмма Поворот налево digitalWrite (IN3, LOW); digitalWrite (IN4, HIGH); analogWrite(ENB,60); delay(200); analogWrite(ENB,100); delay(100); analogWrite(ENB,180); delay(100); analogWrite(ENB,255); delay(100); }компилятор застревает на строчке void Output(MagnetometerRaw raw, MagnetometerScaled scaled, float heading, float headingDegrees)
хотя как я понял мне этот вывод данных и ненужен наверное ну или просто оставить float heading....
ну и опять же в куске
float heading = Compass.GetHeadingDegrees(); // вынимаем из показаний величину направление компаса if (abs(heading - sensor)>320) sensor = heading; // отсекаем проблемный переход из 359° в 1° sensor = (int)digitalLowPass(sensor, heading, 0.7); // отфильтровываем показания компаса (сглаживаем) int dif = sensor - dir; // вычисляем разницу между реальным направлением и заданным int absdif = abs(dif); if (absdif <= tol) Stop(); // если разница меньше допустимой погрешности, то останавливаемся else if (((absdif > 180) && (dif != absdif)) || ((absdif < 180) && (dif == absdif))) TurnLeft(); // иначе определяем кратчайшее направление поворота else TurnRight(); if(!digitalRead(XX)) // если на пин XX подали HIGHесть sensor..... откуда он и за что отвечает?
так то собирается компилятором-но sensor мне покоя не дает
Слушай, ты дебил с рождения или как то экология и все такое?
вот я не могу понять есть библиотека которая возвращает шрадусы к заданому азимуту.
Есть библиотека которая крутит серву на заданый угол.
Накой ьы таскпешь это гавно от робота?
Мне пофигу на твоего робота.
Ладно спасибо и на этом-мне серва не годится только колекторный мотор через драйвер
Да по барабану хоть кривой стартер на пидальном ходу.
взять пример от компаса и пример от драйвера мотора.
Вставить посредине пересчет градусов в количество обротов и вперед.
Накой тут это гавно от робота перепечатывать?
ладно с рейса приду денежка будет найду кого нить чтобы сделали-не мое это програмирование....
спасибо
Типа позову помочь механику делать.
- вот мой план. У меня есть старый тостер и 2 миксера.
- так вот же у тебя новые детали на столе. Все что нужно и дел на 5 минут.
- ага детали клевые. Но вот смотри когда миксер пихаю в тостер, второй тостер искрит
- если ты возмешь на столе это и вот это и добавишь шурупчики..
- класс. Но смотри второй миксер искрит...
- дебил!
- согласен, это не моё, будут деньги, найму механика..
-Facepalm
С тостером,миксером и дизельным двигателем любого размера я бы разобрался на раз два три)) каждый должен делать то что умеет.... не умею нефиг лезть-все спаял собрал а програмиста потом искать буду-чтобы делал то что он умеет)) говорю же не мое... попробовал- не получилось надо брать книгу и сидеть 2-3 недели разбираться-банально времени нет... в принцепе в ардуинку только из за этого проекта и влез,для связи в море надо чтобы не скакать с антеной по палубе-робот этот идеально по функционалу подходит... приду буду искать кто этот скетчь доработает, а пока не буду парить мозг ни себе ни людям... поищу на просторах инета-может найду похожего робота под мое железо, а нет так нет-отложу на пол годика....
С тостером,миксером и дизельным двигателем любого размера я бы разобрался на раз два три)) каждый должен делать то что умеет....
Утер скупую мужскую слезу.
отличное оправдание своей лени и не желанию напрягать мозг.
механик без логического мышления, очень плохой механик.
я если что вообще водитель 45 метровых машин.
С тостером,миксером и дизельным двигателем любого размера я бы разобрался на раз два три)) каждый должен делать то что умеет....
Для того чтобы логически мыслить в той или иной сфере сначала нужны знания-у меня их не хватает в програмировании и набрать их на данном этапе уже не успею... А в механике с избытком....благо опыт есть...
Логика она либо есть, либо нет.
любая программа мало чем отличается от трансмиссии например.
Вся ваша программа уместится в пару десятков строчек..
но вы не хотите даже напрячь мозг и понять как работают 2 примера.
1. Компас
2. Драйвер двигателя
вы вцепились в кусоу чего не прнятного в сотню строк и носитесь как девка размахивая грязными трусами.
как датчик и драйвер работает ясно-а вцепился потому что очень удобно вопервых фильтрация во вторых можно допуск срабатывания(чтобы не крутила туда сюда постоянно а плавно подворачивало когда отклонение и можно с пульта подкручивать меняя переменную.... алгоритм идеально подходит для целей.
Мдааа. Вот бы в мозг научиться фильтрацию некоторым устанавливать.
А если их еще научить думать при этом.. вот бы зажили тогда. . Консерваторий бы настроили... консервы бы вкусные выпускать.
Обнять и плакать. ..
Тоесть библиотека которая уже внутри имеет все эти фильтрации и тупо на выходе выдает градус отклонения от установленой цели это фигня.. главное выкорчеваное гавно из робота...
ну фильтрация ладно а допуски по любому нужны-когда судно на рейсе крутит оно не поступательно двигается а туда сюда при этом сюда больше чем туда за счет этого медленно вращается и если плата отрабатывать будет все подряд мотор долго не проживет ну и крутить с пульта нужно значит нужна именно следящая система за переменной
за библиотеку спасибо реально проще некуда сейчас поищу подобные проекты и потом попробую подсунуть эту библиотеку
Маразм крепчает.
В общем я пасс. Можете дальше заниматься фигней, заместо того что бы просто освоить элементарное програмирование и сляпать элементарный скеч из пары десятков строк.