roboforum.ru

Технический форум по робототехнике.


Упрощение кода

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Упрощение кода

Сообщение abramonromka » 17 мар 2020, 16:40

Добрый день, форумчане. У меня такая задача: необходимо создать несколько устройств на МК, датчике вибрации/наклона, светодиоде и батарейке (таблетка). Каждое должно светиться по своему. Написал код для МК ATTiny13 (может найду что на замену, но пока она подходит больше всего). Задача всех устройств после удара или движения - светодиод начинает моргать, как только устройство вернули в состояние покоя (положили на стол, например) светодиод поморгал ещё 5 секунд и выключился. Начнёт моргать опять только когда устройство снова приведут в движение (возьмут в руки, ударят, кинут).

Пробное устройство я уже собрал, (пульсирующий) всё работает исправно, но память ATTiny13 1Кб, этот код вышел на 564 б, соответственно если я захочу его усложнить, то 1 Кб может не хватить. А так же МК потребляет повышенный ток постоянно.

Собственно прошу Вас помочь упростить код (если это возможно) и, что самое главное, помочь с режимами МК, чтобы увеличить время работы от батарейки.

Заранее Вас благодарю!

Код: Выделить всёРазвернуть
int vib = 4;
int led = 0;
long loopTime = 5000;

void setup() {
    pinMode(led, OUTPUT);
    pinMode(vib, INPUT);
}

void loop()
{
    if (digitalRead(vib)){
        unsigned long currentMillis = millis();
        while(millis()-currentMillis<=loopTime) {
            for(int fadeValue = 0; fadeValue <=255; fadeValue+=5) {
                 analogWrite(led,fadeValue);
                 delay(2);
            }
            for(int fadeValue = 255; fadeValue >=0; fadeValue-=5) {
                 analogWrite(led,fadeValue);
                 delay(2);
            }
            for(int fadeValue = 0; fadeValue <=255; fadeValue+=5) {
                  analogWrite(led,fadeValue);
                  delay(2);
             }
             for(int fadeValue = 255; fadeValue >=0; fadeValue-=5) {
                  analogWrite(led,fadeValue);
                  delay(2);
             }
             digitalWrite(led, LOW);
             delay(600);
        }
    }
}
abramonromka
 
Сообщения: 2
Зарегистрирован: 17 мар 2020, 16:35

Re: Упрощение кода

Сообщение sergey2x » 18 мар 2020, 10:48

sergey2x
 
Сообщения: 235
Зарегистрирован: 14 янв 2015, 16:18
Откуда: СПб

Re: Упрощение кода

Сообщение Romikgy » 18 мар 2020, 11:58

уйти от среды разработки ардуино .. писать на си или асм , использовать режимы энергосбережения, с просыпанием от прерывания
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: Упрощение кода

Сообщение abramonromka » 18 мар 2020, 14:47

sergey2x писал(а):Посмотри в строну замены функций arduino на прямую работу с портами.
Пример: http://codius.ru/articles/%D0%A2%D1%8E%D0%BD%D0%B8%D0%BD%D0%B3_Arduino_%D0%B8%D0%BB%D0%B8_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%83_%D0%BF%D0%BB%D0%B0%D1%82%D1%8B


Спасибо большое, изучу.

Добавлено спустя 27 секунд:
Romikgy писал(а):уйти от среды разработки ардуино .. писать на си или асм , использовать режимы энергосбережения, с просыпанием от прерывания

Спасибо большое за совет. Попробую.
abramonromka
 
Сообщения: 2
Зарегистрирован: 17 мар 2020, 16:35


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17