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();
}
};
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту (alex@alexgyver.ru)
- Поддержать автора за работу над уроками