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

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

Счетчик импульсов, нужен совет.

Требуется посчитать импульсы, обработать их и отправить по mqtt на сервер. Юзать планирую Wemos D1.

Посоветуйте как лучше это сделать, считать по прерыванию или задействовать хардварную 16-тиричную микруху и повесить на 8 входов ее выходы. Осцилограмма сигнала:

Как узнать, что объекта не существует

Имею следующую картину

struct TDevice {
  byte Type;
  byte Device_ID;
};

struct TGate {
  String Key;
  String Model;
  String Sid;
  byte MiDeviceCount = 0;
  TDevice* Device[MAX_DEVICES];
};

соответственно в какой-то момент создается экземпляр TGate и внутри него создаются экземпляры TDevice.

Но может сложить ситуация, что экземпляр TGate есть, а экземпляров TDevice внутри нет. Естественно, обращение к несуществующему объекту приводит к зависанию, как мне отработать такое исключение?

Всегда ли delay () - признак дурного вкуса?

Вопрос чисто академический. Понятно, что использования delay () следует избегать: останавливает выполнение скетча. Но является ли вообще его применение признаком недостаточной образованности программиста (типа "дурной тон" и "правильные пацаны" использовать delay () не должны)? В качестве примера: в своем скетче счел нужным перед выполнением программы проводить кратковременое включение периферии с целью теста ее готовности и исправности (моторы, калпана, индикаторы...).

Сравнения одной переменной!

Привет ребята!
У меня достаточно банальный вопрос на первый взгляд,
но решить я его не могу из-за отсутствия большого опыта с arduino!
Вообщем сама задача, нужно выполнять определенное действия в течении N секунд
только если переменная (потенциометр) изменилась (+ или - ) если нет то продолжать делать другие действия!
Не пойму как сравнить одну переменную с ней же но скажем секундой ранее (предыдущим значением)
Кусок кода отвечающий за это прикладываю, подскажите куда копать! Спасибо

Как оптимизировать код и ускорить работу Arduino?

Всем привет! Имеется скетч, функция которой "Автоматический звонок".

Решил написать все самостоятельно с использованием модуля GPS, RTC, IC2 LCD и силового реле. Звонок не имеет динамики.

Проблема в том, что либо функция loop() работает долго либо где то в говн* коде есть самая вонючая часть, которая работает медленно( Помогите пожалуйста!

P.s Признаюсь! Код реально ужасен...

UART вопрос

Есть 2 скетча

byte v;

void setup() {
    Serial.begin(9600);
    pinMode(BUILTIN_LED, OUTPUT);
}

void loop() {
    if( Serial.available() > 0 ){
        v = Serial.read(); // считываем один байт из UART
        Serial.println(v);
    
    switch (v) {
 case 1:
    digitalWrite(BUILTIN_LED, HIGH); // включаем светодиод
    break;
 case 2:
    digitalWrite(BUILTIN_LED, LOW); // выключаем светодиод
    break;
}
    }
}

и

Объединение сообщений sim900

И снова здравствуйте, форумчане. Возник вопрос, как объединить два сообщения в одно. В скетче есть структура sendsms

smsContent=("T =  "+String(sensors.getTempCByIndex(0)));
smsContent.toCharArray(sendsms,160);

, она отвечает за температуру. Как сделать так, чтобы одним сообщение приходил и текст и температура? строчки sms.sendSms отвечают за отправку двух сообщений, а я бы хотел отправить это одним сообщением. Заранее спасибо!

Переменные постоянно сбрасываются

int sostOsv;
int sostObogrev;

if (input_string=="Off1"){digitalWrite(Rel1, LOW);sms.SendSMS(n1, "Otkluchen svet");memset(n,0,20);sostOsv = 0;}
if (input_string=="Off2"){digitalWrite(Rel2, LOW);sms.SendSMS(n1, "Otkluchen obogrev");memset(n,0,20);flag=1;sostObogrev = 0;}
if (input_string=="On1"){digitalWrite(Rel1, HIGH);sms.SendSMS(n1, "Vkluchen svet");memset(n,0,20);sostOsv = 1;}

Программирование датчика холла на считывание количества оборотов.

Всем здравствуйте.

Сейчас работаю над одним проектом. Необходимо чтобы ардуино считывало количество оборотов стартера с помощью датчика холла.

Примерно вижу, как это можно сделать, то есть переменную в которую буду складываться цифры, то есть сколько раз были сделаны обороты. Подскажите например как управлять датчиком холла, как принимать с него значения и т.д.

Если нечем заняться, то можете мне написать мини программу)

Заранее большое спасибо :)