Программирование

Вопросы по программированию Arduino.

Жиреет скетч

Проект предназначен (в том числе) для обмена с mqtt - брокером, но не суть. Проблема в том что размер скетча подошёл к критическим 30кБ скомпилированного кода, а не реализована ещё наверно половина. Начал разбираться, что за чёрт. Оказалось, что при вызове библиотченых фенкции (в частности PubSubClient) скетч жиреет просто нереально. К примеру во многих местах приходится публиковать данные, что то типа

Adafruit_LEDBackpack и 7-и сегментный индикатор

Задача: как погасить индикатор совсем? Команда смены яркости полностью не выключает. Пин "выбора" IO только запрещает вывод, но ранее выведенное не гасит. Команда clear очищает буфер, но не не гасит также.
class Adafruit_7segment : public Adafruit_LEDBackpack {
 public:
  Adafruit_7segment(void);

Присвоение значений переменным без использования массива

Добрый день!
Есть код возвращающий значение массиву переменных.
Можно ли  присваивать переменным значение в цикле, но без использования массива, если да, то пример.
 

Не едут моторы.

#define lAx 6
#define lDex 7
#define rAx 8
#define rDex 9

#define rPwr 5
#define lPwr 3

byte i;


void setup() {

  pinMode(lAx, OUTPUT);
  pinMode(lDex, OUTPUT);
  pinMode(rAx, OUTPUT);
  pinMode(rDex, OUTPUT);
  pinMode(lPwr, OUTPUT);
  pinMode(rPwr, OUTPUT);

}

void loop() {

  digitalWrite(lDex, 0);
  digitalWrite(rDex, 0);
  digitalWrite(rAx, 1);
  digitalWrite(lAx, 1);
  
   for(i=0;i<120;i+10){

    analogWrite(lPwr, i);
    analogWrite(rPwr, i);
    delay(35);
    
   }

   digitalWrite(rAx, 0);

Mifare Ultralight 7 byte

Здравствуйте, прошу не судить меня строго, сам еще новичёк в Ардуино!

Пишу проект на ардуино, выбрал Arduino Mega2560, хотел сделать чтобы с помощью пассивного тега открывать дверь(в данном случае серво), при этом в программу заранее ввел его UID метку. Но ранее я использовал Mifare 1K(4 byte), проблем с кодом не было. Позже хотел попробовать с новыми метками Mifare Ultralight (7 byte), с кодом проблема. Не знаю как написать чтобы он принял тэг.

Макросы

Проблема следующая!
Пытаюсь подправить библиотеку (CyberLib) чтобы можно было работать с переменными и в цыкле.
 Если с D_In, D_Out, D_High, D_Low и D_Inv все нормально - подстановка происходит, что видно на прилагаемом коде, - то если запросить D_Read - выдает ошибку, хотя делал также как и с остальными.
Вопрос - Почему верхние макросы подставляют значение а последний не хочет.
(Текст Ошибки под макросом)
//Эти 2(два)  макроса работают
#define D_In(x) if(x==10) DDRB &=B11111011;

SDFat для GPS логгера

Пытаюсь реализовать GPS логгер с функцией спидометра. Лог пишется на карту SD в формате GPX. Для работы с картой используется библиотека SDfat, т.к. требуются длинные имена файлов (имя файла - дата и время начала записи трека).

В процессе записи лога требуется в конце каждого цикла записи добавлять завершающие XML-теги (27 символов), чтобы потом файл можно было открыть без ошибки. Каждый последующий цикл записи должен начинаться со смещением на те же 27 символов, но смещения не происходит. Текст, который должен затиратья, дописывается в каждом цикле.

Что означает &buffer[i*4]???

Помогите пожалуйста разобраться, что означает &buffer[i*4]???
Вот функция целиком
 

for (int i=0; i < 4; i++) {
    //data is writen in blocks of 4 bytes (4 bytes per page)
    status = (MFRC522::StatusCode) mfrc522.MIFARE_Ultralight_Write(pageAddr+i, &buffer[i*4], 4);
    if (status != MFRC522::STATUS_OK) {
      Serial.print(F("MIFARE_Read() failed: "));
      Serial.println(mfrc522.GetStatusCodeName(status));
      return;
    }
  }

та же функция...

LED и кнопка

День добрый!
 
В этой программе LED переключается  когда кнопка нажата болье  2 сек.
Есть;
нажимаем кнопку и држим  больше 2 сек LED = ON, нажимаем кнопку снова и держим больше 2 сек  LED = OFF 
Надо;