Week 4
This commit is contained in:
17
week4-1/week4-1.ino
Normal file
17
week4-1/week4-1.ino
Normal file
@@ -0,0 +1,17 @@
|
||||
const int LED[] = {11, 10, 9, 8, 7, 6, 5, 4};
|
||||
|
||||
void setup() {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
pinMode(LED[i], OUTPUT);
|
||||
digitalWrite(LED[i], HIGH);
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
static bool clk = 0;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
digitalWrite(LED[i], i % 2 == clk);
|
||||
}
|
||||
delay(250);
|
||||
clk = !clk;
|
||||
}
|
||||
21
week4-2/week4-2.ino
Normal file
21
week4-2/week4-2.ino
Normal file
@@ -0,0 +1,21 @@
|
||||
const int LED[] = {11, 10, 9, 8, 7, 6, 5, 4};
|
||||
|
||||
void setup() {
|
||||
for (int i = 0; i < 9; i++) {
|
||||
pinMode(LED[i], OUTPUT);
|
||||
digitalWrite(LED[i], HIGH);
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
for (int i = 0; i < 9; i++) {
|
||||
digitalWrite(LED[i], LOW);
|
||||
delay(100);
|
||||
digitalWrite(LED[i-2], HIGH);
|
||||
}
|
||||
for (int i = 0; i < 8; i++) {
|
||||
digitalWrite(LED[6-i], LOW);
|
||||
delay(100);
|
||||
digitalWrite(LED[8-i], HIGH);
|
||||
}
|
||||
}
|
||||
25
week4-3/week4-3.ino
Normal file
25
week4-3/week4-3.ino
Normal file
@@ -0,0 +1,25 @@
|
||||
const int LED[] = {11, 10, 9, 8, 7, 6, 5, 4};
|
||||
|
||||
void setup() {
|
||||
for (int i = 0; i < 9; i++) {
|
||||
pinMode(LED[i], OUTPUT);
|
||||
digitalWrite(LED[i], HIGH);
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
digitalWrite(LED[3-i], LOW);
|
||||
digitalWrite(LED[4+i], LOW);
|
||||
delay(100);
|
||||
digitalWrite(LED[3-i], HIGH);
|
||||
digitalWrite(LED[4+i], HIGH);
|
||||
}
|
||||
for (int i = 0; i < 3; i++) {
|
||||
digitalWrite(LED[i], LOW);
|
||||
digitalWrite(LED[7-i], LOW);
|
||||
delay(100);
|
||||
digitalWrite(LED[i], HIGH);
|
||||
digitalWrite(LED[7-i], HIGH);
|
||||
}
|
||||
}
|
||||
130
week4-4/week4-4.ino
Normal file
130
week4-4/week4-4.ino
Normal file
@@ -0,0 +1,130 @@
|
||||
#define DELAY 200
|
||||
|
||||
const int LED[] = {11, 10, 9, 8, 7, 6, 5, 4};
|
||||
const int BUTTON[] = {A0, A1, A2, A3};
|
||||
|
||||
int clk = 0; // 定義每個模式中的計數器
|
||||
|
||||
void setup() {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
pinMode(LED[i], OUTPUT);
|
||||
digitalWrite(LED[i], HIGH);
|
||||
}
|
||||
for (int i = 0; i < 4; i++) {
|
||||
pinMode(BUTTON[i], INPUT);
|
||||
}
|
||||
}
|
||||
|
||||
void call_interval( void (*f)(unsigned int) ) {
|
||||
static unsigned long checkpoint = 0;
|
||||
if (millis() - checkpoint > DELAY) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
digitalWrite(LED[7 - i], !((value >> i) % 2));
|
||||
}
|
||||
clk += 1;
|
||||
checkpoint = millis();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: get_mode
|
||||
* Return the current mode from buttons input
|
||||
*
|
||||
* Side effects: reset the clk on button pressed
|
||||
*/
|
||||
unsigned int get_mode() {
|
||||
static int last = 0;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (!digitalRead(BUTTON[i])) {
|
||||
last = i + 1;
|
||||
clk = 0;
|
||||
return last;
|
||||
}
|
||||
}
|
||||
return last;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: binary
|
||||
* Display the LED as binary of clk
|
||||
*
|
||||
* increase clk per DELAY
|
||||
* Side effect: increase clk per DELAY
|
||||
*/
|
||||
void binary(unsigned int value) {
|
||||
static unsigned long checkpoint = 0;
|
||||
if (millis() - checkpoint > DELAY) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
digitalWrite(LED[7 - i], !((value >> i) % 2));
|
||||
}
|
||||
clk += 1;
|
||||
checkpoint = millis();
|
||||
}
|
||||
}
|
||||
|
||||
void gray_code(unsigned int value) {
|
||||
binary(value ^ (value >> 1));
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: random_popup
|
||||
* Randomly blink LED
|
||||
*
|
||||
* Randomly select LED. Each LED will turn on for 3 clk
|
||||
* Side effect: increase clk per DELAY
|
||||
*/
|
||||
void random_popup() {
|
||||
static unsigned long checkpoint = 0;
|
||||
static int hp[] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
// Reset hp on mode changing
|
||||
if (clk == 0) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
hp[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (millis() - checkpoint > DELAY) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
|
||||
// Decrease hp
|
||||
if (hp[i] > 0) {
|
||||
hp[i] -= 1;
|
||||
}
|
||||
digitalWrite(LED[i], !(hp[i]));
|
||||
}
|
||||
|
||||
// randomly select LED which is not turned on
|
||||
int choice;
|
||||
do {
|
||||
choice = random(8);
|
||||
} while (hp[choice] > 0);
|
||||
hp[choice] = 4;
|
||||
|
||||
checkpoint = millis();
|
||||
clk++;
|
||||
}
|
||||
}
|
||||
|
||||
void clear_all() {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
digitalWrite(LED[i], HIGH);
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
const int mode = get_mode();
|
||||
if (mode == 1) {
|
||||
binary(clk);
|
||||
}
|
||||
if (mode == 2) {
|
||||
gray_code(clk);
|
||||
}
|
||||
if (mode == 3) {
|
||||
random_popup();
|
||||
}
|
||||
if (mode == 4) {
|
||||
clear_all();
|
||||
}
|
||||
delay(1);
|
||||
}
|
||||
Reference in New Issue
Block a user