проблема с кодом
- Войдите на сайт для отправки комментариев
Сб, 25/10/2014 - 17:55
скомпелировал без ошибок.
но выполняется только одна команда, подскажите, где не прав.
#define Trig 12
#define Echo 11
#define MLa 10
#define MLb 9
#define MRa 8
#define MRb 7
#define LEDPIN 13
long randNumber;
unsigned long time1;
unsigned long time2;
void VPERED ()
{
digitalWrite(MLa,HIGH);
digitalWrite(MRa,HIGH);
}
void LEVO ()
{
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);
}
void PRAVO ()
{
digitalWrite(10,HIGH);
digitalWrite(7,HIGH);
}
void setup()
{
pinMode(Trig, OUTPUT); //инициируем как выход
pinMode(Echo, INPUT); //инициируем как вход
pinMode(MLa, OUTPUT); //выход левого мотора "а"
pinMode(MLb, OUTPUT); //выход левого мотора "б"
pinMode(MRa, OUTPUT); //выход правого мотора "а"
pinMode(MRb, OUTPUT); //выход правого мотора "б"
Serial.begin(9600);
/* задаем скорость общения. В нашем случае с компьютером */
randomSeed(analogRead(0));
}
unsigned int impulseTime=0;
unsigned int distance_sm=0;
unsigned long time;
void loop()
{
time1 = millis();
randNumber = random(10);
digitalWrite(Trig, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(Trig, LOW); // Отключаем
impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm=impulseTime/58; // Пересчитываем в сантиметры
Serial.println(distance_sm); // Выводим на порт
if (distance_sm>= 19) VPERED (); // Если расстояние более 19 сантиметром, включаем блок VPERED
if ((distance_sm<= 19) && (randNumber>=5)) LEVO (); // Если расстояние менее 19 сантиметром, и, случайное число более 5, включаем блок LEVO
if ((distance_sm<= 19) && (randNumber<=5)) PRAVO (); // Если расстояние менее 19 сантиметром, и, случайное число менее 5, включаем блок PRAVO
delay(25);
}
забыл добавить - работает толкь блок VPERED
Там логические ошибки - у вас рано или поздно на всех выходах будет состояние HIGH, потому что вы только устанавливаете высокий уровень и нигде его не снимаете.
Там логические ошибки - у вас рано или поздно на всех выходах будет состояние HIGH, потому что вы только устанавливаете высокий уровень и нигде его не снимаете.
я к этому тоже пришёл. Только дальше идти не могу - подскажите решение проблемы. Сам не справлюсь, я и этот код с других пособирал
Без схемы сложно сказать что там нужно, и каким "сферическими конями в вакуме" вы пытаетесь управлять.
Без схемы сложно сказать что там нужно, и каким "сферическими конями в вакуме" вы пытаетесь управлять.
нужна принципиальная схема? Она у меня на л293д. 2 мотора, УЗ-дальномер. Всё очень просто.
я вот думаю так попробывать
похоже ваше непонимание глубже, чем я предполагал. Вы не правильно управляете данной микросхемой. Почитайте соответвующий материал в интернете например тут http://robocraft.ru/blog/arduino/170.html
Я управлял данной схемой по заданному алгоритму, всё было в порядке, каретка ходила по квадрату.
но как только в коде появилось условие выбора между блоками движения, всё пошло боком.
я с ардуинами не очень хорошо разобрался. это проба пера была.
Добавил в блок задержку
так как же нужно правильно? не криволапо?
Код отладил, работает на ура.
Решил добавить проверку состояния порта, но не понял как это делается.
Допустим, порт ML, находится в состоянии HIGH. Нужно что бы в этот момент А=70.
Есл же ML в состоянии LOW, то А=35.