Работа с переменными, помогите

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

  1. ZelGer

    ZelGer Нерд

    Люди есть код

    Код (Text):
    #include <OLED_I2C.h>

    OLED  myOLED(SDA, SCL, 8);

    extern uint8_t BigNumbers[];
    extern uint8_t SmallFont[];


    int switchPin1 = 2;
    int switchPin2 = 3;
    int switchPin3 = 4;
    int switchPin4 = 5;
    int ledPin = 13;

    void setup() {
      Serial.begin(9600);
      pinMode(switchPin1, INPUT);
      pinMode(switchPin2, INPUT);
      pinMode(switchPin3, INPUT);
      pinMode(switchPin4, INPUT);
      pinMode(ledPin, OUTPUT);
      myOLED.begin();
      myOLED.setFont(SmallFont);

    }

    void loop() {
     
      int sek = 30;
      boolean p1 = false;

       
      myOLED.setFont(BigNumbers);
      myOLED.printNumI(sek, CENTER, 20);
      myOLED.update();
       
      Serial.println(p1);
      delay(1000);
     
    }
     

    Нужно чтобы каждую секунду от переменной "sek" отнималось по одному(в начале 30 через секунду 29 еще через секунду 28 и т.д.)

    типа мини таймера
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    sek = sek - 1;
    или
    sek -= 1;
    или
    sek--;
    или
    --sek;
     
  3. vvr

    vvr Инженерище

    Берём пример мигаем без задержек и по аналогии делаем свой счётчик
     
  4. ZelGer

    ZelGer Нерд


    да это я то понимаю но вот пишу это в код а он зараза не работает вот сейчас приведу пример
     
  5. ZelGer

    ZelGer Нерд

    Код (Text):
    #include <OLED_I2C.h>

    OLED  myOLED(SDA, SCL, 8);

    extern uint8_t BigNumbers[];
    extern uint8_t SmallFont[];


    int switchPin1 = 2;
    int switchPin2 = 3;
    int switchPin3 = 4;
    int switchPin4 = 5;
    int ledPin = 13;

    void setup() {
      Serial.begin(9600);
      pinMode(switchPin1, INPUT);
      pinMode(switchPin2, INPUT);
      pinMode(switchPin3, INPUT);
      pinMode(switchPin4, INPUT);
      pinMode(ledPin, OUTPUT);
      myOLED.begin();
      myOLED.setFont(SmallFont);

    }

    void loop() {
     
      int sek = 30;
      boolean p1 = false;
     
     
      if(digitalRead(switchPin1) == HIGH){
     
        sek--;
      }

       
      myOLED.setFont(BigNumbers);
      myOLED.printNumI(sek, CENTER, 20);
      myOLED.update();
       
      Serial.println(sek);
      delay(1000);
     
    }
     
     
  6. ZelGer

    ZelGer Нерд

    типа этого
     
  7. X-Dron

    X-Dron Гик

    У вас sek = 30; создается и инициализируется каждый цикл loop. Естественно ничего не работает.
    Сделайте ее глобальной и в loop уменьшайте на 1
     
  8. ZelGer

    ZelGer Нерд

    Конечно совсем не подумал, спасибо вам огромное :D так бы и мучался
     
  9. geher

    geher Гуру

    Как вариант, можно было объявить как static. Получилось бы то же самое, что и при выносе в глобальные, только с сохранением ограниченной области видимости.