Разделение вывода значений в COM порт и на ЖК индикатор

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

Всем привет, имеется датчик который подключен к плате с контроллером (Atmega 328). Показания этого датчика выдаются на 1) ЖК индикатор и 2) в com порт одновременно. Ед я хочу чтобы в ком порте выдавались показания в течение скажем 35 секунд, а потом только по нажатию клав ввод, а на ЖК индикаторе шли непрерывно показания. Код написан, но только в ком порт выдается как и задумано, а вот значения на ЖК инд. показываются только первые 35 сек. Может кто подскажет как сделать?

 

#include <LiquidCrystal.h>
#include <TroykaMQ.h>

#define analogMQ7  A0 // Пин к которому подключен датчик (A0)
#define PIN_MQ7_HEATER  13 //Пин к которому подключен нагреватель

MQ7 mq7(analogMQ7);
//float analogMQ7 = A0;             // Пин к которому подключен A0

int highLevel = 2;     // значение выше 2 ppm
int val;
int i; 
long loopTime=35000; // 35 seconds
int ledPin = 6; 
int speak = 7;
 LiquidCrystal disp(9, 8, 5, 4, 3, 2); // создаем объект
////////////////////////////////////////
void setup()
{
  Serial.begin (9600);
  Serial.println("Разогрев..."); // Печать текста "Разогрев"
  Serial.println("Измерение...");
  pinMode(ledPin, OUTPUT);
  pinMode(speak, OUTPUT);
  disp.begin(16, 2);  // инициализируем дисплей 2 строки по 16 символов
  disp.print("Warming up");
 delay(10000);
  disp.setCursor(0, 2);
  disp.print("Test string");
 delay(5000);
  disp.clear();
  disp.home();//установка курсора в вехний левый угол
  disp.print("Please wait...");
    
  disp.noDisplay();// выключаем дисплей
  delay(500);
   disp.display();// включаем дисплей
      delay(500);
  disp.noDisplay();// выключаем дисплей
  delay(500);
   disp.display();// включаем дисплей
     delay(500);
      disp.noDisplay();// выключаем дисплей
  delay(500);
   disp.display();// включаем дисплей
    delay(500);
    disp.noDisplay();// выключаем дисплей
  delay(500);
   disp.display();// включаем дисплей
    delay(500);
    disp.noDisplay();// выключаем дисплей
  delay(500);
   disp.display();// включаем дисплей
      delay(500);
      disp.noDisplay();// выключаем дисплей
  delay(500);
   disp.display();// включаем дисплей
     delay(500);
 disp.clear();
  mq7.cycleHeat();
  }
  
void loop()
{  
  if (!mq7.isCalibrated() && mq7.atHeatCycleEnd()) 
       {
        mq7.calibrate();// выполняем калибровку датчика на чистом воздухе
      
        mq7.cycleHeat();  // запускаем термоцикл
       }
       if (mq7.isCalibrated() && mq7.atHeatCycleEnd())
      {          
        mq7.cycleHeat(); // запускаем термоцикл
      }
     /////////////////////////////////////////////
        val = mq7.readCarbonMonoxide();  
        
        
      Serial.print("CO(gas) = ");
      Serial.print(mq7.readCarbonMonoxide());
      Serial.println(" ppm");
                    if (val >=highLevel){
                     Serial.println("danger");
                    delay(1000);  
                    }
                    else
                    {
                      Serial.println("Safely");
                     delay(1000);
                    }
   unsigned long currentMillis = millis();
   while (millis()>=loopTime)
         
///////////////////////////////////////////
    
      for ( i = 0; i <= i; i ++)
      {
      while(!Serial.available()>0);
     
      Serial.print("CO(gas) = ");
      Serial.print(mq7.readCarbonMonoxide());
      Serial.println(" ppm");
            if (val >=highLevel){
            Serial.println("danger");
              }
       else
              {
                 Serial.println("Safely");
                  } 
                  Serial.parseInt();
               }
 
////////////////////////////////////////////
                
 
   mq7.cycleHeat();
  val = mq7.readCarbonMonoxide();
  disp.setCursor(0, 0);
            
              if (val >= highLevel){
              
              digitalWrite(ledPin, HIGH); //включение светодиода
    
    digitalWrite(speak, HIGH);
    delay(1000);
    digitalWrite(speak, LOW);
    delay(1000);
    tone(speak, 1000, 1000);
    disp.setCursor(0, 2);  // печатаем вторую строку
    disp.print("Danger");
    mq7.cycleHeat();
             }
           else
           {
            digitalWrite(ledPin, LOW);  
            disp.setCursor(0, 2);  // печатаем вторую строку
            disp.print("Safely"); 
            mq7.cycleHeat();
           }
            // сдвигаем на 13 позиций (длина строки) влево
   for (int positionCounter = 0; positionCounter < 16; positionCounter++)
   {
    // сдвиг на одну позицию
    disp.scrollDisplayLeft();
    //delay(200);//Пока не ясно нужно ли ставить эту задержку
       }
   disp.display();
   disp.setCursor(0, 0);  // печатаем вторую строку
 //disp.autoscroll();  // включаем автопрокрутку
   disp.print("CO(Gas)=");
   disp.print(mq7.readCarbonMonoxide());
   disp.print(" ppm");
   //disp.setCursor(0, 1);  // печатаем вторую строку
   //disp.print("Safely");
   delay(100);
            }

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Pavel_1282 пишет:

Может кто подскажет как сделать?

Автор кода точно подскажет.