"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) и дальше распределяется время, такое ощущение что сделал велосипед в велосипеде, за такую возможность спасибо Дэвиду Мелису, но хочется пользоваться всеми возможностясми микроконтроллера,
Хотел этот пост ещё в воскресение написать, но открыл закрепленную тему в песочнице, а там столько всего полезного, за это спасибо всем кто участвовал в наполнении.
Вопрос в том, как сделать перебор выполняемых функций аппаратными средствами с назначением каждой функции своего времени и очереди выполнения.
ничего не понял :( ... как подключить пару кнопок и ими устанавливать таймеры и очередь выполнения?
Так и сделать - подключить нужное кол-во кнопок, каждой кнопке задать свое назначение в каждом пункте меню. Соответственно в момент работы с кнопками менять переменные, которые и будут всем рулить в программе. Для начала написать примитивный код в котором кнопки будут рулить миганием светодиодов т.е. временем мерцания светодиодов или яркостью.