На Arduino можно довольно интересный проект начального уровня — цифровые игральные кости. При помощи которых можно генерировать случайное число от 1 до 6.
Сборка проекта на макетной плате
Поместите 6 светодиодов на макетную плату, как показано на рисунке. Они должны располагаться на рейке E с двумя промежутками между каждым светодиодом. Вы должны поместить конец анода (длинный конец) светодиода в первое из двух мест, а конец катода (короткий конец) во второе место. Поместите концы светодиодного анода в ряды 3, 7, 11, 15, 19 и 23.
Поместите кнопку на макетную плату, как показано на рисунке. Левая сторона должна входить в рельс E, места 59 и 61, а правая сторона должна входить в рельс F, места 59 и 61.
Далее подключаем резистор на 220 Ом к минусовому выводу светодиода. Также к кнопки подключаем вывод в 1 кОм.
Далее подключаем светодиоды к выводам 2,3,4,5,6,7 на Arduino именно в такой последовательности, чтобы светодиоды загорались именно в такой последовательности. А кнопка подключается к выводу 12.
Скетч программ
#define DEBUG 0
// 6 consecutive digital pins for the LEDs
int first = 2;
int second = 3;
int third = 4;
int fourth = 5;
int fifth = 6;
int sixth = 7;
// pin for the button switch
int button = 12;
// value to check state of button switch
int pressed = 0;
void setup() {
// set all LED pins to OUTPUT
for (int i=first; i<=sixth; i++) {
pinMode(i, OUTPUT);
}
// set buttin pin to INPUT
pinMode(button, INPUT);
// initialize random seed by noise from analog pin 0 (should be unconnected)
randomSeed(analogRead(0));
// if we're debugging, connect to serial
#ifdef DEBUG
Serial.begin(9600);
#endif
}
void buildUpTension() {
// light LEDs from left to right and back to build up tension
// while waiting for the dice to be thrown
// left to right
for (int i=first; i<=sixth; i++) { if (i!=first) { digitalWrite(i-1, LOW); } digitalWrite(i, HIGH); delay(100); } // right to left for (int i=sixth; i>=first; i--) {
if (i!=sixth) {
digitalWrite(i+1, LOW);
}
digitalWrite(i, HIGH);
delay(100);
}
}
void showNumber(int number) {
digitalWrite(first, HIGH);
if (number >= 2) {
digitalWrite(second, HIGH);
}
if (number >= 3) {
digitalWrite(third, HIGH);
}
if (number >= 4) {
digitalWrite(fourth, HIGH);
}
if (number >= 5) {
digitalWrite(fifth, HIGH);
}
if (number == 6) {
digitalWrite(sixth, HIGH);
}
}
int throwDice() {
// get a random number in the range [1,6]
int randNumber = random(1,7);
#ifdef DEBUG
Serial.println(randNumber);
#endif
return randNumber;
}
void setAllLEDs(int value) {
for (int i=first; i<=sixth; i++) {
digitalWrite(i, value);
}
}
void loop() {
// if button is pressed - throw the dice
pressed = digitalRead(button);
if (pressed == HIGH) {
// remove previous number
setAllLEDs(LOW);
buildUpTension();
int thrownNumber = throwDice();
showNumber(thrownNumber);
}
}
Полезные ссылки по проекту
Видео
Похожие записи
На Arduino можно довольно интересный проект начального уровня - цифровые игральные кости. При помощи которых можно генерировать случайное число от 1 до 6. ...
Системы заземления, используемые для выполнения заземления. Среди критериев, способствующих обеспечению защиты от такого процесса, как поражение электричеством, особого внимания...
В Европе для маркировки кабеля используются свои стандарты и нормативные документы. Чтобы расшифровать маркировку импортного кабеля, необходимо знать, что обозначает конкретная...
Сервопривод (servo) - устройство с электрическим мотором, которому можно задать определенный угол поворота и зафиксировать в определенном положении. Подключение сервопривода к Arduino очень...
Представленная схема полицейской мигалки на микроконтроллере и светодиодах может работать в 16 различных режимах. Режим выбирается при помощи одной кнопки, и собрана на микроконтроллере...
Функция setup() вызывается первой когда запускается скетч. Эта функция необходима для инициализации переменных, настройки режимов работы портов (выводов), для старта каких либо функций...