Упрощение скетча.

Тема в разделе "Arduino & Shields", создана пользователем Andrei777, 30 дек 2015.

  1. Andrei777

    Andrei777 Нуб

    Хотелось бы упростить код, если это возможно и привести его так сказать к общему правильному виду. Видел где то статью: "Как упростить скетч" или что то в этом роде и никак не могу ее найти(( Поделитесь информацией пожалуйста.
    Код (C++):
    #include <Bounce.h>
    #include <LiquidCrystal.h>

    LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
    Bounce bouncer = Bounce(7,5);

    byte errCnt = 0;
    byte SEC = 0;
    byte MIN = 0;
    unsigned long prMillis = 0;
    unsigned long startTime;
    unsigned long elapsedTime;
    int analogPin = A0;
    int chargePin = 9;
    int dischargePin = 8;
    int resistorValue = 10000;
    float microFarads;            
    float nanoFarads;

    void setup() {
      pinMode(2, OUTPUT);
      pinMode(chargePin, OUTPUT);  
      digitalWrite(chargePin, LOW);
      lcd.begin(16, 2);
      Serial.begin(9600);
    }

    void capacitor() {
      digitalWrite(chargePin, HIGH);
      startTime = millis();
      while(analogRead(analogPin) < 648)
      {    
        // Ничего не делает до тех пор, пока конденсатор не достигнет 63.2% суммарного напряжения
      }
      elapsedTime= millis() - startTime;
      microFarads = ((float)elapsedTime / resistorValue) * 1000;
      Serial.print(elapsedTime);    
      Serial.print(" mS    ");      
      if (microFarads > 1)
      {
        Serial.print((long)microFarads);    
        Serial.println(" microFarads");      
      }
      else
      {
        nanoFarads = microFarads * 1000.0;  
        Serial.print((long)nanoFarads);      
        Serial.println(" nanoFarads");      
        delay(500);
      }
      digitalWrite(chargePin, LOW);
      pinMode(dischargePin, OUTPUT);
      digitalWrite(dischargePin, LOW);
      while(analogRead(analogPin) > 0)
      {
        // Ничего не делать до тех пор, пока конденсатор разряжается  
      }
      pinMode(dischargePin, INPUT);
    }

    void contactClosure() {
      if (microFarads > 50)
      {
        digitalWrite(2, HIGH);
        delay (500);
      }
      else
      {
       digitalWrite(2, LOW);
      }
    }

    int Errors() {
      if (microFarads > 50) errCnt++;
    }

    void showError() {
        lcd.setCursor(2,2);
        lcd.print(" Errors: ");
        lcd.print(errCnt);
    }
    void tickClock() {
        if (millis() - prMillis > 1000) {
            prMillis = millis();
            SEC++;
            if (SEC > 59) {
                SEC = 0;
                MIN++;
                if (MIN > 59) {
                    MIN = 0;
                }
            }
        }
    }

    void showClock() {
        lcd.setCursor(1,0);
        if (MIN<10) {
            lcd.print("0");
        }
        lcd.print(MIN);
        lcd.print("\xBC\xB8\xBD");
        lcd.print(" : ");
        if (SEC<10) {
            lcd.print("0");
        }
        lcd.print(SEC);
        lcd.print("ce\xBA ");
    }

    void runClock() {
        tickClock();
        showClock();
    }
    void loop() {
      capacitor();
      runClock();
      if (Errors()) {
        showError();
        contactClosure();
      }
    }
     
    Последнее редактирование: 30 дек 2015
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    он и так довольно оптимален.
    Единственное - вот это:
    Код (C++):
    int analogPin = A0;
    int chargePin = 9;
    int dischargePin = 8;
    заменить на
    Код (C++):
    const byte analogPin = A0;
    const byte chargePin = 9;
    const byte dischargePin = 8;
    или на
    Код (C++):
    #define analogPin A0
    #define chargePin 9
    #define dischargePin 8
     
    Andrei777 нравится это.