Разделение вывода значений в COM порт и на ЖК индикатор
- Войдите на сайт для отправки комментариев
Пнд, 11/11/2019 - 17:02
Всем привет, имеется датчик который подключен к плате с контроллером (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);
}
Может кто подскажет как сделать?
Автор кода точно подскажет.