PHP код:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
unsigned int pauza0, // Длительность паузы перед первым впрыском ( мкс )
vprysk1, // Длительность импульса первого впрыска ( мкс )
pauza1, // Длительность паузы перед вторым впрыском ( мкс )
vprysk2 ; // Длительность импульса второго впрыска ( мкс )
unsigned long pauza2, // Длительность паузы после второго впрыска ( мкс )
period ; // Период работы форсунки ( мкс )
void setup()
{
pinMode(49, OUTPUT); // Строб
pinMode(50, OUTPUT); // Форсунка № 1
pinMode(51, OUTPUT); // Форсунка № 2
pinMode(52, OUTPUT); // Форсунка № 3
pinMode(53, OUTPUT); // Форсунка № 4
//Serial.begin(115200);
//lcd.begin(16, 2);
}
void loop()
{
AnalogIn() ;
pauza2 = period - ( pauza0 + vprysk1 + pauza1 + vprysk2 + 1040 ) ;// Вычисление последней паузы
if ( pauza2 < 2 ) pauza2 = 2 ; // Не допускаем перекрытия
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=50; i < 54; i++){
digitalWrite(i, LOW);
}
}
void ForsOpen() // Открытие форсунок
{
for (int i=50; i < 54; i++){
digitalWrite(i, HIGH);
}
}
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(0, 0);
lcd.print(pauza0);
lcd.setCursor(6, 0);
lcd.print(vprysk1);
lcd.setCursor(11, 0);
lcd.print(pauza1);
lcd.setCursor(0, 1);
lcd.print(vprysk2);
lcd.setCursor(8, 1);
lcd.print(pauza2);
}
void AnalogIn() // Чтение задающих параметров с потенциометров
{
period = map (analogRead(0), 0, 1023, 250000, 10000) ;
pauza0 = map (analogRead(1), 0, 1023, 1, 16200) ;
vprysk1 = map (analogRead(2), 0, 1023, 1, 16200) ;
pauza1 = map (analogRead(3), 0, 1023, 1, 5000) ;
vprysk2 = map (analogRead(4), 0, 1023, 1, 16200) ;
}
void Metka() //Стробирующий импульс ( 1 ms )
{
digitalWrite(49, HIGH);
delay(1);
digitalWrite(49, LOW);
}
Если бы еще для каждой форсунки отдельными циклами в фоне, то вообще получил бы наслаждение от изделия.