Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 10.09.2017, 22:21  
AVRkin
Прописка
 
Аватар для AVRkin
 
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
AVRkin на пути к лучшему
По умолчанию как сюда прикрутить прерывания?

Код:
#include ‹IRremote.h›
IRsend irsend;

int RECV_PIN = 3;//1
IRrecv irrecv(RECV_PIN);
decode_results results;

int enableA = 5;
int MotorA1 = 6;
int MotorA2 = 7;

int enableB = 8;
int MotorB1 = 9;
int MotorB2 = 10;
int Dword;
int flag = 0; //8 forw 2back 4 left 6right
int flagst = 0;

void setup() {
  Serial.begin (9600);
  irrecv.enableIRIn();
  pinMode (enableA, OUTPUT);
  pinMode (MotorA1, OUTPUT);
  pinMode (MotorA2, OUTPUT);
  pinMode (enableB, OUTPUT);
  pinMode (MotorB1, OUTPUT);
  pinMode (MotorB2, OUTPUT);
  Forward (1);
  stop();
}
void en() {
  Serial.print ("En -  ");
  digitalWrite (enableA, HIGH);
  digitalWrite (enableB, HIGH);
}


void stop() {
  Serial.println ("  - St");
  digitalWrite (enableA, LOW);
  digitalWrite (enableB, LOW);
  digitalWrite (MotorA1, LOW);
  digitalWrite (MotorA2, LOW);
  digitalWrite (MotorB1, LOW);
  digitalWrite (MotorB2, LOW);
}

void Forward (int a) {
  Serial.print ("Forward");
  flag = 8;
  digitalWrite (MotorA1, LOW); //A Forward
  digitalWrite (MotorA2, HIGH); //A Forward
  digitalWrite (MotorB1, LOW); //B Forward
  digitalWrite (MotorB2, HIGH);  //B Forward
  en();
  delay (a);
  //  stop();
}

void Backward (int a) {
  flag = 2;
  Serial.print ("backward");
  digitalWrite (MotorA1, HIGH); //A Backward
  digitalWrite (MotorA2, LOW); //A Backward
  digitalWrite (MotorB1,  HIGH); //B Backward
  digitalWrite (MotorB2, LOW); //B Backward
  en();
  delay (a);
  // stop();
}

void left(int a) {
  flag = 4;
  Serial.print ("left");
  digitalWrite (MotorA1, LOW); //A Forward
  digitalWrite (MotorA2, HIGH); //A Forward
  digitalWrite (MotorB1,  HIGH); //B Backward
  digitalWrite (MotorB2, LOW); //B Backward
  en();
  delay (a);
  // stop();
}

void right(int a) {
  flag = 6;
  Serial.print ("right");
  digitalWrite (MotorA1, HIGH); //A Backward
  digitalWrite (MotorA2, LOW); //A Backward
  digitalWrite (MotorB1, LOW); //B Forward
  digitalWrite (MotorB2, HIGH);  //B Forward
  en();
  delay (a);
  // stop();
}
void loop() {


  Dword = Serial.read();

  if (Dword == 'w') {
    Forward (100);
  }
  if (Dword == 's') {
    Backward (100);
  }
  if (Dword == 'a') {
    left(100);
  }
  if (Dword == 'd') {
    right(100);
  }

  if (irrecv.decode(&results)) //this checks to see if a code has been received
  { Serial.println(results.value, HEX);

    if (results.value == 0xFFAA55)  {
      Forward (1); flag = 8;
    }
    if (results.value == 0xFFE01F)  {
      Backward (1); flag = 2;
    }
    if (results.value == 0xFF7A85)  {
      left(1); flag = 4;
    }
    if (results.value == 0xFFA05F)  {
      right(1); flag = 6;
    }
    if (results.value == 0xFF609F)  {
      stop();
    }

    if (results.value == 0xFFFFFFFF)  {
      if (flag == 8) {
        Forward (100);
      }
      if (flag == 2) {
        Backward (1);
      }
      if (flag == 4) {
        left(1);
      }
      if (flag == 6) {
        right(1);
      }
    }
    //else {stop();}
    irrecv.resume(); //receive the next value
  }
  delay(100);
}
это робот, принимает сигнал с 5 кнопок ИК пульта и вращает колесами.

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

TSOP подключен к 3 выводу, на котором есть прерывание int1_vect но я не нашел инфорнмацию как им пользоваться.
Реклама:
__________________
Самое главное умение - умение радоваться жизни.
AVRkin вне форума  
Непрочитано 10.09.2017, 22:27  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,375
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: как сюда прикрутить прерывания?

Бугога. Ты походу в низком уровне ваще не шаришь?
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 10.09.2017, 22:31  
AVRkin
Прописка
 
Аватар для AVRkin
 
Регистрация: 07.09.2014
Сообщений: 136
Сказал спасибо: 18
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
AVRkin на пути к лучшему
По умолчанию Re: как сюда прикрутить прерывания?

Сообщение от индюк Посмотреть сообщение
Бугога. Ты походу в низком уровне ваще не шаришь?
нет) я только под винду раньше писал, вот пытаюсь разобраться...
__________________
Самое главное умение - умение радоваться жизни.
AVRkin вне форума  
Непрочитано 11.09.2017, 07:06  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: как сюда прикрутить прерывания?

"Сюда" лучше ничего не прикручивать. Но если вдруг решите заняться изучением С, мы постараемся помочь.
Easyrider83 вне форума  
Непрочитано 11.09.2017, 11:45  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: как сюда прикрутить прерывания?

Попробуйте почитать про работу с прерываниями у Ардуино вообще:
http://robocraft.ru/blog/arduino/45.html

Но в целом - я присоединяюсь к Easyrider83 с рекомендацией переходить на более Си.
-Alan- вне форума  
Непрочитано 11.09.2017, 12:30  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: как сюда прикрутить прерывания?

Там всю работу в прерывании надо переделать на флаги, а в основной программе по ним и управлять двигателями. Только обработку таймера добавить для интервала между посылками с пульта.
Собственно даже не углубляясь сильно - переделать совсем не сложно (но только если один раз).
А вот совет о чтении и усвоении соответствующей литературы при необходимости не один раз сие делать - это таки самое первое…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 11.09.2017, 12:54  
OakRidge
Почётный гражданин KAZUS.RU
 
Аватар для OakRidge
 
Регистрация: 16.05.2015
Адрес: Болгария
Сообщений: 1,460
Сказал спасибо: 286
Сказали Спасибо 1,125 раз(а) в 540 сообщении(ях)
OakRidge на пути к лучшему
По умолчанию Re: как сюда прикрутить прерывания?

Вроде нечто такое должно быть. Может и угадал
Со скобками {} и ; Вам разбиратся
Код:
  if (irrecv.decode(&results)) //this checks to see if a code has been received
  { Serial.println(results.value, HEX);
  }
    
---------------------------------------------------------
 if (results.value == 0xFFFFFFFF)  {
	  Stop();

  else  { 
	  if (results.value == 0xFFAA55)  {
     	      Forward (1);
                }
    	  if (results.value == 0xFFE01F)  {
                  Backward (1); 
               }
              if (results.value == 0xFF7A85)  {
                  Left(1); 
               }
              if (results.value == 0xFFA05F)  {
              Right(1);
               }
        }

    irrecv.resume(); //receive the next value
---------------------------------------------------------
  }
  delay(100);
}
OakRidge вне форума  
Непрочитано 12.09.2017, 11:54  
Predator_r
Временная регистрация
 
Регистрация: 17.12.2008
Адрес: Спб
Сообщений: 96
Сказал спасибо: 19
Сказали Спасибо 25 раз(а) в 20 сообщении(ях)
Predator_r на пути к лучшему
По умолчанию Re: как сюда прикрутить прерывания?

перво наперво надо определиться в каком случае должно(ы) возникать прерывание(я)
это могут быть таймеры, внешние сигналы, сигналы от периферии ...

потом разобрать программу на 3 части (хотя-бы в словесно-структурном виде):
1) инициализация всего (то, что должно отработать 1 раз при включении)
2) обработка прерываний (то, что должно выполняться при событиях)
3) основная программа (то, что работает, пока не возникло прерывание, очень часто тут может вообще ничего не быть)

далее из п.2 вытечет обработчик(и) прерывания(ний)
ну а там разобраться с компилятором на тему того, как их (обработчики) навесить и включить.
Predator_r вне форума  
Непрочитано 13.09.2017, 10:30  
-vitalik-
Вид на жительство
 
Аватар для -vitalik-
 
Регистрация: 29.03.2009
Адрес: Бровары, Украина
Сообщений: 326
Сказал спасибо: 1,397
Сказали Спасибо 82 раз(а) в 46 сообщении(ях)
-vitalik- на пути к лучшему
По умолчанию Re: как сюда прикрутить прерывания?

Задействуйте таймер, что бы интервал прерывания чуть превышал время между командами повтора.
Командой повтора или движения - сбрасываете таймер.
По прерыванию от таймера - делайте СТОП.
Обычно, интервал между повторами составляет 100мс.
Вложения:
Тип файла: pdf Протоколы IR.pdf (217.9 Кб, 0 просмотров)
-vitalik- вне форума  
Сказали "Спасибо" -vitalik-
MisterDi (19.09.2017)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
STM32F4 discovery не срабатывают прерывания по I2C Kopranych ARM 10 29.11.2016 20:56
AT89C5131 прием и передача данных по USB rihkov AVR 14 15.11.2012 08:16
PIC16 TMR0 и TMR2 Slava-martyn Микроконтроллеры, АЦП, память и т.д 10 06.12.2011 01:58
Прерывания PIC milssky Микроконтроллеры, АЦП, память и т.д 12 10.10.2010 13:31
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17


Часовой пояс GMT +4, время: 17:49.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot