On branch main
Your branch is up to date with 'origin/main'. Changes to be committed: modified: README.md new file: examples/SIK_Circuit_1A-Blink/SIK_Circuit_1A-Blink.ino new file: examples/SIK_Circuit_1B-Potentiometer/SIK_Circuit_1B-Potentiometer.ino new file: examples/SIK_Circuit_1C-Photoresistor/SIK_Circuit_1C-Photoresistor.ino new file: examples/SIK_Circuit_1D-RGBNightlight/SIK_Circuit_1D-RGBNightlight.ino new file: examples/SIK_Circuit_2A-Buzzer/SIK_Circuit_2A-Buzzer.ino new file: examples/SIK_Circuit_2B-DigitalTrumpet/SIK_Circuit_2B-DigitalTrumpet.ino new file: examples/SIK_Circuit_2C-SimonSays/SIK_Circuit_2C-SimonSays.ino new file: examples/SIK_Circuit_3A-Servo/SIK_Circuit_3A-Servo.ino new file: examples/SIK_Circuit_3B-DistanceSensor/SIK_Circuit_3B-DistanceSensor.ino new file: examples/SIK_Circuit_3C-MotionAlarm/SIK_Circuit_3C-MotionAlarm.ino new file: examples/SIK_Circuit_4A-LCDHelloWorld/SIK_Circuit_4A-LCDHelloWorld.ino new file: examples/SIK_Circuit_4B-TemperatureSensor/SIK_Circuit_4B-TemperatureSensor.ino new file: examples/SIK_Circuit_4C-DIYWhoAmI/SIK_Circuit_4C-DIYWhoAmI.ino new file: examples/SIK_Circuit_5A-MotorBasics/SIK_Circuit_5A-MotorBasics.ino new file: examples/SIK_Circuit_5B-RemoteControlRobot/SIK_Circuit_5B-RemoteControlRobot.ino new file: examples/SIK_Circuit_5C-AutonomousRobot/SIK_Circuit_5C-AutonomousRobot.ino new file: library.properties new file: src/SIK.h
This commit is contained in:
parent
35e1115a5c
commit
0cf48bdc8d
19 changed files with 1654 additions and 2 deletions
197
examples/SIK_Circuit_4C-DIYWhoAmI/SIK_Circuit_4C-DIYWhoAmI.ino
Normal file
197
examples/SIK_Circuit_4C-DIYWhoAmI/SIK_Circuit_4C-DIYWhoAmI.ino
Normal file
|
@ -0,0 +1,197 @@
|
|||
/*
|
||||
SparkFun Inventor’s Kit
|
||||
Circuit 4C - Heads Up Game
|
||||
|
||||
This is a DIY version of the popular Heads Up party game. To play, one person resets the RedBoard and holds the LCD
|
||||
facing away from them so that they cannot see it (usually on their forehead). The display will show a short countdown
|
||||
then display random words. The other player(s) who can see the screen must yell out clues until time runs out or the player
|
||||
guesses what word is on the screen. If they guess correctly, they can press the button on the breadboard and another word
|
||||
will be displayed.
|
||||
|
||||
This sketch was written by SparkFun Electronics, with lots of help from the Arduino community.
|
||||
This code is completely free for any use.
|
||||
|
||||
View circuit diagram and instructions at: https://learn.sparkfun.com/tutorials/sparkfun-inventors-kit-experiment-guide---v41
|
||||
Download drawings and code at: https://github.com/sparkfun/SIK-Guide-Code
|
||||
*/
|
||||
|
||||
#include <LiquidCrystal.h> //the liquid crystal library contains commands for printing to the display
|
||||
LiquidCrystal lcd(13, 12, 11, 10, 9, 8); // tell the RedBoard what pins are connected to the display
|
||||
|
||||
int buttonPin = 2; //pin that the button is connected to
|
||||
int buzzerPin = 6; //pin for driving the buzzer
|
||||
int buttonPressTime = 0; //variable to show how much time the player has left to guess the word (and press the button)
|
||||
|
||||
long timeLimit = 15000; //time limit for the player to guess each word
|
||||
long startTime = 0; //used to measure time that has passed for each word
|
||||
int roundNumber = 0; //keeps track of the roundNumber so that it can be displayed at the end of the game
|
||||
const int arraySize = 25;
|
||||
|
||||
const char* words[arraySize] = {"moose", "beaver", "bear", "goose", "dog", "cat", "squirrel", "bird", "elephant", "horse",
|
||||
"bull", "giraffe", "seal", "bat", "skunk", "turtle", "whale", "rhino", "lion", "monkey",
|
||||
"frog", "alligator", "kangaroo", "hippo", "rabbit"
|
||||
};
|
||||
|
||||
// the start value in the sequence array must have a value that could never be an index of an array
|
||||
// or at least a value outside the range of 0 to the size of the words array - 1; in this case, it can't be between 0 to 24
|
||||
int sequence[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}; //start with an array full of -1's
|
||||
|
||||
void setup() {
|
||||
|
||||
pinMode(buttonPin, INPUT_PULLUP); //set the button pin as an input
|
||||
|
||||
lcd.begin(16, 2); //tell the LCD library the size of the screen
|
||||
|
||||
generateRandomOrder(); //generate an array of random numbers from 0 to 24 that will determine which order the words are shown in
|
||||
|
||||
showStartSequence(); //print the start sequence text
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
for (int i = 0; i < arraySize; i++) { //for each of the 25 words in the sequence
|
||||
|
||||
lcd.clear(); //clear off the array
|
||||
|
||||
roundNumber = i + 1; //the array starts at 0, but the roundNumber will start counting from 1
|
||||
lcd.print(roundNumber); //print the roundNumber (this is the current round number)
|
||||
lcd.print(": "); //spacer between the number and the word
|
||||
lcd.print(words[sequence[i]]); //print a random word from the word array
|
||||
|
||||
startTime = millis(); //record the time that this round started
|
||||
|
||||
while (digitalRead(buttonPin) == HIGH) { //do this until the button is pressed...
|
||||
|
||||
int roundedTime = round((timeLimit - (millis() - startTime)) / 1000); //calculate the time left in the round (dividing by 1000 converts the number to seconds
|
||||
lcd.setCursor(14, 1); //set the cursor in the lower right corner of the screen
|
||||
lcd.print(" ");
|
||||
lcd.setCursor(14, 1); //set the cursor in the lower right corner of the screen
|
||||
lcd.print(roundedTime); //print the time left in the time limit
|
||||
delay(15);
|
||||
|
||||
if (millis() - startTime > timeLimit) { //if the time limit is up before the button is pressed
|
||||
gameOver(); //end the game
|
||||
}
|
||||
|
||||
if (digitalRead(buttonPin) == LOW) {
|
||||
tone(buzzerPin, 272, 10); //emit a short beep when the button is pressed
|
||||
}
|
||||
|
||||
} //exit this loop when the button is pressed
|
||||
|
||||
delay(500); //delay for a moment before going onto the next round, so that the button press doesn't get registered twice
|
||||
|
||||
}
|
||||
//if you finish all 25 words
|
||||
winner(); //show the you win message
|
||||
}
|
||||
|
||||
|
||||
//--------------FUNCTIONS------------------------------
|
||||
|
||||
//DISPLAYS A COUNTDOWN TO START THE GAME
|
||||
void showStartSequence() {
|
||||
|
||||
lcd.clear(); //clear the screen
|
||||
|
||||
lcd.setCursor(0, 0); //move the cursor to the top left corner
|
||||
lcd.print("Category:"); //print "Category:"
|
||||
|
||||
lcd.setCursor(0, 1); //move the cursor to the bottom left corner
|
||||
lcd.print("Animals"); //print "Animals:"
|
||||
|
||||
delay(2000); //Wait 2 seconds
|
||||
|
||||
lcd.clear(); //clear the screen
|
||||
lcd.print("Get ready!"); //print "Get ready!"
|
||||
delay(1000); //wait 1 second
|
||||
|
||||
lcd.clear(); //clear the screen
|
||||
lcd.print("3"); //print "3"
|
||||
delay(1000); //wait 1 second
|
||||
|
||||
lcd.clear(); //clear the screen
|
||||
lcd.print("2"); //print "3"
|
||||
delay(1000); //wait 1 second
|
||||
|
||||
lcd.clear(); //clear the screen
|
||||
lcd.print("1"); //print "3"
|
||||
delay(1000); //wait 1 second
|
||||
}
|
||||
|
||||
//GENERATES A RANDOM ORDER FOR THE WORDS TO BE DISPLAYED
|
||||
void generateRandomOrder() {
|
||||
|
||||
randomSeed(analogRead(0)); //reset the random seed (Arduino needs this to generate truly random numbers
|
||||
|
||||
for (int i = 0; i < arraySize; i++) { //do this until all 25 positions are filled
|
||||
|
||||
int currentNumber = 0; //variable to hold the current number
|
||||
boolean match = false; //does the currentNumber match any of the previous numbers?
|
||||
|
||||
//generate random numbers until you've generated one that doesn't match any of the other numbers in the array
|
||||
do {
|
||||
currentNumber = random(0, arraySize); //generate a random number from 0 to 24
|
||||
match = false; //we haven't checked for matches yet, so start by assuming that it doesn't match
|
||||
for (int i = 0; i < arraySize; i++) { //for all 25 numbers in the array
|
||||
if (currentNumber == sequence[i]) { //does the currentNumber match any of the numbers?
|
||||
match = true; //if so, set the match variable to true
|
||||
}
|
||||
}
|
||||
} while (match == true); //if the match variable is true, generate another random number and try again
|
||||
sequence[i] = currentNumber; //if the match variable is false (the new number is unique) then add it to the sequence
|
||||
}
|
||||
}
|
||||
|
||||
//GAME OVER
|
||||
void gameOver() {
|
||||
lcd.clear(); //clear the screen
|
||||
|
||||
lcd.setCursor(0, 0); //move the cursor the top left corner
|
||||
lcd.print("Game Over"); //print "Game Over"
|
||||
|
||||
lcd.setCursor(0, 1); //move to the bottom row
|
||||
lcd.print("Score: "); //print a label for the score
|
||||
lcd.print(roundNumber-1); //print the score (the score is equal to the previous level/round number)
|
||||
|
||||
//play the losing fog horn
|
||||
tone(buzzerPin, 130, 250); //E6
|
||||
delay(275);
|
||||
tone(buzzerPin, 73, 250); //G6
|
||||
delay(275);
|
||||
tone(buzzerPin, 65, 150); //E7
|
||||
delay(175);
|
||||
tone(buzzerPin, 98, 500); //C7
|
||||
delay(500);
|
||||
|
||||
while (true) {} //get stuck in this loop forever
|
||||
}
|
||||
|
||||
//WINNER
|
||||
void winner() {
|
||||
lcd.clear(); //clear the screen
|
||||
|
||||
lcd.setCursor(7, 0); //move the cursor to the top center of the screen
|
||||
lcd.print("YOU"); //print "You"
|
||||
|
||||
lcd.setCursor(7, 1); //move the cursor to the bottom center of the screen
|
||||
lcd.print("WIN!"); //print "WIN!"
|
||||
|
||||
//play the 1Up noise
|
||||
tone(buzzerPin, 1318, 150); //E6
|
||||
delay(175);
|
||||
tone(buzzerPin, 1567, 150); //G6
|
||||
delay(175);
|
||||
tone(buzzerPin, 2637, 150); //E7
|
||||
delay(175);
|
||||
tone(buzzerPin, 2093, 150); //C7
|
||||
delay(175);
|
||||
tone(buzzerPin, 2349, 150); //D7
|
||||
delay(175);
|
||||
tone(buzzerPin, 3135, 500); //G7
|
||||
delay(500);
|
||||
|
||||
while (true) {} //get stuck in this loop forever
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue