Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <EEPROM.h>
- #include <MsTimer2.h>
- #include <button.h>
- #include <U8g2lib.h>
- char str[6] = {'3', '0', ' ', 'm', 'l', 0};
- #define button_1 A0
- #define button_2 A1
- #define button_3 A2
- #define button_4 A3
- #define button_5 A6
- #define button_6 A7
- #define IN1 2
- #define IN2 3
- #define angle0 470
- #define angle1 2400
- #define angle2 1975
- #define angle3 1650
- #define angle4 470//1650
- #define angle5 850 //1975
- #define angle6 1225 //2400
- Button encoderA (11, 4);
- Button encoderB (10, 4);
- Button encoderButton(12, 40);
- long pos = 30;
- U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);
- void timerInterrupt() {
- encoderA.filterAvarage();
- encoderB.filterAvarage();
- encoderButton.filterAvarage();
- if ( encoderA.flagClick == true )
- {
- encoderA.flagClick = false;
- if ( encoderB.flagPress == false)
- {
- if (pos > 0)
- pos -= 5;
- }
- else
- {
- if (pos < 75)
- pos += 5;
- }
- EEPROM.write(0, pos);
- }
- }
- boolean but7, but6, but3, but2, but1, but0;
- boolean autoFlag = false;
- void setup() {
- but7 = but6 = but3 = but2 = but1 = but0 = false;
- Serial.begin(9600);
- delay(2000);
- u8g2.begin();
- u8g2.setFlipMode(180);
- pinMode(6, OUTPUT);
- MsTimer2::set(1, timerInterrupt);
- MsTimer2::start();
- ServoWrite(angle4);
- pos = EEPROM.read(0);
- autoFlag = EEPROM.read(1);
- }
- bool check( int x )
- {
- return x < 100 ? 1 : 0;
- }
- void ServoWrite(int an)
- {
- for (int h = 0; h < an / 100; h++)
- {
- digitalWrite(6, HIGH);
- delayMicroseconds(an); // 1450
- digitalWrite(6, LOW);
- delayMicroseconds(20000 - an);
- }
- }
- void razliv1() {
- int flag = 1;
- if (check(analogRead(button_6))) {
- if (but7) {
- ServoWrite(angle1);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_6))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- but7 = false;
- ServoWrite(angle0);
- }
- }
- else
- but7 = true;
- if (check(analogRead(button_5))) {
- if (but6) {
- ServoWrite(angle2);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_5))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- but6 = false;
- ServoWrite(angle0);
- }
- }
- else
- but6 = true;
- if (check(analogRead(button_4))) {
- if (but3) {
- ServoWrite(angle3);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_4))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- but3 = false;
- ServoWrite(angle0);
- }
- }
- else
- but3 = true;
- if (check(analogRead(button_3))) {
- if (but2) {
- ServoWrite(angle4);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_3))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- but2 = false;
- ServoWrite(angle0);
- }
- }
- else
- but2 = true;
- if (check(analogRead(button_2))) {
- if (but1) {
- ServoWrite(angle5);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_2))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- but1 = false;
- ServoWrite(angle0);
- }
- }
- else
- but1 = true;
- if (check(analogRead(button_1))) {
- if (but0) {
- ServoWrite(angle6);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_1))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- but0 = false;
- ServoWrite(angle0);
- }
- }
- else
- but0 = true;
- if (flag == 0) {
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(1450);
- analogWrite(IN1, 0);
- }
- }
- void razliv2() {
- int flag = 1;
- if (check(analogRead(button_6)))
- {
- ServoWrite(angle1);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_6))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- ServoWrite(angle0);
- }
- if (check(analogRead(button_5)))
- {
- ServoWrite(angle2);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_5))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- ServoWrite(angle0);
- }
- if (check(analogRead(button_4)))
- {
- ServoWrite(angle3);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_4))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- ServoWrite(angle0);
- }
- if (check(analogRead(button_3)))
- {
- ServoWrite(angle4);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_3))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- ServoWrite(angle0);
- }
- if (check(analogRead(button_2)))
- {
- ServoWrite(angle5);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st < (155 * pos + 1000 * flag) && check(analogRead(button_2))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- ServoWrite(angle0);
- }
- if (check(analogRead(button_1)))
- {
- ServoWrite(angle6);
- delay(200);
- double st = millis();
- analogWrite(IN1, 0);
- analogWrite(IN2, 255);
- while (millis() - st <= (155 * pos + 1000 * flag) && check(analogRead(button_1))) {
- int progr = round((millis() - st - 1000 * flag) / 155);
- progr = progr < 0 ? 0 : progr;
- str[1] = (progr % 10) + '0';
- str[0] = progr / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- u8g2.drawStr(8, 29, str);
- u8g2.sendBuffer();
- }
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(200);
- analogWrite(IN1, 0);
- delay(100);
- flag = 0;
- ServoWrite(angle0);
- }
- if (flag == 0) {
- analogWrite(IN1, 255);
- analogWrite(IN2, 0);
- delay(1450);
- analogWrite(IN1, 0);
- }
- }
- void loop() {
- if (encoderButton.flagClick == true )
- {
- encoderButton.flagClick = false;
- if (pos == 0 || pos == 75)
- autoFlag = !autoFlag;
- else
- if (!autoFlag)
- razliv2();
- EEPROM.write(1, autoFlag);
- }
- if (autoFlag && pos != 0 && pos != 75)
- razliv1();
- str[1] = (pos % 10) + '0';
- str[0] = pos / 10 + '0';
- u8g2.clearBuffer();
- u8g2.setFont(u8g2_font_logisoso26_tr);
- //u8g2.setFlipMode(180);
- if (pos != 0 && pos != 75)
- u8g2.drawStr(8, 29, str);
- else if (autoFlag)
- u8g2.drawStr(-2, 29, "Auto On");
- else
- u8g2.drawStr(-2, 29, "Auto Off");
- u8g2.sendBuffer();
- Serial.println();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement