Avsnitt

  • Have you seen some really cool stuff being made with a thing called Arduino? What is Arduino anyway?

    It sounds like an Italian sandwich with extra cheese or something...

    Well - it's that and a lot more. I hope this video can help explain some the basic premise of the Arduino!

  • Saknas det avsnitt?

    Klicka här för att uppdatera flödet manuellt.

  • Have you ever wanted to change the font color in the Arduino IDE?

    Maybe it is hard for you to read the light grey comments in the Arduino IDE, or maybe you prefer something a little bolder.

    Whatever your reason, in this short video, I demonstrate a relatively easy way to change the font color of comments.

  • In many cases while using an Arduino, you will want to see the data being generated by the Arduino. One common method of doing this is using the Serial.print() function from the Serial library to display information to your computer’s monitor.

    In this week’s episode we will talk about the intricacies of the Serial.print() function. This is the second part of a two part series on the Serial.print() function (Click here for the first part).

    Here are the exact topics we will cover in this lesson:

    Adjusting the number of digits to be displayed after the decimal point with the Serial.print() function. Adjusting the format to display with the Serial.print() function Formatting the output with text and tabs

    If you enjoyed this video, you should consider signing up for our free Arduino Crash Course - it has 19 high quality video training classes to help build your imagination with Arduino.

  • In many cases while using an Arduino, you will want to see the data being generated by the Arduino. One common method of doing this is using the Serial.print() function from the Serial library to display information to your computer’s monitor.

    In this week’s episode, we will talk about the intricacies of the Serial.print() function.

    This is the first part, of a two part series on the Serial.print() function. Here are the specific topics we will cover in this lesson:

    Why would you want to use the Serial.print() function? A brief overview of the Serial library The basic use of the Serial.print() function Like this video? Sign up for our FREE Arduino Crash Course to get more videos that don't assume you have a PhD.

    Why Would You Want to Use the Serial.print() Function?

    You may know that a function is a programming tool - it performs a specific task for you. The Serial.print() function’s task is to send information from your Arduino to your computer, so you can see the value displayed on your computer’s monitor.

    There are an endless number of reasons you may want to send information from the Arduino to a computer display, but two reasons really stand out to me:

    The first reason is being able to see information that you are generating with your Arduino.

    For example, if you have a temperature sensor hooked up to your Arduino and you want to see the value that the temperature sensor is recording, then you can use the Serial.print() function to send the data to a computer monitor via the USB cable. If you open up the serial monitor window (Tools > Serial Monitor), you will see the values streaming in from the Arduino.

    The other big reason to send information to a computer display using the Serial.print() function is for developing and debugging Arduino sketches.

    Very often, when you are developing an Arduino sketch, what you end up coding does something differently than what you expected it to do. Maybe you have a variable that gets incremented every so often and blinks an LED when it reaches a threshold. When you upload the code to the Arduino, you notice that the LED is blinking more often than it should.

    You can look at the code until your eyes bleed, but actually visualizing the variable being incremented [via the Serial.print() function], to see its values every time through the loop() can help explain what is happening very quickly.

    A Brief Overview of the Serial Library

    We can’t talk about the Serial.print() function, without briefly talking about the Serial library.

    Generally speaking, a library is simply a collection of functions that all have something in common.

    The print() function is part of a library called the Serial library. Now, it's not cereal like Cheerios or Captain Crunch we're talking about - it's serial as in “one after another”.

    The serial library allows us to interface the Arduino with other hardware, like a computer.

    In order for us to use the functions of the Serial library, we have to initiate serial communication - to do this we use the Serial.begin() function. Serial.begin() needs to go in the setup().

    void setup() { //Initiate Serial communication. Serial.begin(9600); }

    Now for reasons beyond the scope of this discussion, it is convenient to use the number 9600 in the Serial.begin() function. The value 9600 specifies the baud rate. The baud rate is the rate at which information will pass from the Arduino to the computer, or in the other direction.

    The Basic Use of the Serial.print() Function

    Let's talk about how to use the Serial.print() function.

    Say we have a sketch. This sketch has a variable called coolFactor.

    I want to be able to monitor the value of the coolFactor variable – that is, I want it displayed on my computer screen. A perfect use for the Serial.print() function!

    The first thing we must do in the Arduino sketch is begin serial communications. Like we just said, we use the Serial.begin() function and place it within the setup() of the sketch.

    //A variable to hold the level of coolness int coolFactor = 3; void setup() { Serial.begin(9600); } void loop() { //Send the value of coolFactor to the the Serial port. //So we can see it in the serial monitor window Serial.print(coolFactor); }

    Now in the loop(), if I want to display coolFactor’s value with print(), I simply type Serial.print() and in the parenthesis I type the variable name.

    If we upload this sketch to the Arduino, the value of coolFactor will be sent to the serial port every time through the loop(). In the Arduino IDE, if you open up the serial monitor window [Tools > Serial Monitor], you will see the values streaming down.

    In next week’s episode, we’ll talk about some more intricacies of the Serial.print() function.

    If you enjoyed this lesson, I welcome you to join 1000's of students who have enjoyed our free Arduino Crash Course - it's a 19 part video training series on using Arduino (You can sign up below).

  • There are a couple good use-case scenarios for making a secret knock detector using an Arduino.

    You are a spy who needs to authenticate your cohorts You are a super hero who wants a secret knock to open the entrance to your lair

    Whatever the reason - by the end of this tutorial you will know how to use an Arduino, a piezo transducer and a couple other cheap components to make secret knock detector.

    Here is an overview of exactly what we will talk about in this lesson: The components you will need and how to set up this simple circuit. The concept of operation of this secret knock detector A thorough description of each block of code in the Arduino sketch Why North American grizzly bears love piezo transducers

    For this secret knock detector circuit you need:

    Arduino (I use the Arduino Uno) [1] Solderless breadboard [1] 1 Mohm Resistor [1] Piezo transducer (aka buzzer) [1] Jumper wires [4] 5.1V Zener diode (for extra protection) [1] No spill stopper for a “to-go” coffee cup How to set up the Circuit:

    This is a really simple circuit to setup, below are step-by-step instructions and a breadboard diagram.

    Place the piezo transducer on the breadboard, with the positive lead and the negative lead on separate rails. Connect the positive lead to pin A0 on the Arduino and the other lead to ground. Finally, use the 1Mohm resistor to connect the leads of the piezo transducer. As an additional level of protection, you might consider adding a 5.1V zener diode between the leads to protect against high voltage spikes from frying your input pin - you might call it a cheap insurance policy. An Overview of this Secret Knock Detectors operation

    Here is the basic concept of how this will work.

    We want something to happen when you tap out a secret code.

    We will create a sequence of soft and hard taps - this will be our secret code which will be represented as 0’s and 1’s in an array.

    For example:

    secretKnock[secretKnockLength] = {0, 0, 1, 0};

    The code above represents a secret code of soft , soft , hard, soft .

    The piezo transducer will turn the mechanical pressure created by the tap into a signal that the Arduino analog pin can read. The level of the signal will determine whether a tap gets characterized as soft or hard.

    The threshold of a soft vs hard tap need to be determined empirically, once you have the circuit built - it will depend on what you have the piezo transducer attached to - I have mine taped to a piece of paper.

    You should start with the default threshold values provided in the sketch and change them to suit your specific setup.

    Once a tap signal is picked up by the Arduino, the sketch will compare the entered sequence of taps to the secret code, one tap at a time.

    If the code is entered correctly, then we will trigger an action on the output pin. In this code below, we trigger an LED to turn on for a couple seconds - but you could trigger a servo arm, a pump, or whatever you might need.

    If the code is entered incorrectly - nothing happens.

    Here is the code for your hacking enjoyment:

    /* A simple sketch to detect a secret knock using a piezo transducer Created JUL 2015 by Michael James http://www.programmingelectronics.com/ This code is in the public domain */ const int outputPin = 6; // led indicator connected to digital pin const int knockSensor = A0; // the piezo is connected to an analog pin const int thresholdHIGH = 150; // threshold value to decide when the detected knock is hard (HIGH) const int thresholdLOW = 120; // threshold value to decide when the detected knock is gentle (LOW) const int secretKnockLength = 4; //How many knocks are in your secret knock /* This is the secret knock sequence * 0 represents a LOW or quiet knock * 1 represents a HIGH or loud knock * The sequence can be as long as you like, but longer codes increase the difficulty of matching */ const int secretKnock[secretKnockLength] = {0, 0, 1, 0}; int secretCounter = 0; //this tracks the correct knocks and allows you to move through the sequence int sensorReading = 0; // variable to store the value read from the sensor pin void setup() { //Set the output pin as an OUTPUT pinMode(outputPin, OUTPUT); //Begin Serial Communication. Serial.begin(9600); } void loop() { // read the piezo sensor and store the value in the variable sensorReading: sensorReading = analogRead(knockSensor); // First determine is knock if Hard (HIGH) or Gentle (LOW) //Hard knock (HIGH) is detected if (sensorReading >= thresholdHIGH) { //Check to see if a Hard Knock matches the Secret Knock in the correct sequence. if (secretKnock[secretCounter] == 1) { //The Knock was correct, iterate the counter. secretCounter++; Serial.println("Correct"); } else { //The Knock was incorrect, reset the counter secretCounter = 0; Serial.println("Fail - You are a spy!"); }//close if //Allow some time to pass before sampling again to ensure a clear signal. delay(100); //Gentle knock (LOW) is detected } else if (sensorReading >= thresholdLOW) { //Check to see if a Gentle Knock matches the Secret Knock in the correct sequence. if (secretKnock[secretCounter] == 0) { //The Knock was correct, iterate the counter. secretCounter++; Serial.println("Correct"); } else { //The Knock was incorrect, reset the counter. secretCounter = 0; Serial.println("Fail - You are a spy!"); }//close if //Allow some time to pass before sampling again to ensure a clear signal. delay(100); }//close if else //Check for successful entry of the code, by seeing if the entire array has been walked through. if (secretCounter == (secretKnockLength) ) { Serial.println("Welcome in fellow Illuminante!"); //if the sececret knock is correct, illuminate the LED for a couple seconds digitalWrite(outputPin, HIGH); delay(2000); digitalWrite(outputPin, LOW); //Reset the secret counter to 0. secretCounter = 0; }//close success check }//close loop

    If you enjoyed this lesson, you should join our free Arduino Crash Course - it has 19 Video Training lessons all about using Arduino (you can sign up below).

  • In this video we demonstrate how to create pseudo random numbers with Arduino - with a useful twist.

    This lesson was inspired by the following viewer question:

    How do I create Random Non-Consecutive numbers with Arduino?

    P.S. These are the best tutorials that a complete idiot like you could ever make, thanks.

    -Chris


    Let's overview exactly what we will talk about in today's episode: Talk about pseudo random numbers. Identify the problem - using an Arduino sketch to demonstrate. Discuss how we might solve the problem. Write an Arduino sketch that solves the problem. Review what we talked about.

    Before we answer the viewer’s question it is important to talk about what a pseudo random number is.

    A purely random number in the mathematical sense can't be predicted. The microcontroller that the Arduino uses (and for that case, most computers in general) can't really create pure random numbers.

    What they create instead are called pseudo random numbers. These are numbers that appear to be randomly generated, but if studied over time a predictable pattern emerges.

    The bottom line is that the random numbers we create with Arduino can be predicted.

    Now there are clever ways to create pseudo random numbers that act like the real deal – you can learn about one method in our video tutorial talking all about random numbers – but for this discussion, let’s return to our viewers inquiry.

    Identify the Viewer’s Problem - use an Arduino sketch to demonstrate.

    Ok, so let's go back to the viewers question, he wants to generate random numbers, but he never wants the same number generated two times in a row.

    Let's write an Arduino Sketch to make this clear.

    //This sketch outputs pseudo random integers. //A variable to hold pseudo random integers. int randomInt = 0; void setup() { //Initiate serial communication. Serial.begin(9600); }//Close setup function void loop() { //Create a random number and assign it to the randomInt variable. randomInt = random(0, 10); //Send randomInt to the serial port for displaying on the serial monitor window. Serial.print(randomInt); }//Close loop function.

    In the first block of code a variable that will hold the pseudo random integers is declared and initialized.

    //A variable to hold pseudo random integers. int randomInt = 0;

    In the setup() function we begin serial communication in order to display the numbers we generate on a computer display.

    void setup() { //Initiate serial communication. Serial.begin(9600); }//Close setup function

    In the loop() we create the random number with the Arduino random() function and assign the output to the variable we had just created. The random() function can take two arguments 1) the minimum value of the number we want generated 2) the maximum value we want generated.

    //Create a random number and assign it to the randomInt variable. randomInt = random(0, 10);

    I will use 0 for the minimum, and 10 for the maximum.

    Every time through the loop, a new random number will be assigned the randomInt variable.

    Finally, the value of randomInt is sent over the serial port to be displayed in the serial monitor window.

    //Send randomInt to the serial port for displaying on the serial monitor window. Serial.print(randomInt);

    If you upload this code and open the serial monitor you will see in some cases where the same number shows up two times in a row.

    This is the problem. The viewer doesn't ever want the same number two times in a row.

    Discuss how we might solve the problem.

    So let's talk about how we might solve this problem. We know we need to generate a random number.

    What if we create a variable to track the previous random number?

    Then we could use a condition that says something like "If the previous random number is equal to the random number that was just generated, toss that number out the window, and create a different one.”

    The final thing we would need to do is set the previous random number equal to the new random number, that way we keep updating our previous random number every time through the loop().

    Let’s Implement our solution in an Arduino Sketch.

    Copy and paste this code into your Arduino IDE. All you need is an Arduino board attached to your computer to make it work.

    //This sketch outputs pseudo random non-consecutive integers. //A variable to hold pseudo random non-consecutive integers. int randomInt = 0; //A variable to hold the previously assigned pseudo random non-consecutive integers. int previousRandomInt = 0; void setup() { //Initiate serial communication. Serial.begin(9600); }//Close setup function void loop() { //Create a random number and assign it to the randomInt variable. randomInt = random(0, 10); /*Check if the random number is the same as the previous random number. If it is, then reassign a new random number until it is different from the previously set one.*/ while (randomInt == previousRandomInt) { //Create a random number and assign it to the randomInt variable. randomInt = random(0, 10); //When a consecutive random number has been identified, indicate it. Serial.println(); }//close while statement //Set previousRandomInt equal to the current randomInt. previousRandomInt = randomInt; //Send randomInt to the serial port for displaying on the serial monitor window. Serial.print(randomInt); }//Close loop function.

    If you upload this code to your Arduino and open the serial monitor window you will see the numbers scrolling across the serial monitor window, but now you will not witness any duplicates side-by-side. You may notice some X’s intermittently between the numbers, this is where the Arduino sketch identified a duplicate random number and generated a replacement.

    If you look through the code, you will see this is accomplished with a While Statement.

    I hope you can find some application for this simple process of creating a pseudo random non-consecutive number with Arduino. Let me know what you think the comments!

  • I don’t subscribe to many magazines, but I love my subscription to Make: magazine.

    And even though I rarely have time to sit down and enjoy a magazine in peace and quiet (parents forget what peace and quiet means), I still manage to get through my Make: magazine cover to cover. I like it that much!

    This video is a short review of why I enjoy Make: magazine, and why I think you would enjoy it too.

    Here are some highlights:

    1. Make: Magazine is published every 2 months.
    2. Filled with detailed step-by-step projects
    3. Has interesting editorial articles about technology
    4. Covers a lot of hobby electronics topics (like Arduino)
    5. Has sections dedicated to skill building

    Total Honesty:

    Nobody paid me to make this review of Make: magazine. I made this video because I personally enjoy the content and rigor and think you might like it too.

    That being said - if you are interested in subscribing to Make: magazine I would love for you to use the link below if you so choose:

    Click Here to Check Out Make: Magazine

    The above is an affiliate link. At no additional cost to you, I get a kick back from subscriptions that originate from the link. This cash allows me to furnish my mansion in downtown Manhattan, make necessary repairs to my yachts, and fuel the Lamborghini for joy rides.

    Do you subscribe to Make: magazine? I would love to hear your thoughts in the comments.

  • Understanding how the Arduino IDE sets up its file directory system can spare you some confusion when it comes to saving, organizing and opening your Arduino sketches (or sketches you have downloaded from the internet).

    This week’s episode covers the following:

    The Arduino Sketchbook folder How to change the default location where your Arduino sketches get saved What happens when an Arduino file does not have an enclosing sketch folder of the same name Where and how multiple tabs get saved in an Arduino sketch Why the pancreas of a woodchuck is better suited than our own

    Want to fast-track your Arduino skills?

    Click here to join our 12-part HD Video Course.

    You are probably familiar with a file directory system on a computer. It's usually represented as a hierarchy of folders and files.

    An example would be your C Drive - inside the C drive, you may have a folder for Applications, Users, and Systems files. Inside the Users folder, you might have subfolders for Documents, Downloads, Music, etc.

    All the files on the computer get organized in this fashion, and Arduino sketches are no exception.

    The Arduino Sketchbook Folder and Changing the Default Save Location

    The default location where Arduino sketches you write will be saved is called the Sketchbook.

    The Sketchbook is simply a folder on your computer like any other. It acts as a handy repository for sketches and is also where add-on code libraries get saved.

    You can see the sketches in the Sketchbook folder by going to File > Sketchbook.

    The default name of the Sketchbook folder is “Arduino” and the default location of the Sketchbook folder is in the “My Documents” folder (or just “Documents” for Mac users).

    If your Sketchbook does not appear to be in this default location, you can see exactly where it is by opening the Arduino IDE and going to Arduino > Preferences.

    The default file path for your sketches is listed at the top of Arduino Preferences window. Mine is:

    /Users/michaelJames/Documents/Arduino

    When I save a file in the Arduino IDE, this “Arduino” folder is the default location where the sketch will be saved, unless I choose to change that location by selecting a different folder on my computer's directory.

    If you want to change this default location, you click the Browse button next to the file directory path and choose a different place. Pretty simple.

    Sketch Folders

    If you go into your file directory system and open up the Sketchbook folder (again, named “Arduino” by default), you may see a bunch of folders that you didn’t make.

    This is because every Arduino file must be inside a folder that has the same name as the file (there are some exceptions to this that we'll talk about in a moment).

    Let me say that one more time because it is really important to understand.

    Every Arduino file must be inside a folder that has the same name as the file

    When I write a new sketch and save it, the Arduino IDE automatically creates a new folder that has the exact same name as the sketch itself. The Arduino file (which has the extension .ino) is placed inside this enclosing folder, which is called a sketch folder.

    If you go into the Sketchbook folder and change the name of the enclosing folder, it will create some issues. The first issue is that when you go to File > Sketchbook, the sketch will no longer show up! If you want to open this sketch you need to go to the .ino file in your directory and open it from there.

    If you open a .ino file that is not inside an enclosing sketch folder of the exact same name, then you will get a pop-up from the Arduino IDE that says:

    “The file “sketch_name.ino” needs to be inside a sketch folder named “sketch_name”. Create this folder, move the file, and continue?”

    If you choose Cancel, the sketch will not open. If you choose OK, then a folder gets created (it will have the same name as the sketch) and the .ino file is placed inside it.

    This sketch folder will be created in whatever directory the .ino file was that you tried to open. For example, if you tried to open a .ino file that was in your My Downloads folder, then the enclosing sketch folder also will be created inside the My Downloads folder.

    Saving Tabs in Arduino

    The exception to the rule about the sketch folder having the same name as the .ino file is when you create multiple tabs in an Arduino sketch.

    The additional tabs do NOT need to bear the same name as the enclosing sketch folder.

    Once you get a handle on some of these intricacies of the Arduino IDE file system, it can really help to clear things up.

    Please take a moment to leave a comment if you have any insights or thoughts about this tutorial. I would love to hear them!

  • In this video we talk about an Arduino shield designed to teach you about shift registers, I2C, SPI, temperature sensors, real time clocks, analog to digital convertors and flash memory chips - all this on one awesome Arduino shield!

    Electronics Concepts can be Intimidating

    Like any industry or hobby, electronics has its fare share of acronyms.

    A couple of the more common ones you might have come across are SPI, I2C, ADC, RTC and YOMAMA.

    All these acronyms can be intimidating. It’s like this giant lion staring you down.

    You can spend a lot of time reading about each of these concepts, buying a bunch of different parts and working up breadboards - this is a great way to learn – it’s kind of the common path many hobbyist and professionals have taken alike.

    But if you want to grab the lion by the throat - I would like to introduce you to my new favorite Arduino shield. The Rheingold Heavy Education Shield.

    It's an Arduino shield designed to teach you about the ins and outs of all these really common electronics concepts (like I2C and SPI) and applying that understanding to hardware (like analog to digital convertors and Flash RAM). It’s not just the shield that makes this an education board, it’s all of the really thorough documentation and tutorials that accompany the hardware on the Rheingold Heavy website.

    Have Fun Learning Electronics

    If you are going to learn electronics, you might as well have fun doing it. That's one great thing about the Rheingold Heavy tutorials - they are fun - the author has a great sense of humor and keeps things real.

    He does a great job at demystifying electronics concepts that on the outside seem extremely complex, but dissected piece by piece can be made elementary.

    I would say my favorite part about the tutorials is the depth and detail they cover.

    I think this line from one of the introductory tutorials captures the style of the author…

    ...I don’t like “just making it work” — I want to know why it works the way it does.

    Hardware and Education Unite

    The real magic happens when you have the Education Shield and start working through the tutorials. The lessons on the Rheingold Heavy website are all designed step-by-step to walk you through understanding in detail the hardware on the shield.

    The lessons are a good length, focus on just a couple concepts at a time and get into the nuts and bolts.

    The Rheingold Heavy Education Shield itself is jam packed with components.

    It's got a shift register hooked up to 8 surface mount LEDs for learning about shift registers, a real time clock, a temperature sensor, a 10 bit analog to digital convertor, and 8Mbytes of Flash RAM. All this hardware you learn to use with either I2C protocol or SPI!

    It’s like an electronics learning laboratory on a single Arduino shield.

    If you already have a handle on some of these concepts, and you don’t think you need the whole shield, you can purchase breakout boards for each separate component and all the documentation on the website works equally well for those.

    I know I’ve said it once, but it deserves saying again - the tutorials are written in a fun and relaxing tone - with tons of diagrams, questions along the way to make sure you’re on track and Arduino code to help experiment with the shield and concepts.

    History of the Rheingold Heavy Education Shield

    The brainchild of this education shield is Dan Hienzsch. In 2014 he ran a successful Kickstarter campaign that brought these shields to fruition. After successfully fulfilling all his Kickstarter backers (and on time!) he has set up shop and is now churning out these education shields all over the world.

    My Unabashed Endorsement

    I am just little biased towards this education shield - I know Dan - he's a great guy and very passionate about what he does.

    After buying the shield and the breakout boards and working through the tutorials on the website I have learned a ton!

    The best part is how much fun it has been to work through the material.

    I love learning and if I can have a single “aha!” kind of moment everyday, then I sleep at night pretty good. My experience with the Rheingold Heavy Education Shield has brought me these moments left after right.

    Needless to say I highly recommend this Arduino shield to any body who wants to get a solid and detailed grasp of concepts like SPI and I2C, or about using real time clocks, analog to digital convertors, temperature sensors, shift sensor and a whole lot more.

    With all this education packed into Rheingold Heavy Education Shield, backed-up with really enjoyable tutorials, you can't go wrong.

  • This week's Episode is what I am calling an intermission, which is basically me taking a break from hardcore Arduino tutorial making, and present a less technical topic. In this intermission video, I walk through the process I use when creating Arduino tutorials and some of the software that helps me do it.

    Here is a list of software I use when creating Arduino tutorials:

    Full Disclosure: Some of these are affiliate links that help me afford gold toilets on my private island.

    Brainstorming/ Mindmapping software (mac): MindNode

    Simple Text Editor (mac): TextMate

    Screen Capture software: Camtasia for Mac

    Audio Editing: Audacity

    Circuit Design: Fritzing

    More Robust Text Editor: Microsoft Word for Mac

    If you want to check out some of our best Arduino tutorials, sign up for our free Arduino Crash Course below.

  • If you ever have a project using two or more Arduinos, it's likely you'll want them to work together.

    Say for example you have one Arduino connected to an LCD shield, and another Arduino controlling an LED matrix. You want both to do something when you press a single button - how can this be done?

    It turns out to be extremely easy. This video will describe in detail how to trigger multiple Arduinos with a single input.

    CODE:

    /* Button Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached to pin 2. The circuit: * LED attached from pin 13 to ground * pushbutton attached to GND through pin 2 on two (or more) Arduino's * Note: on most Arduinos there is already an LED on the board attached to pin 13. created 2005 by DojoDave modified 30 Aug 2011 by Tom Igoe Modified 16 APR 2015 by Michael James https://programmingelectronics.com/using-the-same-input-to-trigger-multiple-arduinos/ This example code is in the public domain. http://www.arduino.cc/en/Tutorial/Button */ // constants won't change. They're used here to // set pin numbers: const int buttonPin = 2; // the number of the pushbutton pin const int ledPin = 13; // the number of the LED pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status void setup() { // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT_PULLUP); } void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. // if it is, the buttonState is HIGH: if (buttonState == LOW) { // turn LED on: digitalWrite(ledPin, HIGH); } else { // turn LED off: digitalWrite(ledPin, LOW); } } Breadboard Layout: Downloads:

    Schematic Fritzing File.fzz

    If you like this tutorial, check out some of out very best by signing up for our free Arduino Crash Course below.

  • In this video we will be talking about some key points to keep in mind when assembling an Arduino shield from a kit. Many of these tips will apply equally well to any type of electronics kit you are assembling.

    So you just bought an awesome Arduino shield - it's going fly you to the moon and back, but before you start using it you have to do some basic assembly.

    Here are six tips to help you get the assembly done right the first time.

    Read the Directions:

    The first advice is painfully obviously, but still worth mentioning - read the directions! When all you have to do is solder on some pin headers and a couple LEDs, it's tempting to ignore the need for directions and just go at. You’re a genius right - who needs directions?

    As J.R.R. Tolkien said...

    "Shortcuts make for long delays".

    Even on simple assemblies it pays to take the time to read through the directions. Most companies keep the directions online – they are really only a search away. I'm telling you it’s worth it!

    Consider Where you Will be Assembling the Board:

    You may not have a dedicated space for your electronics addiction. There have been many times when I find myself soldering stuff on my kitchen table.

    If you don’t have a dedicated space, a couple things you will want to consider are:

    • Having good lighting, so you can see what you are up to
    • Access to a wall outlet for your soldering iron – you want the cord to have some maneuver room
    • A floor without shag carpet, as they tend to be repositories for small electronics parts (the smallest parts are always the first to fall)

    You can’t always have the best spot, but you can make the best of what you have available.

    Get Your Tools Together

    Good instruction manuals will let you know what tools you need for the job.
    Generally speaking, the essential tools are:

    • soldering iron
    • solder
    • wire cutters

    Some other tools that are not necessary but make life way easier are:

    • Needle nose: pliers for grabbing tiny parts
    • Helping hand: these help not only holding parts when soldering, but also provide the magnifying glass which is good for checking solder joints
    • Solder wick for undoing your mistakes
    • A pair of safety glasses is also a good idea.

    You might be thinking – ah, heck with safety glasses…

    It's easy to write them off when assembling boards. What I have done is get a pair that is comfortable and that I keep clean - this makes using them less a hassle. It’s a small precaution to take from getting a piece of tiny sharp metal in your eye.

    Inventory All the Parts

    For whatever reason, inventorying all the parts always seemed like a waste of time to me, but now it is something I make sure to do.

    Two big reasons I do this. Many of the boards I get are from Kickstarter campaigns, so the people manufacturing these might be kind of new at the gig, and with all the stuff they have going on, it's very possible they missed a part in the package.

    Another reason I like to do the inventory is so I know if I have extras. If I have pieces left over when I finish, then I am usually wondering if I did the assembly correct or not. If you do the inventory, then you can be confident that you assembled it right.

    I also separate the components into different jars, or bowls. This helps me quickly find components when I am assembling the shield and prevents the pieces from ending up lost in the carpet.

    Check Twice Solder Once

    I like solder wick as much as the next guy, but I would prefer not use it. It is really worth your time to double check part locations before you start soldering.

    I learned my lesson when I soldered a 24 pin connecter on the wrong side on a board. Now I always check a diagram or the directions at least twice before pulling out the solder.

    After I solder, I also make it a point to look over the solder joints. I am amazed at how much my soldering joints can stink, even when I feel like I had done a great job (this is when a helping hand or magnifying glass is good to have).

    Use an Arduino Board to Help Align the Pin Headers.

    One thing all Arduino Shields have in common are pin headers. These are the metal rows of pins that go on the bottom of the shield and plug into the Arduino stackable headers.

    If you don’t get the pin headers aligned correctly then your shield may not fit well, or may not fit at all on top of the Arduino.

    One trick to get the alignment right is to use an Arduino to hold the pin headers in the correct position when you solder them to the bottom of the shield. To do this, simply insert the headers how they would go into the Arduino, place the shield on top, and then do your soldering. It works like a charm.

    Troubleshooting the Assembly

    Now that your Arduino shield is fully assembled, it’s time to get that puppy running.

    Hopefully the shield came with some type of test sketch that you can load and it verifies that everything is up and running correctly. If not, try to find some code that you know works and load it onto the Arduino.

    If you start with code that you can verify works (or at least works for others), it can be easier to troubleshoot any issues you might encounter. I know how demoralizing it can be to load your first sketch and getting nothing better errors when you press the verify button.

    Here is a tidbit of moral support - there is a learning curve to everything - no matter how easy it is “supposed” to be.

    In fact, some of my favorite shields took me a while to understand how to use. So try not to get frustrated if your sketch isn’t working instantly. In the end, a little bit of determination goes a long way.

    Do you have any tips for building Arduino shields or electronics kits in general? I would love to hear about them in the comments.

  • In this episode I talk about the video channel that I host on YouTube. If you have watched any previous episodes of this channel then you know I focus on Arduino related topics.

    The purpose of the channel is to help people learn about using Arduino. Specifically, the target audience is electronics hobbyists who are interested in learning to use Arduino.

    That being said, I try to make the videos from the perspective of a beginner so if you don't know jack about electronics or programming, then the show should still be a great place for you to learn.Every Tuesday I will be releasing a new episode. Every fourth video will be something like the video shown above. The reason I am doing this is because it gives me a little bit of a break in video production, which is extremely time consuming. I am calling these types of videos "Intermissions" which is all I could come up with. So this is the first intermission video (and post).

    A Little Bit About Myself:

    I am an electronics hobbyist - I've be messing around with hobby electronics for a about a decade, and I have been learning about Arduino for a big part of that time.

    I don't have any formal training in electronics so the perspective you get from me might be a lot like you, someone who has tried really hard to learn about electronics with as much spare time as I could find between work, family, and the curve balls of life.

    I do have some formal training in programming (though not much). I took a C++ course in college and used Matlab for some research I was doing at the university.

    What type of topics can you expect to watch on this video channel?

    Like I said before this channel is focused on Arduino - but there so many applications for Arduino it gives me a bunch of latitude for all types of stuff.

    There will be a ton of “how to” tutorials. Not about cutting and pasting the code – they’ll be about understanding how to make your own code.

    I'll talk about Arduino derivatives, shields and cool hardware and sensors you can use.

    I am really interested in science, so I plan to start doing some videos on using Arduino to enable Citizen Science. I might start with some data logging ideas.

    Student Projects:

    On a quick aside, what I do for a living is run an online course that uses a very structured curriculum to teach electronics hobbyists how to use Arduino. The Arduino Course is designed so you don’t need any electronics background to work through it, but I find most of my students do have some electronics experience to begin with.

    The reason I bring this up is because many of the students submit projects they are working on and I plan to use these “intermission” videos to show off some of the stuff they have done.

    For example, James (a really quick study) who took the course has been making all types of cool Laser tag accessories using Arduino. Which is pretty awesome - and very impressive.

    Projects I am Working on:

    I will also use these “intermission” videos to talk about some of the projects I am working on. Lately, I have been thinking about a little robot that can draw. I only really work on it when my kids are around, so the progress is painfully slow.

    What I would really like is to get the robot to draw sketches of people. No idea if I will ever make it to that point (or how the heck I am going to pull it off), but it's my pet project that I have been working on.

    So that’s it for this first intermission post (and video). I will see you in the next show, where we will be talking more things to consider when assembling Arduino Shields from kits. Until then!

    If you are interested in learning how to use Arduino, sign up for our free Arduino Crash Course below.

  • If you have been learning about Arduino for any amount of time, than you have probably come across the term Breakout Board. Now, you might think, as I did when I first heard about breakout boards, that they were some fixture for practicing your Kung Fu fighting.

    In this lesson, we will discuss what breakout boards are, how they can accelerate your Arduino prototyping and some things to look out for when you buy them.

    Want to step-up your Arduino skills?

    Click here to join our 12-part HD Video Course. Basic Concept of a Breakout Board

    The basic concept of a breakout board is that is takes a single electrical component and makes it easy to use.

    Usually the electrical component is an integrated circuit (IC). Integrated circuits, as you may know, have pins on them. The pins on an IC can do a multitude of things, but you usually have pins for supply power, pins for providing a ground, pins for receiving an input and pins for sending an output.

    A breakout board "breaks out" these pins onto a printed circuit board that has its own pins that are spaced perfectly for a solderless breadboard, giving you easy access to use the integrated circuit.

    There are all type of breakout boards - but most of them are for different types of sensors, for example: accelerometers, ultrasonic distance sensors, RFID tag sensors, temperature sensors, pressure sensors, and they even have seismic breakout boards for sensing dinosaurs' footsteps!

    Breakout Board vs Arduino Shield: What's the difference?

    You might be wondering what the difference is between a breakout board and an Arduino shield, and that is a good question.

    Breakout boards usually have a smaller form factor - they don't need the entire space of an Arduino shield to accomplish their mission.

    And while the market for most breakout boards is being driven because of their use with Arduino, since the pin-out of a breakout board is not designed specific to the Arduino headers, it means you could use a breakout board with any other microcontroller development board you want - which gives them a bit more scope than Arduino shields.

    Also, since breakout boards generally have fewer components than a shield does, you may find the cost is lower than a comparable Arduino shield. As you may have guessed by now, you can find a breakout board that does essentially the same thing as a shield.

    You might be wondering, if breakout boards are only a few components, why not just buy the integrated circuit the breakout board uses, put it on a solderless breadboard yourself, and then hook them up to your Arduino?

    That is great question, and there is nothing saying you can't – plenty of people do - especially since the components by themselves are often far cheaper to buy alone from an electronics distributor, like digikey or mouser.

    So, why the heck are people buying all these breakout boards?

    It essentially comes down to convenience. Let me list the ways a breakout board can help you out, and then you make the call:

    Breakout boards can save you space

    We have already said that breakout boards use integrated circuits. Integrated circuits are kind of like t-shirts - you can get them in all different sizes.

    Usually breakout boards utilize a tiny version of an integrated circuit called an SMD (surface mounted device). The pins on SMD parts are really small - not something you can easily pop into a breadboard.

    The larger form factor of an integrated circuit, called a DIP (dual inline package) has bigger pins, which fit easily into a breadboard. The DIP package of an IC will be bigger than the SMD form factor.

    The point, I am getting to here, is that Breakout boards can sometimes save you space which may or may not be important for your project.

    Breakout Boards are designed for reuse

    Another thing about using DIP packages is that while the pins are bigger, they are not necessarily sturdy. If you plan to use a DIP component over and over, the usable life of the pins is only so long - the pins on a breakout board however, are heavy duty and designed for reuse.

    The DIP version on a component may not be available

    One other issue you may find is that the DIP version of an integrated circuit is not available - as electronics get smaller over time, the demand for larger components is drying up and manufacturers are moving away from even bothering with the DIP package, which ultimately brings you back to a breakout board.

    Pin labeling on a Breakout board

    One great feature of breakout boards is that they usually have the pin names of the integrated circuit labeled on the PCB. This makes hooking up the breakout board to your Arduino a cinch, especially when there are a ton of pins.

    Otherwise, you are looking at the black box of an IC and referencing the datasheet of the integrated circuit to try to figure out which pin is for what.

    So now that you know some of the benefits of a breakout board, let's talk about a couple things you might want to consider when you are buying them.

    Good documentation

    I said this about Arduino Shields in the last lesson, but I will say it again - good documentation is like water in the desert. The more you can get your hands on, the better.

    Let's face it - a lot of this electronics and programming stuff is not self evident - you need good instructions and reference material to make it work right.

    The test I usually use before buying a breakout board is to see what reference material I can find online for it. If nothing tangible exists, you might be spending way more time trying to get it up and running than you would prefer.

    Breakout boards are not necessarily interchangeable

    As you search for particular breakout boards, you may find that there is a super cheap version available. If you plan on using pre-existing code for a breakout board that references the more expensive version of the breakout board – i.e. maybe in the sketch comments it says, "use XYZ breakout board", one thing you will want to check is that the breakout boards use the same integrated circuit.

    If they don't use the same integrated circuit, and you don't know how to adjust the code for these differences, then you may find that the cheap version will cost you more time in trying to figure out how to use it.

    Soldering and header pins may be required

    Many breakout boards are sold as kits. Usually, the only things you have to solder are the header pins that allow the breakout board PCB to plug into a breadboard - this is really easy to do.

    It may also be the case that a kit maker just sells the breakout board with the SMD components, and you have to buy the pin headers separately.

    So those are a few things to keep in mind when buying a breakout boards.

    Using the correct supply voltage

    Finally, once you actually have your breakout board, make sure that you know what voltage supply pin it needs hooked up to.

    The Arduino has two voltage out pins, one at 3.3 volts and one at 5 volts. Many breakout boards use a supply voltage around 3.3 volts. Sometimes the supply voltage will be printed right on the PCB by the associated pin, but other times it will just say Vcc, so you will want to check the specs on the breakout board.

    If you are just getting started with breakout boards, a great place to look is in the Arduino IDE examples. Some pre-written sketches get you up and running quick with some common breakout boards.

    If you like the style of this lesson, I welcome you to join the free Arduino Crash Course - you can sign up below.

  • If you are learning about Arduino, you have no doubt come across the term Arduino Shield. This tutorial will explain what Arduino Shields are, why they are awesome, and several things to consider when buying shields.

    cool electronics ideas that you have.

    Now the Arduino in and of itself is pretty amazing - you can do a lot of stuff with an Arduino alone. But when you want to start adding all types of cool technologies like bluetooth, wifi, RF, motor-drivers, etc. it can be pretty tricky; especially if you are new to electronics and programming.

    Arduino shields take all the complexity of the hardware and reduce it to a simple interface. This allows you to get your idea up and running fast.

    Now it's not just the hardware that shields take care of, in many cases, Arduino shields also have programming libraries associated with them. These libraries allow you to easily implement the hardware features available on the shield.

    There are shields for all types of things - LCD shields, LED matrix shields, wifi and bluetooth shields, motor shields, power supply shields, geiger counter shields, there are even shields for cooking hot dogs. Chances are if you need to do something, a shield exists to get you up and running quick.

    Shields plug right into the top of an Arduino. The black plastic rows of holes along the sides of an Arduino are called headers, and on the bottom of a shield, you have these long spiky pieces of metal, these are called pins. The pins on a shield line up with the header rows on an Arduino and fit snuggly (more on this later).

    Buying an Arduino Shield? Think about this stuff: Does it have good documentation?

    Documentation is the fancy way of saying - “will they show me how to use this thing?” Basically, is there some type of tutorial or user manual or forum that talks about how to use the shield.

    This is one of the biggest factors for me when it comes to buying an Arduino shield. For all the ease of use that a shield provides, if I don't know how to use it, it's about as a good as a rock.

    Lucky for us, people who use Arduino tend to be awesome and do a great job writing about how to use stuff, so even if the manufacturer doesn't have good instructions, if people actually use the shield, then you will find a wealth of information online. But if you do a web search and it doesn't turn up much of anything useful, you might consider looking for another option.

    Two US companies that provide superb documentation of the shields they make and sell are Adafruit Industries and Sparkfun.

    Soldering may be required

    Many shields are sold as kits, that means they are not fully assembled - and will require you to do some soldering. If you are buying from a reputable source, you should know this ahead of time, but it is worth double checking.

    Sometimes manufacturers will offer the shield as a kit or fully assembled - I often go for the fully assembled option just to save time. If you have not soldered before, shields are usually a cinch to solder, so don't be intimidated - go get a cheap soldering iron and some solder and go for it!

    Probably the most important thing when soldering a shield is making sure that the pins on the bottom of the shield are straight up and down, if they aren't they won't line up to the Arduino headers and be a major pain to connect.

    Stackable or Not Stackable Arduino Shields

    If you plan on stacking an Arduino shield with other shields, you will want to make sure it is stackable. If it doesn't have pin headers on the top of the shield, or they don't look aligned correctly (usually too narrowly spaced), than it is likely another shield cannot be stacked on top of it.

    You might also run into a problem if components on the shield stick up too high to allow shields above from getting a snug fit. Manufactures of shields are getting more savvy to this issue, but you should always check.

    Not all Arduino shields have the same pinout

    Some older Arduino shields may not have all the pins to fill the header rows of an Arduino. This is because older versions of Arduino didn't have as many pin header slots. This usually isn't too much trouble, unless you needed to use those pins that are not connected on the shield.

    If you have an older version of Arduino, then a shield you buy might have more pins than your Arduino has headers for - usually they are still physically compatible - this should not be anything to sweat about.

    Matching Hardware and Software Versions

    On a final note, if you are having trouble with a shield working, it worth checking to see if you are using the most current library version for your version of shield.

    A great example is the near ubiquitous Adafruit motor shield. There is a hardware version 1 and a hardware version 2. There are two separate code libraries for these. If you are trying to run your new version of the hardware on the old version of the library - then you will likely run into troubles. It worth checking to see you have the correct library for the job.

    I hope you found this tutorial helpful, please be sure to check out our free Arduino Crash Course (signup below) if you want to accelerate your learning.

  • So you just opened up your fancy new gadget - maybe an awesome DSLR camera, or the newest gaming system, or maybe a new Blu-ray player. As you gladly tear away the packaging - you notice a small book that feels like it was printed on 4th generation recycled newspaper - it’s the instruction manual.

    As you skim the pages you realize it was first written in Japanese, translated to Chinese by an Australian ventriloquist and then an intern in California used Google Translate to finish the job for your native tongue.

    So you toss the instruction manual and just plug the gadget in. Good for you - especially since it appears as everything is working just fine.

    Until..

    ...something isn’t working just fine. Maybe you can’t navigate the menu options to find a setting that was advertised on the box, or maybe the functionality you thought your gadget has does not appear to be working no matter how correctly it seems you are pressing the buttons.

    This tutorial is going to focus on the Arduino instruction manual, known more commonly as the “Arduino Reference” or the “Arduino Documentation”. It is an important and useful aspect of learning to use Arduino - it will be your best friend in times of bewilderment, brain lapses and fits of rage.

    I know that instruction manuals get a bad wrap - but don't fret - the Arduino Reference is awesome!

    To be honest what really keeps us away from the documentation is our fears.

    That’s right - the reference pages can be a bit intimidating when you are just starting out.

    They use a lot of technical jargon, are loaded with funky acronyms and filled with rabbit holes. Nobody uses the stuff anyway...right? ( Not right - that was a joke! )

    This Tutorial Will Cover: What is the Arduino Reference? The Anatomy of an Arduino Reference Page. Why You Should Be Using the Arduino Reference More. How to use brain waves to trick your cat into eating less.

    Have you ever read a book and come upon a word you didn’t understand? Sometimes you can infer the meaning from it’s context, but what about when no such context exists?

    Likely, you used a search engine to find the definition. The definition told you what the word meant, whether is was a verb or adjective (or both), it gave some examples of how to use the word, and maybe even the etymology.

    The Arduino Reference is the same thing. It is the “dictionary” for all the structures, variables and functions that you can use when programming a sketch.

    It tells you the description, the parameters it uses, the syntax (how it is written), and even gives a bunch of examples on how to use it.

    So let’s jump into an Arduino Reference page and dig into what we can learn.

    The Anatomy of an Arduino Reference Page

    So let’s navigate to a reference page to start our journey. You can find the index of all the Arduino Reference pages on the Arduino Website:

    http://arduino.cc/en/Reference/HomePage

    Or - if you are offline - don’t worry, your Arduino IDE comes with an html copy of all the pages. You can get to it through the Arduino IDE: Help > Reference

    You will note at the top of the Reference Index page, there are three columns; Structure, Variables, Functions. This is the first level of organization in the reference. So if you are looking for a variable, you know which column to start looking in.

    Each of the hyperlinked items on this index page will take you to the individual entries reference page.

    What’s great about the individual reference pages is that they are organized in a similiar manner from one to the next, so you should know what to expect. They are also terse, so don’t think you are going to have to scour through someones dissertation.

    Each page has some major headings. We will walk through each of the main ones, and then talk about some less common ones.

    Description:

    All entries will have a description. Pretty straightforward - this is going to be a simple explanation of what the item does. It usually uses language that is basic.

    Syntax:

    Most all entries have a “syntax” heading, but they are more prevalent for functions. The syntax shows how the function (or other code) should be written when you use it in your sketch.

    Basically - it is what the function needs to know to do it’s job. Let's take an example from the digitalWrite() reference page.

    The words in the parentheses are telling you what type of value should be passed to the function. If we want to use this function than it will need to know 2 things - the pin number and the value to write to the pin.

    You don’t type in the word “pin” when you use the function, you would replace that with the actual pin number, or a variable that represents that pin number. Same is true for the word “value”, you would replace this with one of the acceptable parameters (see below).

    So when you actually wrote the function, it might look like this:

    digitalWrite( 13 , HIGH )

    Where 13 is the “pin” and HIGH is the “value”.

    Parameters:

    Only structures and functions will have the “Parameters” heading. These describe exactly what can go in the parentheses in the syntax above. This is good to know, because you might be trying to pass a floating point number when the function calls for an integer.

    Returns:

    This tells you what value to expect a function to give you back. For example, when you use the square root function, you expect to get back the square root. But what data type will the square root be - an integer, a float or a double? The “Return” heading will tell you.

    Sometimes, a function will return nothing. Take the pinMode() function for example, you give it the pin number and the mode that you want the pin to be and it simply sets the mode - there is no data it needs to give you back.

    Example:

    This is your best bet at understanding how the structure, function or variable is intended to be implemented in code. It is usually a very short code snippet, though sometimes they can be lengthy. The example below is taken from the map() reference page.

    A nice feature of the example description is the “get code” option on the right of the reference page next to the example code. When you click this, it will take your browser to a plain text web page where you can copy and then paste the code into your Arduino IDE.

    See Also:

    This is a bulleted list of similar or related entries to the reference page you are looking at.

    They will link to other reference pages inside the reference directory. If I end on a reference page that isn’t quite what I was looking for, I will usually check out the options they provide here.

    Sometimes, they will also link to tutorials on the Arduino website (and who doesn’t like tutorials?) Keep in mind if you are using the reference in the offline mode through the Arduino IDE and you do not have an internet connection that any links outside the reference directory will not work.

    That includes the most common headings, what follow are some less common, but none-the-less useful headings you will run into.

    Programming Tips / Coding Tip / Tip:

    These are going to little bits of knowledge provided by people who know their stuff. I always like to read these, because they add to the depth of my understanding.

    Warning:

    These point out common errors that occur when people like me and you try to use the code.

    Caveat:

    If there is an exception to the rule, they will be described here.

    Note:

    In many cases, the notes are the “miscellaneous” heading, capturing information that doesn’t particularly fall under other headings.

    Why You Should Be Using the Arduino Reference More

    Here is a scenario I have played out myself about 7,000 times. I am writing a program and some function does not seem to be working right. I spend 30 minutes making changes to the program, but keep getting errors. Every time I think I have it fixed, I find I am wrong.

    Then I decide to check out the reference at which point I quickly realize I simply didn’t understand how a function was supposed to work.

    So the habit I have developed when I don’t completely understand a function it to check out the associated Arduino Reference page.

    It saves me times, teaches me something I didn’t know or re-teaches me something I forgot - and it will do the same for you.

    Let’s sum all this up.

    The Arduino Reference page is:

    The Bee’s Knee’s. The Lions Mouth. My favorite page on the Arduino website. Your favorite page on the Arduino website? Challenge(s): Go the Arduino Reference Index Page and start perusing some functions. See if you can find entries with the following headings: Caveat / Warning / Tip Further Reading:

    Warning - this gets deep!

    - AVR Libc (This is the reference for what the Arduino language is based on)

    - User Manual for the AVR Libc

    P.S.

    Ok - as much as I love the Arduino Reference page, sometimes it has errors. So if you find any, mention it on the Arduino Forum.

  • This video tutorial talks about using the random() and randomSeed() functions with Arduino. It is pretty straight forward, but there are some intricacies worth noting.

    Creating truly random numbers in Arduino is harder than you might think. The closest we can get in Arduino, and just about anywhere else, is using pseudo random numbers. That is, numbers that mimic randomness, but in fact do have a pattern if Want to fast-track your Arduino skills?

    Click here to join our 12-part HD Video Course. Why are Random Numbers with Arduino All the Same?

    The most important thing to understand when using the random() function with Arduino is that it will generate the exact same list of pseudo random numbers every time.

    So if you build a slot machine, and the first crank of the handle is a winner, then you can be sure that if you reset the Arduino board and pull the handle again - it will still be a winner the first time.

    The easy way to overcome this is using the randomSeed() function.

    This function takes a value (an integer for example), and uses the number to alter the random list generated by the random() function. The number you pass to the randomSeed() function is called a 'seed'.

    You might put randomSeed() in the setup, and then use the random() function in the loop. Something like this:

    //this variable will hold a random number generated by the random() function long randomNumber; //Set up - this is where you get things "set-up". It will only run once void setup() { //setup serial communications through the USB Serial.begin(9600); //Let's make it more random randomSeed(42); }//close setup void loop() { //generate a random number randomNumber = random(2,5); //display the random number on the serial monitor Serial.print("The Random Number is = "); Serial.println(randomNumber); }

    But there is still an issue - even though the sequence of random numbers is different when using the randomSeed() function - it will still be the same every time the sketch is run. It is just a different list of pseudo random numbers!

    One Solution to the Random Problem

    So, what to do? Lucky for us the Arduino reference has a great solution. Use the analogRead() function to read a value from an unused analog pin. Since an unused pin that has no reference voltage attached to it is basically 'floating', it will return a "noise" value. This noise value can seed the randomSeed() function to produce differing sequences of random numbers every time the sketch is run.

    Below is the sketch from the video using analogRead() and randomSeed() in unison:

    /*How to use the random() and randomSeed() function YOU WILL NEED: (3) LEDs (3) 220OHM resistors (1) Jumper Wire (4) Hot cakes CIRCUIT: Connect a resitor to pin 2 and then to a breadboard. Connect the long leg of an LED to the resitor and the short leg to one of the ground rails on the breadboard Repeat this for the other components at pin 3 and 4 Coonect the ground on the breadboard to one of the Arduino GND pins. Created JUL 2014 by Michael James https://programmingelectronics.com/thearduinocourse */ //Declare and initialize LED pin variables int LED_1 = 2; int LED_2 = 3; int LED_3 = 4; //this variable will hold a random number generated by the random() function long randomNumber; //Set up - this is where you get things "set-up". It will only run once void setup() { //setup serial communications through the USB Serial.begin(9600); //Let's print a start messgae to the serial monitor when a new sequence of random numbers starts Serial.println("Starting new Random Number Sequence"); //set the LED pins as outputs pinMode(LED_1, OUTPUT); pinMode(LED_2, OUTPUT); pinMode(LED_3, OUTPUT); //Let's make it more random randomSeed(analogRead(A0)); }//close setup //The loop() runs over and over again void loop() { //generate a random number randomNumber = random(2,5); //display the random number on the serial monitor Serial.print("The Random Number is = "); Serial.println(randomNumber);

    Well, hopefully that was random enough for you! If you enjoy this tutorial, I highly recommend checking out our free Arduino Crash Course (You can sign up below).

  • Ever ever spent too much time searching for a 220 ohm resistor or just one more jumper wire?

    Are you sure you had that extra LED, LDR, [Fill in the blank], but have no idea where it went?

    Do you just want to throw up a quick circuit and get to coding?

    Travel a lot and want an easy way to learn Arduino on the road?