Показано с 1 по 10 из 26

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Продвинутый
    Регистрация
    28.11.2010
    Возраст
    60
    Сообщений
    241
    Вес репутации
    229

    По умолчанию Генератор работы форсунок инжекторного двигателя

    Создал - работает, но появилось несколько вопросов в программировании.

    1. Есть ли вариант работать по ком-порту в фоновом режиме?
    2. Аналогичный вопрос по работе с WH1602C?
    3. Или как более лучший вариант - генерировать подобные импульсы в фоне?

    В моем варианте забирается время на пересылку данных и оно не постоянно, из-за разного объема пересылки.

    Пожалуйста, ткните носом где почитать или лучше где есть примеры. И еще, если не тяжело поправьте/укажите - где у меня в коде ошибки?

    Вот рабочий вариант и видео с осциллографа. Типа параллельный впрыск.
    PHP код:
     #include <LiquidCrystal.h> 
     
    LiquidCrystal lcd(1211105432);
     
     
    unsigned int pauza0,   // Длительность паузы перед первым впрыском ( мкс )
                  
    vprysk1,  // Длительность импульса первого впрыска ( мкс )
                  
    pauza1,   // Длительность паузы перед вторым впрыском ( мкс )
                  
    vprysk2 // Длительность импульса второго впрыска ( мкс )
    unsigned long pauza2,   // Длительность паузы после второго впрыска ( мкс )
                  
    period ;  // Период работы форсунки ( мкс )
      
    void setup()
    {
        
    pinMode(49OUTPUT); // Строб 
        
    pinMode(50OUTPUT); // Форсунка № 1
        
    pinMode(51OUTPUT); // Форсунка № 2
        
    pinMode(52OUTPUT); // Форсунка № 3
        
    pinMode(53OUTPUT); // Форсунка № 4
      //Serial.begin(115200);
      //lcd.begin(16, 2);
    }

    void loop()
    {
         
    AnalogIn() ;
              
    pauza2 period - ( pauza0 vprysk1 pauza1 vprysk2 1040 ) ;// Вычисление последней паузы
              
    if ( pauza2 pauza2 ;                                    // Не допускаем перекрытия
              
    unsigned int pauzaMs pauza2 1000 ;                            // Длительности последней паузы ( милисекунды )
              
    unsigned int pauzaMk pauza2 - ( pauzaMs 1000 ) ;              // Длительности последней паузы ( микросекунды )
         
    Metka() ;
              
    delayMicroseconds(pauza0);       
         
    ForsOpen() ;         
              
    delayMicroseconds(vprysk1);
         
    ForsClose() ;
              
    delayMicroseconds(pauza1);
         
    ForsOpen() ;
              
    delayMicroseconds(vprysk2);
         
    ForsClose() ;
              
    delay(pauzaMs);
              
    delayMicroseconds(pauzaMk);
       
    //LcdOut() ;
       //SerialOut() ;
    }

    void ForsClose() // Закрытие форсунок
    {
              for (
    int i=5054i++){
              
    digitalWrite(iLOW);
              } 
    }
    void ForsOpen() // Открытие форсунок
    {
              for (
    int i=5054i++){
              
    digitalWrite(iHIGH);
              }
    }
    void SerialOut() // Вывод данных по ком-порту
    {
      
    Serial.print("pauza0="); 
      
    Serial.print(pauza0); 
      
    Serial.print(" vprysk1="); 
      
    Serial.print(vprysk1);
      
    Serial.print(" pauza1="); 
      
    Serial.print(pauza1);
      
    Serial.print(" vprysk2="); 
      
    Serial.print(vprysk2);
      
    Serial.print(" pauza2="); 
      
    Serial.print(pauza2);
      
    Serial.print(" period="); 
      
    Serial.println(period); 
    }
    void LcdOut() // Вывод данных на ЖКИ
    {
        
    lcd.clear();
        
    lcd.setCursor(00);
        
    lcd.print(pauza0);
        
    lcd.setCursor(60); 
        
    lcd.print(vprysk1);
        
    lcd.setCursor(110);
        
    lcd.print(pauza1);
        
    lcd.setCursor(01); 
        
    lcd.print(vprysk2);
        
    lcd.setCursor(81); 
        
    lcd.print(pauza2);
    }
    void AnalogIn() // Чтение задающих параметров с потенциометров
    {
        
    period map (analogRead(0), 0102325000010000) ;      
        
    pauza0 map (analogRead(1), 01023116200) ;
        
    vprysk1 map (analogRead(2), 01023116200) ;          
        
    pauza1 map (analogRead(3), 0102315000) ;
        
    vprysk2 map (analogRead(4), 01023116200) ;
    }
    void Metka() //Стробирующий импульс ( 1 ms )
    {
        
    digitalWrite(49HIGH);
        
    delay(1);            
        
    digitalWrite(49LOW);   

    Если бы еще для каждой форсунки отдельными циклами в фоне, то вообще получил бы наслаждение от изделия.
    Вложения Вложения

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

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

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

Ваши права

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