void loop()
{
// если нажали кнопку и до этого она была не нажата
if(digitalRead(ButtonPin)==HIGH&&ButtonFlag==0)
{
ButtonFlag = 1;
ButtonReleaseTime = 0;
// запоминаем время начатия
ButtonPressTime = millis();
// включаем первый светодиод
digitalWrite(LED1Pin, HIGH);
}
// если кнопку отпустили
if(digitalRead(ButtonPin)==LOW&&ButtonFlag==1)
{
ButtonFlag = 2;
ButtonPressTime = 0;
// запоминаем время отпускания
ButtonReleaseTime = millis();
}
// если кнопка нажата
if(ButtonFlag==1)
{
// ждём заданное время и зажигаем второй светодиод
if(millis() - ButtonPressTime > LED2StartDelay)
digitalWrite(LED2Pin, HIGH);
}
// если отпустили кнопку
if(ButtonFlag==2)
{
// ждем заданное время и гасим первый светодиод
if(millis() - ButtonReleaseTime > LED1StopDelay)
{
digitalWrite(LED1Pin, LOW);
// если второй светодиод еще не успел загореться то флаг в начальное значение сбрасываем
if(digitalRead(LED2Pin)==LOW)
{
ButtonReleaseTime=0;
ButtonFlag=0;
}
}
// ждем заданное время и гасим второй светодиод и сбрасываем флаги
// типа начальное состояние готовы к новому циклы работы
if(millis() - ButtonReleaseTime > LED2StopDelay)
{
digitalWrite(LED2Pin, LOW);
ButtonReleaseTime=0;
ButtonFlag=0;
}
}
}
Puhlyaviy Здравствуйте! опять у меня проблема,вот код
if(digitalRead(LeftBumper)==HIGH)// если сработал левый бампер
{
LeftBumperPressTime = millis(); //запоминаем время включения
vpravo();//поворачиваем направо
delay(300);
}
if(digitalRead(RightBumper)==HIGH)//если сработал правый датчик
{
RightBumperPressTime = millis();// запоминаем время начатия
if(RightBumperPressTime-LeftBumperPressTime <=INTERVAL)//сравниваем
{
vpravo();//поворачиваем направо
delay(300);
}
}
}
это кусочек для левого бампера,тоесть если каснулся левым бампером,поворачивает на право,и если в течении5 секунд косается правым до доворачивает на право,код работает но не правильно,если включил робота и сразу каснулся правого бампера то он и без левого касания доворачивает на право,а после пяти секунд,на правый,без касания левого не реагирует,и еще ели написать аналогично для правого бампера,то получается что попало,работает как попало,что я делаю не так,где я ошибаюсь,вроде все верно должно работать
Во блин. Вы будете убегать как только вам покажется что вы решили что то. А я типа должен помнить о чем там речь шла.
Давайте вы попробуете каждую строчку кода снабдить коментариями , напишете что там делаете и зачем.
Во блин. Вы будете убегать как только вам покажется что вы решили что то. А я типа должен помнить о чем там речь шла. Давайте вы попробуете каждую строчку кода снабдить коментариями , напишете что там делаете и зачем.
Во блин. Вы будете убегать как только вам покажется что вы решили что то. А я типа должен помнить о чем там речь шла. Давайте вы попробуете каждую строчку кода снабдить коментариями , напишете что там делаете и зачем.
вроде все закоментировал
теперь попробуйте нарисовать на листике порядок как это работает сейчас и как это должно работать по вашему замыслу.
я например не вижу причин почему он должен что то делать при касании правым бампером... про это вообще ничего не сказано... исключая начало пока не коснулось левым бампером. там любое касание правым будет всегда меньше интервала...
вы, как и большинство новичков не понимаете что такое алгоритмы... а без понимания садиться за програмирование это будет простое тыканье в небо пальцем..
А попроще нельзя? Просто нужно фиксировать какая кнопка (датчик) нажималась последней и сколько времени прошло с того момента.
Вот именно С ТОГО МОМЕНТА. Нужен фронт, по нему сохраняешь значение millis() в переменную.
millis() - переменная = время с момента нажатия кнопки
А вот это не тоже самое?
Энкодеры на колеса.
Даем газ - не едет, значит уперся в стену, в угол и т.д.
Даем газ в другую сторону.
Если снова не едет, значит встали намертво, зовем на помощь.
(упрощение - проскальзывания колес нет)
вот так собрал,крутится все наооборот, на сигналы срабатывает,но при включении колеса крутятся назад,короче все как попало,вроде правильно собрана
Всем спасибо! За внимание,за помощь,функцию собрал работает как и хотел,вот код может пригодится кому
Всем спасибо! За внимание,за помощь,функцию собрал работает как и хотел
Молодчина! Вот видишь, сам разобрался.
РАБОТАЕ ТЕПЕРЬ ЧЕТКО,ТАМ ГДЕ ЗАСТРЕВАЛ БОЛЬШЕ НЕ ЗАСТРЕВАЕТ,ДЕЛАЕТ ДОВОРОТ И ВЫХОДИТ
РАБОТАЕ ТЕПЕРЬ ЧЕТКО,ТАМ ГДЕ ЗАСТРЕВАЛ БОЛЬШЕ НЕ ЗАСТРЕВАЕТ,ДЕЛАЕТ ДОВОРОТ И ВЫХОДИТ
Да по русски описать не проблема,а вот на си некоторые функции сделать проблема
Поверьте, основная проблама именно в том, чтобы записать. На любом языке. А перевести на любой другой (для нас с русского на С) - никаких проблем.
Энкодеры на колеса.
Даем газ - не едет, значит уперся в стену, в угол и т.д.
Даем газ в другую сторону.
Если снова не едет, значит встали намертво, зовем на помощь.
(упрощение - проскальзывания колес нет)
А при чем здесь энкодеры? Я понимаю, сказали бы "акселерометры"...
А энкодеры Вам ничего не покажут:
Вот характеристики конкретного робота, с которым я сейчас вожусь:
- масса 600г. (0.6кг).
- 2 колеса, диаметр 41 мм (радиус 2.1 см), момент 5 кГс/см,
- по ГОСТ сцепление шины с сухим асфальтом 0.8,
- у нас не асфальт, а паркет, следовательно, сцепление меньше, пусть будет 0.7.
Итого:
максимальная сила трения 0.6х0.7=0.42 кГс,
максимальное усилие на колесах: 2х5/(2.1)=4.76 кГс.
Вывод: при более чем десятикратном запасе колеса будут крутиться вхолостую, преодолевая силу трения.
Примечание: вывод не изменится, даже если мы поставим моторы с минимальным коэффициентом редукции и моментом 1.1 кГс/см.
Puhlyaviy Здравствуйте! опять у меня проблема,вот код
это кусочек для левого бампера,тоесть если каснулся левым бампером,поворачивает на право,и если в течении5 секунд косается правым до доворачивает на право,код работает но не правильно,если включил робота и сразу каснулся правого бампера то он и без левого касания доворачивает на право,а после пяти секунд,на правый,без касания левого не реагирует,и еще ели написать аналогично для правого бампера,то получается что попало,работает как попало,что я делаю не так,где я ошибаюсь,вроде все верно должно работать
Во блин. Вы будете убегать как только вам покажется что вы решили что то. А я типа должен помнить о чем там речь шла.
Давайте вы попробуете каждую строчку кода снабдить коментариями , напишете что там делаете и зачем.
вроде все закоментировал
вроде все закоментировал
теперь попробуйте нарисовать на листике порядок как это работает сейчас и как это должно работать по вашему замыслу.
я например не вижу причин почему он должен что то делать при касании правым бампером... про это вообще ничего не сказано... исключая начало пока не коснулось левым бампером. там любое касание правым будет всегда меньше интервала...
вы, как и большинство новичков не понимаете что такое алгоритмы... а без понимания садиться за програмирование это будет простое тыканье в небо пальцем..