• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
programowanie
#1
proszę o pomoc przy kodzie.
diody wliczając i wyłączają się przyciskiem a jak chciałbym jeszcze oprócz tego by wyłączały sie po upływie określonego czasu 30s. wysylam kod
dzieki
Kod:
/*
Monkfish's LED stair lights (proof of concept)
*/

 //LED pin assignments
 int led1 = 2;
 int led2 = 3;
 int led3 = 4;
 int led4 = 5;
 int led5 = 6;
 int led6 = 7;
 int led7 = 8;
 int led8 = 9;
 int led9 = 10;
 int led10 = 22;
 int led11 = 23;
 int led12 = 24;
 int led13 = 25;
 int led14 = 26;
 
 // button pin assignments
 int b_up = 11; //button at bottom of stairs
 int b_down = 12; //button at top of stairs

 //LED delay settings
 int tOn = 400; //LED On delay
 int tOff = 750; //LED Off delay
 int del = 0; //Delay after action (used for debugging - set to 500-1000 to introduce a delay between each action)
 
 //variables
 static unsigned activeup = 0; //whether the system is active going upwards
 static unsigned activedown = 0; //whether the system is active going downwards
 
void setup() { //make with the setups
 
 //Set Serial
 Serial.begin(9600);
 Serial.println("");
 Serial.println("Activated");
 delay(del);
 
 //Set LED pins as output
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 pinMode(led5, OUTPUT);
 pinMode(led6, OUTPUT);
 pinMode(led7, OUTPUT);
 pinMode(led8, OUTPUT);
 pinMode(led9, OUTPUT);
 pinMode(led10, OUTPUT);
 pinMode(led11, OUTPUT);
 pinMode(led12, OUTPUT);
 pinMode(led13, OUTPUT);
 pinMode(led14, OUTPUT);
 
 
 //Set button pins as input
 pinMode(b_up, INPUT_PULLUP);
 pinMode(b_down, INPUT_PULLUP);
 
 Serial.println("Pins set");
 delay(del);
 
 //Clear variables
 int activedown = 0;
 int activeup = 0;
 
 //Print variables to Serial
 Serial.print("active up: ");
 Serial.println(activeup);
 Serial.print("active down: ");
 Serial.println(activedown);
 delay(del);
 
 Serial.println("Variables set");
 delay(del);
 
 Serial.println("");
 Serial.println("Ready");
}


void loop() {  //forever in your loopings
     
     //Set variables based on pin state
     int up = digitalRead(b_up);
     int down = digitalRead(b_down);
   
     Serial.print("active up: ");
     Serial.println(activeup);
     Serial.print("active down: ");
     Serial.println(activedown);
     delay(del);
   
 if (up == LOW){ //Bottom button pressed
   
     Serial.println("Bottom button pressed!");
     delay(del);
     
     //Set variables
     Serial.print("active up: ");
     Serial.println(activeup);
     Serial.print("active down: ");
     Serial.println(activedown);
     delay(del);
     
         if (activeup == 1 || activedown == 1){ //checks if system active
               
               //If active
               Serial.println("System active!");
               delay(del);
               
               OffDown(); //function call
                       
         } else {
           
           //if not active            
           Serial.println("System activated (up)");
           delay(del);
     
           OnUp(); //function call
           
         }
     
     
 }
   
 if (down == LOW){
     
     Serial.println("Top button pressed");
     delay(del);
     
     Serial.print("active up: ");
     Serial.println(activeup);
     Serial.print("active down: ");
     Serial.println(activedown);
     delay(del);
     
     if (activeup == 1 || activedown == 1){
           
               Serial.println("System active!");
               delay(del);
               
               OffUp(); //function call
                       
         } else  {
       
           Serial.println("System activated (down)");
           delay(del);
     
           OnDown(); //function call
           
         }
     
 }

       
}

void OnUp(){ //Switches lights on going up
 
 Serial.println("Switching on lights (up)");
              delay(del);
             
              //set LEDs on in turn
              digitalWrite(led1, HIGH);
              delay(tOn);
              digitalWrite(led2, HIGH);
              delay(tOn);
              digitalWrite(led3, HIGH);
              delay(tOn);
              digitalWrite(led4, HIGH);
              delay(tOn);
              digitalWrite(led5, HIGH);
              delay(tOn);
              digitalWrite(led6, HIGH);
              delay(tOn);
              digitalWrite(led7, HIGH);
              delay(tOn);
              digitalWrite(led8, HIGH);
              delay(tOn);
              digitalWrite(led9, HIGH);
              delay(tOn);
              digitalWrite(led10, HIGH);
              delay(tOn);
              digitalWrite(led11, HIGH);
              delay(tOn);
              digitalWrite(led12, HIGH);
              delay(tOn);
              digitalWrite(led13, HIGH);
              delay(tOn);
              digitalWrite(led14, HIGH);
             
              activeup = 1; //Set system as active up
             
              Serial.print("active up: ");
              Serial.println(activeup);
              Serial.print("active down: ");
              Serial.println(activedown);
              delay(del);
             
              Serial.println("System now active (up)");
              delay(del);
                             
} //end OnUp

void OffUp(){ //switches lights off going up
 
        Serial.println("Switching lights off (Up)");
        delay(del);
         
       
        //sets LEDs off in turn
        digitalWrite(led1, LOW);
        delay(tOff);
        digitalWrite(led2, LOW);
        delay(tOff);
        digitalWrite(led3, LOW);
        delay(tOff);
        digitalWrite(led4, LOW);
        delay(tOff);
        digitalWrite(led5, LOW);
        delay(tOff);
        digitalWrite(led6, LOW);
        delay(tOff);
        digitalWrite(led7, LOW);
        delay(tOff);
        digitalWrite(led8, LOW);
        delay(tOff);
        digitalWrite(led9, LOW);
        delay(tOff);
        digitalWrite(led10, LOW);
        delay(tOff);
        digitalWrite(led11, LOW);
        delay(tOff);
        digitalWrite(led12, LOW);
        delay(tOff);
        digitalWrite(led13, LOW);
        delay(tOff);
        digitalWrite(led14, LOW);
       
        //set system as being off
        activeup = 0;
        activedown = 0;
       
        Serial.print("active up: ");
        Serial.println(activeup);
        Serial.print("active down: ");
        Serial.println(activedown);
        delay(del);
       
        Serial.println("System not active");
        delay(del);
       
} //End OffUp

void OnDown(){ //switches lights on going down
 
        Serial.println("Switching lights on (down)");
        delay(del);
             
        //set LEDs on in turn
        digitalWrite(led14, HIGH);
        delay(tOn);
        digitalWrite(led13, HIGH);
        delay(tOn);
        digitalWrite(led12, HIGH);
        delay(tOn);
        digitalWrite(led11, HIGH);
        delay(tOn);
        digitalWrite(led10, HIGH);
        delay(tOn);
        digitalWrite(led9, HIGH);
        delay(tOn);
        digitalWrite(led8, HIGH);
        delay(tOn);
        digitalWrite(led7, HIGH);
        delay(tOn);
        digitalWrite(led6, HIGH);
        delay(tOn);
        digitalWrite(led5, HIGH);
        delay(tOn);
        digitalWrite(led4, HIGH);
        delay(tOn);
        digitalWrite(led3, HIGH);
        delay(tOn);
        digitalWrite(led2, HIGH);
        delay(tOn);
        digitalWrite(led1, HIGH);
       
        activedown = 1; //sets system as active down
       
        Serial.print("active up: ");
        Serial.println(activeup);
        Serial.print("active down: ");
        Serial.println(activedown);
        delay(del);
       
        Serial.println("System now active (down)");
        delay(del);
 
} //End OnDown

void OffDown(){ //switches lights off going down
 
      Serial.println("Switching lights off (down)");
      delay(del);      
     
      //sets LEDs off in turn
      digitalWrite(led14, LOW);
      delay(tOff);
      digitalWrite(led13, LOW);
      delay(tOff);
      digitalWrite(led12, LOW);
      delay(tOff);
      digitalWrite(led11, LOW);
      delay(tOff);
      digitalWrite(led10, LOW);
      delay(tOff);
      digitalWrite(led9, LOW);
      delay(tOff);
      digitalWrite(led8, LOW);
      delay(tOff);
      digitalWrite(led7, LOW);
      delay(tOff);
      digitalWrite(led6, LOW);
      delay(tOff);
      digitalWrite(led5, LOW);
      delay(tOff);
      digitalWrite(led4, LOW);
      delay(tOff);
      digitalWrite(led3, LOW);
      delay(tOff);
      digitalWrite(led2, LOW);
      delay(tOff);
      digitalWrite(led1, LOW);
     
      //set system as not active
      activedown = 0;
      activeup = 0;
     
      Serial.print("active up: ");
      Serial.println(activeup);
      Serial.print("active down: ");
      Serial.println(activedown);
      delay(del);
     
      Serial.println("System not active");
      delay(del);    


 
}//End OffDown
 
Odpowiedź
#2
Przerób kurs https://forbot.pl/blog/kursy , do zarządzania czasem możesz wykorzystać funkcje millis(), jak zastąpisz wszystkie delay konstrukcjami opartymi na millis to może Ci się udać.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości