Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 28
  1. #1
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию Прием в порт по прерыванию

    Скажите, а как принимать в порт ардуины данные по прерыванию?

  2. #2
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Прием в порт по прерыванию

    if (Serial.available()) int inByte = Serial.read();

  3. #3
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию Re: Прием в порт по прерыванию

    Не понял, а прерывание где происходит?

  4. #4
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Прием в порт по прерыванию

    По прерыванию производится запись данных в буфер
    Все это в библиотеке

  5. #5
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию Re: Прием в порт по прерыванию

    Спасибо, но всё равно не понятно............

  6. #6
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Прием в порт по прерыванию

    Так тебе в какой порт нужно serial? или INT0,INT1

  7. #7
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию Re: Прием в порт по прерыванию

    Мне нужно чтоб вот это:

    PHP код:
    //////////////////////////приём байт от компа//////////////////////////////////
    if (Serial.available() > 0//priem ot kompa
     
    {  
      
    int  inByte Serial.read();
      if (
    inByte ==1
        {
          
    pboost 0;
          
    inByte =0;
        }
     } 
    Создавало прерывание, то есть, чтоб таймер как-то слушал RX и если туда что-то прилетело, то вызывается прерывание и принимаются байты!
    Чтобы не пропустить прилетающие байты!!!
    Как-то коряво я объяснил......

  8. #8
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию Re: Прием в порт по прерыванию

    Эдуард, ты вот эту библиотеку имел в виду?
    <NewSoftSerial.h>

  9. #9
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: Прием в порт по прерыванию

    Цитата Сообщение от mebitek Посмотреть сообщение
    Мне нужно чтоб вот это:

    PHP код:
    //////////////////////////приём байт от компа//////////////////////////////////
    if (Serial.available() > 0//priem ot kompa
     
    {  
      
    int  inByte Serial.read();
      if (
    inByte ==1
        {
          
    pboost 0;
          
    inByte =0;
        }
     } 
    Создавало прерывание, то есть, чтоб таймер как-то слушал RX и если туда что-то прилетело, то вызывается прерывание и принимаются байты!
    Чтобы не пропустить прилетающие байты!!!
    Как-то коряво я объяснил......
    Я писал что данные буфферизируются и мимо не пролетят.

  10. #10
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию Re: Прием в порт по прерыванию

    Эдуард посмотри пожалуйста, почему так получается?
    Вот скетч принимающего устройства (Atmega 168), она принимает данные от другой кардуины и выводит их на экран:

    PHP код:
    //#include <SoftwareSerial.h>
    #include <TVout.h>
    #include <fontALL.h>
    TVout TV;
    //SoftwareSerial mySerial(2, 3);
    //int ffff = 0;
    byte serialInArray[8]; 
    int serialCount 0;
    int inByte 0
    int watertemp 0
    int turbo 0;
    int volts 0;
    int pboost 0;
    int result 0;
    void setup() 
     {
      
    TV.begin(PAL,90,40);  // 1 ширина, 2 высота
      
    TV.select_font(font6x8); // 1 ширина, 2 высота
      
    Serial.begin(115200);
      
    // mySerial.begin(57600);
     
    }
    void loop()
     {
     
    // TV.clear_screen(); 
      
    TV.set_cursor(0,6);
      
    TV.print("TMP ");
      
    TV.print(watertemp);
      
    TV.set_cursor(40,6);
      
    TV.println(volts);
      
    TV.set_cursor(0,14);
      
    TV.print("TURBO ");
      
    TV.println(turbo);
      
    TV.set_cursor(0,22);
      
    TV.print("PEAK ");
      
    TV.println(pboost);
      
    TV.set_cursor(0,30);
      
    TV.print("RPM ");
      
    TV.println(result);
      
    //delay(100);
      
    if (Serial.available() > 7//priem ot kompa
       
    {  
        
    inByte Serial.read();
        
    serialInArray[serialCount] = inByte;
        
    serialCount++; 
        if (
    serialCount ==8
         {
            
    watertemp serialInArray[0]; //senstvaz
            
    turbo serialInArray[1]; //kpa
            
    pboost serialInArray[2]; //pboost
            
    volts serialInArray[3]; //volts
            
    result serialInArray[7];
            
    result = (result << 24) | serialInArray[6]; 
            
    result = (result << 16) | serialInArray[5];  
            
    result = (result << 8) | serialInArray[4]; 
            
    serialCount 0;
            
    inByte 0;
            
    Serial.flush();
         }
       }
      
    // delay(10);

    Когда delay(10); закоментировано, данные выводятся нормально в течении 3 минут, после этого начинает показывать всякую чепуху!
    Если delay(10); раскоментировать, то нормально работает только 5 секунд и тоже самое, показания превращаются в хаос из цифр))))
    Из-за чего так? Может это буфер приёмный как-то переполняет память или ещё что-то?
    Если менять скорость порта на меньшую, то всё становится ещё хуже!
    Я почему про буфер подумал, если из скетча залитого в передающие устройство, убрать значительную часть кода (оно же побыстрей станет), то приемное устройство сразу же начинает показывать искажённые данные, без всяких 5 секунд.
    Последний раз редактировалось mebitek; 25.12.2011 в 08:57.

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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