Здравствуйте!
В этой статье вы найдете примеры кода программ, который использовался в седьмой серии обучающего сериала «Не спали свою Ардуинку».
Данный пример кода использовался для работы с одноцветной матрицей 8 на 8 пикселей, которая симулирует работу модуля HOLTEK16K33, он же HT16K33. Код для Arduino содержит функции для отображения круга, прямоугольника, и стрелки.
//Начало скетча 1
#include "Wire.h"
#include "Adafruit_LEDBackpack.h"
Adafruit_8x8matrix matrix = Adafruit_8x8matrix();
//Функция для вывода круга
void drawCircle(int x0, int y0, int r, int color) {
int fl = 1 - r, d_x = 1, d_y = -2 * r, x = 0, y = r;
matrix.drawPixel(x0 , y0+r, color);
matrix.drawPixel(x0 , y0-r, color);
matrix.drawPixel(x0+r, y0 , color);
matrix.drawPixel(x0-r, y0 , color);
while (x<y) {
if (fl >= 0) { y--; d_y += 2; fl += d_y; }
x++; d_x += 2; fl += d_x;
matrix.drawPixel(x0 + x, y0 + y, color);
matrix.drawPixel(x0 - x, y0 + y, color);
matrix.drawPixel(x0 + x, y0 - y, color);
matrix.drawPixel(x0 - x, y0 - y, color);
matrix.drawPixel(x0 + y, y0 + x, color);
matrix.drawPixel(x0 - y, y0 + x, color);
matrix.drawPixel(x0 + y, y0 - x, color);
matrix.drawPixel(x0 - y, y0 - x, color);
}
}
// функция для вывода прямоугольника
void drawRect(int xx, int yy, int h_, int w_, int color){
for(byte i=0; i<w_; i++){
matrix.drawPixel(xx+i, yy, color); // нижняя линия
}
for(byte i=0; i<w_; i++){
matrix.drawPixel(xx+i, yy+h_-1, color); // верхняя линия
}
for(byte i=0; i<h_; i++){
matrix.drawPixel(xx, yy+i, color); // левая линия
}
for(byte i=0; i<h_; i++){
matrix.drawPixel(xx+w_-1, yy+i, color); // правая линия
}
}
// функция для вывода стрелки
void drawArrow(int xx, int yy, int color){
drawRect(xx,yy+2,1,6,color);
matrix.drawPixel(xx+1, yy+1, color);
matrix.drawPixel(xx+2, yy, color);
matrix.drawPixel(xx+1, yy+3, color);
matrix.drawPixel(xx+2, yy+4, color);
}
void setup() {
matrix.begin(0x70);
drawCircle(4, 4, 3, 1); // функция для вывода круга
matrix.writeDisplay();
delay(1000);
drawRect(3,3,3,3,1); // функция для вывода прямоугольника
matrix.writeDisplay();
delay(1000);
matrix.clear();
drawArrow(0, 0, 1);
matrix.writeDisplay();
}
void loop() {
//matrix.clear();
matrix.drawPixel(0, 0, 1); // функция для вывода точки
matrix.writeDisplay();
delay(500);
matrix.drawPixel(0, 0, 0); // функция для вывода точки
matrix.writeDisplay();
delay(500);
}
//Конец скетча 1
Этот пример кода использовался для работы с двухцветной матрицей 8 на 8 пикселей. Которая симулирует работу модуля матрицы на микросхеме MUX7219, с называнием Bicolor LED. От первого варианта кода отличается лишь указанием другого объекта, и настройками отображения.
//Начало скетча 2
#include "Wire.h"
#include "Adafruit_LEDBackpack.h"
Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix();
//Функция для вывода круга
void drawCircle(int x0, int y0, int r, int color) {
int fl = 1 - r, d_x = 1, d_y = -2 * r, x = 0, y = r;
matrix.drawPixel(x0 , y0+r, color);
matrix.drawPixel(x0 , y0-r, color);
matrix.drawPixel(x0+r, y0 , color);
matrix.drawPixel(x0-r, y0 , color);
while (x<y) {
if (fl >= 0) { y--; d_y += 2; fl += d_y; }
x++; d_x += 2; fl += d_x;
matrix.drawPixel(x0 + x, y0 + y, color);
matrix.drawPixel(x0 - x, y0 + y, color);
matrix.drawPixel(x0 + x, y0 - y, color);
matrix.drawPixel(x0 - x, y0 - y, color);
matrix.drawPixel(x0 + y, y0 + x, color);
matrix.drawPixel(x0 - y, y0 + x, color);
matrix.drawPixel(x0 + y, y0 - x, color);
matrix.drawPixel(x0 - y, y0 - x, color);
}
}
// функция для вывода прямоугольника
void drawRect(int xx, int yy, int h_, int w_, int color){
for(byte i=0; i<w_; i++){
matrix.drawPixel(xx+i, yy, color); // нижняя линия
}
for(byte i=0; i<w_; i++){
matrix.drawPixel(xx+i, yy+h_-1, color); // верхняя линия
}
for(byte i=0; i<h_; i++){
matrix.drawPixel(xx, yy+i, color); // левая линия
}
for(byte i=0; i<h_; i++){
matrix.drawPixel(xx+w_-1, yy+i, color); // правая линия
}
}
// функция для вывода стрелки
void drawArrow(int xx, int yy, int color){
drawRect(xx,yy+2,1,6,color);
matrix.drawPixel(xx+1, yy+1, color);
matrix.drawPixel(xx+2, yy, color);
matrix.drawPixel(xx+1, yy+3, color);
matrix.drawPixel(xx+2, yy+4, color);
}
void setup() {
matrix.begin(0x70);
drawCircle(4, 4, 3, 1); // функция для вывода круга
matrix.writeDisplay();
delay(1000);
drawRect(3,3,3,3,3); // функция для вывода прямоугольника
matrix.writeDisplay();
delay(1000);
matrix.clear();
drawArrow(0, 0, 2);
matrix.writeDisplay();
}
void loop() {
//matrix.clear();
matrix.drawPixel(0, 0, 1); // функция для вывода точки
matrix.writeDisplay();
delay(500);
matrix.drawPixel(0, 0, 0); // функция для вывода точки
matrix.writeDisplay();
delay(500);
}
//Конец скетча 2
Этот простой пример кода использовался для работы с однорядным модулем на 24 пикселя, который симулирует работу модуля Adafruit LED 24 Bargraph. Задача скетча отобразить 4 пикселя, с разными настройками отображения цвета.
//Начало скетча 3
#include "Wire.h"
#include "Adafruit_LEDBackpack.h"
Adafruit_24bargraph matrix = Adafruit_24bargraph();
void setup() {
matrix.begin(0x70);
//matrix.clear();
matrix.setBar(0, 0);
matrix.setBar(1, 1);
matrix.setBar(2, 2);
matrix.setBar(3, 3);
matrix.writeDisplay();
}
void loop() {
}
//Конец скетча 3
Данный вариант кода имеет функцию, для модуля Adafruit LED 24 Bargraph, задача которой отображать уровень, относительно положения потенциометра подключенного к аналоговому входу Arduino A0. Такого рода индикатор может использоваться, для индикации нагрузки, или уровня заряда батареи.
//Начало скетча 4
#include "Wire.h"
#include "Adafruit_LEDBackpack.h"
Adafruit_24bargraph matrix = Adafruit_24bargraph();
int val_buf = 25;
void indicator(int val_i, int green_p, int elow_p){
int px = 0, color_p;
while(px < 24){
if(px < green_p){ color_p = 1;}
if(px >= green_p && px < green_p + elow_p){ color_p = 2;}
if(px >= green_p + elow_p){ color_p = 3;}
if(px >= val_i){ color_p = 0;}
matrix.setBar(px, color_p);
px++;
}
}
void setup() {
matrix.begin(0x70);
}
void loop() {
int val_map = map(analogRead(A0), 0, 1023, 0, 24);
if (val_buf != val_map){
val_buf = val_map;
indicator(val_map, 12, 6);
matrix.writeDisplay();
}
}
//Конец скетча 4