#define obMin 100 //ввести минимальные обороты 1 скорости
#define obMax 3000 //ввести максимальные обороты 1 скорости-
#define obMin1 1000 //ввести минимальные обороты 2 скорости
#define obMax1 12000 //ввести максимальные обороты 2 скорости
// include the library code:
#include <LiquidCrystal.h>
#include <VirtualButton.h>
VButton btn_yellow;
VButton btn_red;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(3,4,5,9,10,11);
//данные для графичесского отображения на экране
byte picture0[8] = {
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000
};
byte picture1[8] = {
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b10000
};
byte picture2[8] = {
0b11000,
0b11000,
0b11000,
0b11000,
0b11000,
0b11000,
0b11000,
0b11000
};
byte picture3[8] = {
0b11100,
0b11100,
0b11100,
0b11100,
0b11100,
0b11100,
0b11100,
0b11100
};
byte picture4[8] = {
0b11110,
0b11110,
0b11110,
0b11110,
0b11110,
0b11110,
0b11110,
0b11110
};
int val ;
boolean tumb =0;// скоростной режим 0 - 1-я скорость(по умолчанию); 1 - 2-я скорость
int tempInt; // 0 - 1023
int tempMapInt; // 0 - 80
int temp1; // 0 - 16
int temp2; // 0 - 5
int var;
int pR; // показания регулятора
int pRR;
int oMax ;
int rev = 1; //положение тумблера реверс
int rev1 = 1; // предидущее положение тумблера реверс
int re;
boolean rew = false;
boolean ctop = false;
int sensorValue;
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0, 0);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
lcd.createChar(0, picture0);
lcd.createChar(1, picture1);
lcd.createChar(2, picture2);
lcd.createChar(3, picture3);
lcd.createChar(4, picture4);
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("SP:");
lcd.print(tumb);
lcd.print(" REV:");
lcd.print(rev);
btn_yellow.poll(!digitalRead(A1));
btn_red.poll(!digitalRead(A2));
sensorValue = analogRead(A0);
val=sensorValue;
if (btn_yellow.held()) {
tumb = !tumb;
lcd.setCursor(3, 0);
lcd.print(tumb);
}
if (tumb) {
pR = map(val, 0, 1023, obMin1, obMax1); //Приводим показания регулятора к минимальным и максимальным оборотам
oMax = obMax1;
}
else {
pR = map(val, 0, 1023, obMin, obMax); //Приводим показания регулятора к минимальным и максимальным оборотам второй скорости
oMax = obMax;
}
lcd_print();
if ((rev==2 || rev ==3)&& btn_red.click()){
rev = 1;
} else if (rev==1&& btn_red.click()){
rev = 2;
}
if (rev ==1 && btn_red.held()){
rev = 3;
}else if (rev ==2 && btn_red.held()){
rev = 1;
}
lcd.setCursor(10,0);
lcd.print(rev);
//delay(200);
//lcd.clear();
}
void lcd_print(){
if (tempInt != val ){
tempInt = val;
lcd.clear();
tempMapInt = map(tempInt, 0, 1023, 0, 50);
temp1 = tempMapInt / 5;
temp2 = tempMapInt - (temp1 * 5);
lcd.setCursor(0, 1);
var = 0;
while (var < temp1)
{
lcd.write(255);
var++;
}
lcd.write(byte(temp2));
lcd.setCursor(13, 0);
lcd.write("RPM"); //в верхней строке будем выводить требуемые обороты
}
lcd.setCursor(11, 1);
lcd.print(map(sensorValue,0,1023,0,oMax));
lcd.print(" ");
}