"Hello World", динамическая индикация.
- Войдите на сайт для отправки комментариев
Здравствуйте, arduino появилась в моей жизни где то в августе и захватила мой мозг, до этого совсем чуть чуть дружил с пояльником, с прогрмированием практически не имел дела..
В целях обучения и постижения основ сваял вот это:
Так как жалко было кучу портов задействовать под один единственный индикатор воспользовался сдвиговыми регистрами 74hc595, схема наверное стандартная, подсмотрел в сети
То что получилось можно увидеть на видео https://youtu.be/oTOUlNb5dws
Если смешно, смейтесь на здоровье, прошу сильно не пинать и вобще любить и жаловать, ето творение назвал Crony
#define SCLK_C 4 // пины ардуино для подключения Cronee
#define RCLK_C 3
#define DIO_C 2
unsigned long timer0; //Переменная для работы таймера
unsigned long timer1; //Переменная для работы таймера
unsigned long TiMer; //Переменная для работы таймера
int NUMBER = 0; //Счетчик для определения номера ячейки в столбце массива symbol[][]
int NUMBER1 = 0; //Переменная для хранения значения 1го разряда
int NUMBER2 = 0; //Переменная для хранения значения 2го разряда
int NUMBER3 = 0; //Переменная для хранения значения 3го разряда
int column = 20; //Количество столбцов массива
int line = 0; //Переменная для выбора строки из массива
int funct = 0; //Выбор функции (режима работы)
int del = 1000; //Интервалл переключения индикатора
byte other = 0b00000000; //Дополнительный байт, позволяет
//модифицировать байт отправляемый
//на порт DIO и сдвиговый регистр
// маска для 7 сигментного индикатора
const byte symbol[5][20] = { // Перфокарта o_O
{
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b01110110, // H
0b01111001, // E
0b00111000, // L
0b00111000, // L
0b00111111, // O
0b00000000, //
0b00000100, // i
0b01010100, // n +
0b01010100, // n = m %)
0b00000000, //
0b00111001, // C
0b01010000, // r
0b01011100, // o
0b01010100, // n
0b01111011, // e
0b01111011, // e
}, {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111, // 9
0b00000000, // пробел
0b00000001, // a //каждый сегмент в отдельности
0b00000010, // b
0b00000100, // c
0b00001000, // d_
0b00010000, // e
0b00100000, // f
0b01000000, // g-
0b10000000, // h.
}, {
//Cronee
0b01100011, //"o_o"
0b01000001, //"=_="
0b01000000, //"-_-"
0b01000011, //">_>"
0b01100001, //"<_<"
0b00000001, //"-high -"
0b00001000, //"_"_
0b01001000, //"="_
0b01011100, //"o"_
0b01000000, //"-"_
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
}, {
//"animaciya"
0b00000000, // пробел
0b00000001, // a
0b00000010, // b
0b00000100, // c
0b00001000, // d_
0b00010000, // e
0b00100000, // f
0b01000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000, //
}, {
// arduino
0b00000000, //
0b00000000, // пробел
0b01000000, //
0b01100011, //
0b01011100, //
0b01100100, //
0b01010010, //
0b01101101, //
0b01111111, //
0b00000000, //
0b00000000, //
0b01110111, //
0b01010000, //
0b01011110, //
0b00011100, //
0b00000100, //
0b01010100, //
0b01011100, //
0b00000000, //
0b00000000, //
}
};
const byte chr[3] = { // маска для разряда 0, 1, 2
0b00000110, //100
0b00000101, //010
0b00000011, //001
//0b00000000, //111
//0b00000111, //000
};
//********************
boolean lock = 0;
int valueT = 418;
int valueTt = 1;
void setup() {
// put your setup code here, to run once:
pinMode(RCLK_C, OUTPUT);
pinMode(SCLK_C, OUTPUT);
pinMode(DIO_C, OUTPUT);
//Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (valueTt == 155) { // Пеореодическое включение приветствия
lock = 0;
valueTt = 1;
}
if (lock == 0) {
//TimeMachine();
if (millis() - timer1 > 100) {
TiMer = TiMer + 1;
if (TiMer == 578) TiMer = 1;
timer1 = millis();
}
}
if (lock == 1) {
//TimeMachine();
if (millis() - timer1 > 100) {
valueT++;
TiMer = valueT;
if (TiMer == 578) valueT = 418;
timer1 = millis();
}
}
//Выделятор интервалов времени
if (TiMer >= 3 && TiMer <= 40) funct = 0;
if (TiMer == 41) NUMBER = 0;
if (TiMer >= 42 && TiMer <= 224) funct = 1;
if (TiMer == 225) NUMBER = 0;
if (TiMer >= 225 && TiMer <= 417) funct = 2;
if (TiMer == 418) lock = 1; // Отключение приветствия
if (TiMer >= 418 && TiMer <= 444) funct = 3;
if (TiMer >= 445 && TiMer <= 555) funct = 4;
if (TiMer >= 556 && TiMer <= 577) funct = 5;
if (TiMer == 577) valueTt++;
//Serial.println(valueTt);
if (millis() - timer0 >= del) { // Таймер
timer0 = millis();
if (funct == 0) { //Переключатель
randomCatcher();
}
if (funct == 1) {
arduino();
}
if (funct == 2) {
HelloWorld();
}
if (funct == 3) {
Anymation();
}
if (funct == 4) {
Cronee();
}
if (funct == 5) {
Anymation();
}
}
int NUMBERS[3] = { // Массив масок каждого разряда
NUMBER1,
NUMBER2,
NUMBER3,
};
int i;
for (i = 0; i <= 2; i++) {
digitalWrite(RCLK_C, LOW); // открываем защелку
shiftOut(DIO_C, SCLK_C, MSBFIRST, chr[i]); // включаем разряд
shiftOut(DIO_C, SCLK_C, MSBFIRST, symbol[line][NUMBERS[i]] + other); //Отправляем байт-маску на вход регистра
digitalWrite(RCLK_C, HIGH); // защелкиваем регистры
delay(1);
}
}
void Cronee() {
line = 2;
del = random(700, 3000); //Случайное время изменения индикации
other = symbol[4][0]; //Включаем "-" на всех разрядах
int EYES = random(0, 5); //Случайная маска 0-5 столбец
int MOUTH = random (6, 9);//Случайная маска 6-9 столбец
NUMBER1 = EYES;
NUMBER2 = MOUTH;
NUMBER3 = EYES;
}
void randomCatcher() {
// Счетчик
del = 100;
other = symbol[4][0]; //Включаем "-" на всех разрядах
line = 1; //Выбор линии из массива с символами
NUMBER1 = random(20);
NUMBER3 = random(20);
NUMBER2 = random(20);
}
void HelloWorld() {
//Эффект бегущей строки, N >> N1 >> N2 >> N3
del = 1000;
line = 0; //Выбор линии из массива с символами
other = symbol[4][0]; //Включаем "-" на всех разрядах
NUMBER = NUMBER + 1;
// Получаем маски для каждого разряда
// смещающиеся справа налево
// (визуально, на индикаторе :)
if (NUMBER >= column) NUMBER = 0;
NUMBER1 = NUMBER;
NUMBER2 = NUMBER1 + 1;
if (NUMBER2 == column) NUMBER2 = 0;
NUMBER3 = NUMBER2 + 1;
if (NUMBER3 == column) NUMBER3 = 0;
}
void arduino() {
//Эффект бегущей строки, N >> N1 >> N2 >> N3
del = 1000;
line = 4; //Выбор линии из массива с символами
other = symbol[4][0]; //Включаем "-" на всех разрядах
NUMBER = NUMBER + 1;
// Получаем маски для каждого разряда
// смещающиеся справа налево
// (визуально, на индикаторе :)
if (NUMBER >= column) NUMBER = 0;
NUMBER1 = NUMBER;
NUMBER2 = NUMBER1 + 1;
if (NUMBER2 == column) NUMBER2 = 0;
NUMBER3 = NUMBER2 + 1;
if (NUMBER3 == column) NUMBER3 = 0;
}
void Anymation() {
//Анимация, 6 сегментов загораются и гаснут по очереди,
//создавая эффект движения по кругу
line = 3;
del = 78;
other = symbol[1][17]; //Включаем "-" на всех разрядах
NUMBER = NUMBER + 1;
if (NUMBER >= 7) NUMBER = 1;
//На все разряды выводим одинаковую маску
NUMBER1 = NUMBER;
NUMBER2 = NUMBER;
NUMBER3 = NUMBER;
}
Вопрос в том, как сделать перебор выполняемых функций аппаратными средствами с назначением каждой функции своего времени и очереди выполнения, у меня это делает счетчик (строки 162-178) и дальше распределяется время, такое ощущение что сделал велосипед в велосипеде, за такую возможность спасибо Дэвиду Мелису, но хочется пользоваться всеми возможностясми микроконтроллера,
Хотел этот пост ещё в воскресение написать, но открыл закрепленную тему в песочнице, а там столько всего полезного, за это спасибо всем кто участвовал в наполнении.


Вопрос в том, как сделать перебор выполняемых функций аппаратными средствами с назначением каждой функции своего времени и очереди выполнения.
ничего не понял :( ... как подключить пару кнопок и ими устанавливать таймеры и очередь выполнения?
Так и сделать - подключить нужное кол-во кнопок, каждой кнопке задать свое назначение в каждом пункте меню. Соответственно в момент работы с кнопками менять переменные, которые и будут всем рулить в программе. Для начала написать примитивный код в котором кнопки будут рулить миганием светодиодов т.е. временем мерцания светодиодов или яркостью.