Страница 1 из 1

ардуино мать её

СообщениеДобавлено: 23 дек 2016 15:26
Vit
есть у нас тут маньяки? if....else

Re: ардуино мать её

СообщениеДобавлено: 23 дек 2016 17:22
pev
Vit писал(а):есть у нас тут маньяки? if....else


Маньяков наверно нет, так любители :hahaha: если условие выполняется, делаем одно, если не выполняется, другое... Что конкретно нужно сделать? Вот вроде доходчиво http://arduino.ua/ru/prog/Else

Re: ардуино мать её

СообщениеДобавлено: 23 дек 2016 17:59
Vit
да это все понятно
считал положение потенциометра присвоил Х;
теперь двигаем пот и пытаемся понять, ускоряемся или замедляемся. вот как это сделать?
не скорость рассчитать от пот, а ускорение-торможение, то есть -1 и 1 , 0 пот стоит мертво.

Re: ардуино мать её

СообщениеДобавлено: 23 дек 2016 21:45
pev
Ну где то так, за достоверность не ручаюсь...

// пины расписаны от балды
// число прибавляемое к х нужно прикинуть, двойку поставил от балды, может будет мало в реале
// переменнику на ось вешаем эксцентрик и устанавливаем в среднее положение
// при движении вперед напряжение на среднем выводе должно увеличиваться, при торможении уменьшаться
#define greenled 8
#define redled 9
#define blueled 10
#define pot A0

void setup(){
pinMode(greenled, OUTPUT); // пин со светодиодом зеленым — выход (ускорение)
pinMode(redled, OUTPUT); // пин со светодиодом красным — выход (торможение)
pinMode(blueled, OUTPUT); // пин со светодиодом синий — выход (стоим на месте)
pinMode(pot, INPUT); // пин с потенциометром - вход
digitalWrite(redled, LOW); // гасим светодиод
digitalWrite(greenled, LOW); // гасим светодиод
digitalWrite(blueled, LOW); // гасим светодиод
}
void loop(){
int x; int y; // объявляем переменную x и y
// считываем напряжение с потенциометра:
// будет получено число от 0 до 1023
// делим его на 4, получится число в диапозоне
// 0-255 (дробная часть будет отброшена)
x = analogRead(pot) / 4;
y=x;
delay(100); // задержка между считываниями для стабильности работы
x = analogRead(pot) / 4;
if (x > y+2){
digitalWrite(greenled, HIGH); // зажигаем зеленый светодиод "ускорение"
}
else if (x < y-2){
digitalWrite(redled, HIGH); // зажигаем крсный светодиод "торможение"
}
else{
digitalWrite(blueled, HIGH); // зажигаем синий светодиод "стоим на месте"
}
delay(1); // задержка между считываниями для стабильности работы
}

Re: ардуино мать её

СообщениеДобавлено: 24 дек 2016 00:04
pev
Нет не правильно, переменную х надо сохранять и потом только сравнивать... завтра подумаю.

Re: ардуино мать её

СообщениеДобавлено: 24 дек 2016 10:28
pev
поправил скетч, внес еще переменную и задержку между проверками напряжения 0,1 с. таким образом проверка 10 раз в секунду будет...
Короче подумал еще немного и получается ерунда и циклы здесь не самая большая проблема. Теоретически если в предыдущем примере вместо х поставить 127, это половина напряжения на переменнике при условии что аппарат стоит, тогда при ускорении и торможении теоретически получается, паузу только нужно подобрать и возможно светодиоды гасить. Но вот что будет если аппарат установили не горизонтально, правильно он будет показывать положение отличное от "стоим". Следовательно "х" нужно периодически проверять и сохранять в памяти и от нее плясать, вопрос на сколько часто ее проверять? Но и это не все, подозреваю что если проверять часто, то получиться при равномерном ускорении программка выдаст что аппарат "стоит", аналогично с торможением... Если проверять не часто можем проморгать начало ускорения или торможения.
Короче обрисуй что делаешь, для чего это надо, может другим способом это можно реализовать...

Re: ардуино мать её

СообщениеДобавлено: 24 дек 2016 11:00
R_S_RUDENKO
Электронную педаль газа?

Re: ардуино мать её

СообщениеДобавлено: 24 дек 2016 17:08
Vit
накидали пока это. повторная проверка не с переменной а с пина.
я думаю что по другому ни как.

/*

номер пина -> A0 (joystick_pin)
*/

const int joystick_pin = A0;
int joystick, joystick_old; // новое и старое значение джойстика
int var = 0; // -1 замедление / 0 ничего не изменилось/ 1 ускорение
void setup() {
//#1
joystick = analogRead(joystick_pin);


}
void loop() {
//#1 5 миллисекунд вычислит. поток 1
static uint32_t past_1 = 0 ;
if (millis() - past_1 >= 5) { // если прошло 5 миллисек
past_1 = millis();
joystick_old = joystick;
joystick = analogRead(joystick_pin);
if (joystick == joystick_old) var = 0;
else if (joystick > joystick_old) var = 1;
else var = -1;
}
}

Re: ардуино мать её

СообщениеДобавлено: 24 дек 2016 17:10
Vit
pev писал(а):Нет не правильно, переменную х надо сохранять и потом только сравнивать... завтра подумаю.

я delay не использую, для меня это критично.
думаю проблема решена.