我可以在按钮或模式中的某处以某种方式向该代码添加毫秒数吗?

时间:2019-11-16 11:02:10

标签: arduino arduino-uno arduino-c++

我需要在代码中添加Millis,但是我不知道确切地应该在哪里添加Millis或在正确的地方添加它。因为我仅延迟到现在,您可以帮助我并告诉我可以在哪里实现Millis如果可以在按钮模式或开关盒中或开关盒之后的某个位置添加Millis,因为如果模式正确更改会更好,因为现在更改它们是在正常按下按钮时还是在按下按钮时进行更改两次按此按钮即可切换到下一个模式。我将竭尽所能。

 const int BUTTON_SWITCH = 8;
    const int BUTTON_ALARM = 9;
    const int KNOB = A0;
    const int TEMP = A1;
    const int tempRES = 10000; // the resistance of the NTC at 25'C is 10k ohm
    const int NTC_MATERIAL_CONSTANT = 3950;
    const int RED_LED = 4;
    const int BUZZER = 3;
    int index = 1;
    double value;
    int state = 0;
    unsigned long time_now = 0;
    int period = 1000;
    char incomingOption;
    #include "Display.h"

    void setup() {
      Serial.begin(9600);
      pinMode(BUTTON_SWITCH, INPUT_PULLUP);
      pinMode(BUTTON_ALARM, INPUT_PULLUP);
      pinMode(RED_LED, OUTPUT);
    }

    float get_temperature()
    {
      float temperature, resistance;
      int value;
      value = analogRead(TEMP);
      resistance   = (float)value * tempRES / (1024 - value); // Calculate resistance
      /* Calculate the temperature according to the following formula. */
      temperature  = 1 / (log(resistance / tempRES) / NTC_MATERIAL_CONSTANT + 1 / 298.15) - 273.15;
      return temperature;
    }
    void loop() {
      if (digitalRead(BUTTON_SWITCH) == LOW) {     // button for switching the 3 modes
        index = index + 1;
      }
      if (digitalRead(BUTTON_ALARM) == LOW) {      // button for the alarm
        displayAlarm();
      }
       if (Serial.available()) {
            // Read entire buffer up to newline character
            // Since on the C# side, serialPort1.WriteLine appends a newline character
            String respond = Serial.readStringUntil('\n');
            if (respond == "RESET") {
                digitalWrite(RED_LED, LOW);
                digitalWrite(BUZZER, LOW);
            }
        }
      if (index > 3) {       // when the code is on the last mode press the button to turn back to the first mode
        index = 1;
      }

      get_temperature();
      float celcius;
      celcius = get_temperature();

      if(celcius<16 || celcius>27){        // if the temperature becomes less than 16 degrees or goes higher than 27 degrees turn on the alarm
        displayAlarm();
      }


      switch (index) {
        case 1: displayTime(); break;          // switch between the 3 different modes
        case 2: displayTemp(); break;
        case 3: displayAngle(); break;
      }

    }


    void displayTime() {
      float timer = Serial.parseFloat();   // take the current time from the c# application and display it on the arduino board
      Display.show(timer);
    }

    void displayTemp() {

      float celcius;
      celcius = get_temperature();      // mode for displaying the current temperature
      Display.show(celcius);
    }


    void displayAngle() {
      int value = analogRead(KNOB);  // read and save analog value from the potentionmeter 
      value = map(value, 0, 1023, 0, 30); // Map value 0-1023 to 0-30
      Display.show(value);
    }

    void displayAlarm() {
      Serial.println("Alarm");
      digitalWrite(RED_LED, HIGH);
      tone(BUZZER, 1500, 700);

    }

0 个答案:

没有答案