Лучший симулятор Arduino UnoArduSim V2.8.2 Седьмая серия. Модули I2C матрицы 8*8 пикселей, и модуль Bargraph на 24 пикселя

Здравствуйте!

В этой статье вы найдете примеры кода программ, который использовался в седьмой серии обучающего сериала «Не спали свою Ардуинку».

Пример 1

Данный пример кода использовался для работы с одноцветной матрицей 8 на 8 пикселей, которая симулирует работу модуля HOLTEK16K33, он же HT16K33. Код для Arduino содержит функции для отображения круга, прямоугольника, и стрелки.

Одноцветный модуль матрица 8 на 8 пикселей. Которая симулирует работу модуля HOLTEK16K33, он же HT16K33, от лаборатории RobotClass.


//Начало скетча 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




Пример 2

Этот пример кода использовался для работы с двухцветной матрицей 8 на 8 пикселей. Которая симулирует работу модуля матрицы на микросхеме MUX7219, с называнием Bicolor LED. От первого варианта кода отличается лишь указанием другого объекта, и настройками отображения.

Двухцветный модуль матрица 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




Пример 3

Этот простой пример кода использовался для работы с однорядным модулем на 24 пикселя, который симулирует работу модуля Adafruit LED 24 Bargraph. Задача скетча отобразить 4 пикселя, с разными настройками отображения цвета.

Двухцветный однорядный модуль на 24 светодиода, который симулирует работу модуля Adafruit LED 24 Bargraph


//Начало скетча 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




Пример 4

Данный вариант кода имеет функцию, для модуля Adafruit LED 24 Bargraph, задача которой отображать уровень, относительно положения потенциометра подключенного к аналоговому входу Arduino A0. Такого рода индикатор может использоваться, для индикации нагрузки, или уровня заряда батареи.

Двухцветный однорядный модуль на 24 светодиода, который симулирует работу модуля Adafruit LED 24 Bargraph


//Начало скетча 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






Подробное видео “Лучший симулятор Arduino UnoArduSim V2.8.2 Седьмая серия. Модуль I2C матрица 8*8 пикселей, и Bargraph на 24 пикселя”


 Лучший симулятор Arduino UnoArduSim V2.8.2 Седьмая серия. Модуль I2C матрица 8*8 пикселей, и Bargraph на 24 пикселя.