## Inspiration

We wanted to make DDR without the sweat and music so that people could play a reaction game on the go.

## What it does

Users can watch an LED matrix with the dots running down the screen. The user can touch a touch sensor. to match with the dots that hit the lower row. If the player misses 4, they lose, with red dots showing for the first 3 times they miss. If they can hit it at the right time, a green dot appears on the right side, with them accumulating. If they lose a big X shows up but if they win, they will be greeted with a cheerful smile.

## How we built it

We used the Arduino Due as our microcontroller, which would receive the input of the user and update the LED matrix. A base shield was added to the Arduino for easier connections to the Grove Touch sensor which received the input from the user. By rapidly displaying the led matrix lights, we were able make it appear as if more than one led was lit up since the led matrix could only light up one led at a time.

## Challenges we ran into

At first the team was going to use the grove gesture sensor and detect different motion, but the Touch sensor was chosen since the time delay was significant and interfering with the reaction time. As well, wiring the LED matrix was challenging since a specific wiring guide could not be found for the model we had, so. we had to guess and check the wire configuration.

## Accomplishments that we're proud of

We were able to make use of the capabilities of the Arduino Due and learn how to coordinate between the program and the hardware, which was a new experience for our Team. As well, we were able to adapt from our original plan, when we faced issues, so that our final product still functions well.

## What we learned

We learned how to use an LED matrix and how to wire various inputs to an Arduino microcontroller.

## What's next for SpeedyFingies

We plan on connecting a speaker to play music on the device, so that it mimics the DDR music. The dots would match the rhythm of the music instead of being at random speeds and and time intervals. As well, since we didn't use the entire led matrix, we could implement a multiplayer feature with another touch sensor.
## Inspiration

The inspiration of our game came from the arcade game Cyclone, where the goal is to click the button when the LED lands on a signaled part of the circle.

## What it does

The goal of our game is to click the button when the LED reaches a designated part of the circle (the very last LED). Upon successfully doing this it will add 1 to your score, as well as increasing the speed of the LED, continually making it harder and harder to achieve this goal. The goal is for the player to get as high of a score as possible, as the higher your score is, the harder it will get. Upon clicking the wrong designated LED, the score will reset, as well as the speed value, effectively resetting the game.

## How we built it

The project was split into two parts; one was the physical building of the device and another was the making of the code.

In terms of building the physical device, at first we weren’t too sure what we wanted to do, so we ended up with a mix up of parts we could use. All of us were pretty new to using the Arduino, and its respective parts, so it was initially pretty complicated, before things started to fall into place. Through the use of many Youtube videos, and tinkering, we were able to get the physical device up and running. Much like our coding process, the building process was very dynamic. This is because at first, we weren’t completely sure which parts we wanted to use, so we had multiple components running at once, which allowed for more freedom and possibilities. When we figured out which components we would be using, everything sort of fell into place.

For the code process, it was quite messy at first. This was because none of us were completely familiar with the Arduino libraries, and so it was a challenge to write the proper code. However, with the help of online guides and open source material, we were eventually able to piece together what we needed. Furthermore, our coding process was very dynamic. We would switch out components constantly, and write many lines of code that was never going to be used. While this may have been inefficient, we learned much throughout the process, and it kept our options open and ideas flowing.

## Challenges we ran into

In terms of main challenges that we ran into along the way, the biggest challenge was getting our physical device to function the way we wanted it to. The initial challenge came from understanding our device, specifically the Arduino logic board, and all the connecting parts, which then moved to understanding the parts, as well as getting them to function properly.

## Accomplishments that we're proud of

In terms of main accomplishments, our biggest accomplishment is overall getting the device to work, and having a finished product. After running into many issues and challenges regarding the physical device and its functions, putting our project together was very satisfying, and a big accomplishment for us. In terms of specific accomplishments, the most important parts of our project was getting our physical device to function, as well as getting the initial codebase to function with our project. Getting the codebase to work in our favor was a big accomplishment, as we were mostly reliant on what we could find online, as we were essentially going in blind during the coding process (none of us knew too much about coding with Arduino).

## What we learned

During the process of building our device, we learned a lot about the Arduino ecosystem, as well as coding for it. When building the physical device, a lot of learning went into it, as we didn’t know that much about using it, as well as applying programs for it. We learned how important it is to have a strong connection for our components, as well as directly linking our parts with the Arduino board, and having it run proper code.

## What's next for Cyclone

In terms of what’s next for Cyclone, there are many possibilities for it. Some potential changes we could make would be making it more complex, and adding different modes to it. This would increase the challenge for the player, and give it more replay value as there is more to do with it. Another potential change we could make is to make it on a larger scale, with more LED lights and make attachments, such as the potential use of different types of sensors. In addition, we would like to add an LCD display or a 4 digit display to display the player’s current score and high score.
## How we built it

The sensors consist of the Maxim Pegasus board and any Android phone with our app installed. The two are synchronized at the beginning, and then by moving the "tape" away from the "measure," we can get an accurate measure of distance, even for non-linear surfaces.

## Challenges we ran into

Sometimes high-variance outputs can come out of the sensors we made use of, such as Android gyroscopes. Maintaining an inertial reference frame from our board to the ground as it was rotated proved very difficult and required the use of quaternion rotational transforms. Using the Maxim Pegasus board was difficult as it is a relatively new piece of hardware, and thus, no APIs or libaries have been written for basic functions yet. We had to query for accelerometer and gyro data manually from internal IMU registers with I2C.

## Accomplishments that we're proud of

Full integration with the Maxim board and the flexibility to adapt the software to many different handyman-style use cases, e.g. as a table level, compass, etc. We experimented with and implemented various noise filtering techniques such as Kalman filters and low pass filters to increase the accuracy of our data. In general, working with the Pegasus board involved a lot of low-level read-write operations within internal device registers, so basic tasks like getting accelerometer data became much more complex than we were used to.

## What's next

Other possibilities were listed above, along with the potential to make even better estimates of absolute positioning in space through different statistical algorithms.