Посмотр рубрик

Примеры и шаблоны

Blink #

Классическое мигание светодиодом для проверки платы:

#include <Arduino.h>
#define LED_PIN LED_BUILTIN

void setup() {
    pinMode(LED_PIN, OUTPUT);
}

void loop() {
    digitalWrite(LED_PIN, HIGH);
    delay(250);
    digitalWrite(LED_PIN, LOW);
    delay(250);
}

Сканер шины I2C #

#include <Arduino.h>
#include <Wire.h>

void setup() {
    Serial.begin(115200);
    Wire.begin();
}

void loop() {
    Serial.println("Begin scan");

    for (uint8_t addr = 1; addr <= 127; addr++) {
        Wire.beginTransmission(addr);
        if (!Wire.endTransmission()) {
            Serial.print("0x");
            Serial.println(addr, HEX);
        }
    }

    Serial.println("End scan");
    Serial.println();
    delay(1000);
}

Шаблон библиотеки I2C устройства #

"Хорошие практики":

  • Передать и хранить ссылку на объект TwoWire для поддержки работы на разных шинах
  • Передать адрес и объект шины в конструкторе
  • Не запускать шину, юзер должен сделать это сам в программе перед вызовом begin()
#pragma once
#include <Arduino.h>
#include <Wire.h>

class DevWire {
   public:
    explicit DevWire(uint8_t address = 0x12, TwoWire& wire = Wire) : _wire(&wire), _addr(address) {}

    bool begin() {
        // тут можно проверить реальный статус устройства
        return isConnected();
    }

    bool isConnected() {
        // тут можно проверить реальный статус устройства
        _wire->beginTransmission(_addr);
        return _wire->endTransmission(true) == 0;
    }

    uint8_t address() const {
        return _addr;
    }

   private:
    TwoWire* _wire;
    uint8_t _addr;
};

Шаблон библиотеки SPI устройства #

"Хорошие практики":

  • Передать и хранить ссылку на объект SPIClass для поддержки работы на разных шинах
  • Передать CS пин в конструкторе. Можно добавить настройку частоты
  • Не запускать шину, юзер должен сделать это сам в программе перед вызовом begin()
  • Корректный порядок begin-endTransaction и управления CS пином для начала и окончания передачи
#pragma once
#include <Arduino.h>
#include <SPI.h>

class DevSPI {
   public:
    explicit DevSPI(uint8_t cs, SPIClass& spi = SPI, uint32_t freq = 8000000UL) : _sett(freq, MSBFIRST, SPI_MODE0), _spi(&spi), _cs(cs) {}

    bool begin() {
        pinMode(_cs, OUTPUT);
        digitalWrite(_cs, HIGH);
        // тут можно проверить реальный статус устройства
        return true;
    }

   private:
    SPISettings _sett;
    SPIClass* _spi;
    uint8_t _cs;

    void _begin() {
        _spi->beginTransaction(_sett);
        digitalWrite(_cs, LOW);
    }

    void _end() {
        digitalWrite(_cs, HIGH);
        _spi->endTransaction();
    }
};

Полезные страницы #


Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Прокрутить вверх