Contents
hide
Summary of Arduino Lecture Sample Code
The article provides a comprehensive collection of short Arduino sketches demonstrating various programming concepts, focusing on beginner to intermediate levels. These sketches cover basics like blinking LEDs, serial communication, analog/digital input-output, tone generation, servo motor control, state machines, signal processing, feedback loops, and sensor interfacing. The examples emphasize non-blocking event loops, signal smoothing, proportional feedback control with motor drivers, and more complex tasks such as simple harmonic motion and metronome simulation.
Parts used in the Arduino Lecture Sample Code:
- Arduino board (e.g., Arduino Uno or Mega)
- Onboard LED (pin 13 or LED_BUILTIN)
- External switch (e.g., tactile switch on digital pins 8 or 9 or tilt ball switch on pin 2)
- External LED (digital pin 4)
- Piezo speaker or buzzer (digital pin 5)
- Servo motor (digital pins 6, 9, or 23 depending on example)
- Analog sensor inputs (e.g., photoresistor on A0, position sensor on A0, tilt sensors on A8, A9, A10)
- DRV8833 dual H-bridge motor driver with control lines (pins 5, 6, 9, 10)
- Optional: Mega Pinball Shield (for servo and sensors)
This collection of short Arduino sketches introduces a variety of programming concepts. The comments are minimal as these are intended to be starting points for explanation.

blink
// 1. blink the onboard Arduino LED on pin 13. // 2. demonstrate setup(), loop() // 3. demonstrate pinMode(), digitalWrite(), delay() void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
plots
#include <Servo.h> // 1. demonstrate use of Serial port for debugging output // 2. demonstrate IDE graphing: see Tools/Serial Plotter void setup() { Serial.begin(115200); } void loop() { Serial.println(sin(4 * 6.28 * 0.001 * millis())); }
plotting
// 1. use the Arduino IDE plotting utility to visualize an analog signal // 2. demonstrate analogRead() void setup() { Serial.begin(115200); } void loop() { int input = analogRead(A0); Serial.println(input); delay(20); }
clocks
// 1. measure execution time // 2. demonstrate the firmware clock // 3. demonstrate debugging on the serial port void setup() { Serial.begin(115200); } long last_time = 0; void loop() { long now = micros(); Serial.print(millis()); Serial.print(" "); Serial.print(micros()); Serial.print(" "); Serial.println(now - last_time); last_time = now; }
sos
// Demonstration of the following: // 1. digitalWrite() to the onboard LED // 2. delay() // 3. Morse code signaling void setup() { pinMode(13, OUTPUT); } void dot() { digitalWrite(13, HIGH); delay(200); digitalWrite(13, LOW); delay(200); } void dash() { digitalWrite(13, HIGH); delay(600); digitalWrite(13, LOW); delay(200); } void endchar() { delay(400); } void loop() { dot(); dot(); dot(); endchar(); // S dash(); dash(); dash(); endchar(); // O dot(); dot(); dot(); endchar(); // S delay(1000); }
digitalio
// Demonstration of the following: // 1. digitalRead() from external switch // 2. digitalWrite() to external LED const int SWITCH_PIN = 8; const int LED_PIN = 4; void setup() { Serial.begin(115200); pinMode(LED_PIN, OUTPUT); pinMode(SWITCH_PIN, INPUT); } void loop() { int value = digitalRead(SWITCH_PIN); Serial.println(value); digitalWrite(LED_PIN, value); delay(50); }
sounds
tones
// 1. generate tones on a speaker on pin 5 // 2. demonstrate tone(), noTone(), delay() const int SPEAKER_PIN = 5; void setup() { // empty body, tone() configures a pin for output } void loop() { // play A4 "concert A" tone(SPEAKER_PIN, 440); delay(1000); // silence noTone(SPEAKER_PIN); delay(1000); // play E5 perfect fifth using 3/2 "just intonation" ratio tone(SPEAKER_PIN, 660); delay(1000); }
bit-bang-two-tone
// 1. generate complex waveform on a speaker on pin 5 // 2. demonstrate execution speed, firmware clocks, bit-banging logic const int SPEAKER_PIN = 5; void setup() { pinMode(SPEAKER_PIN, OUTPUT); } void loop() { long now = micros(); // 2274 usec period ~= 439.75 Hz ~= A4 bool square1 = (now % 2274) < 1136; // 1516 usec period ~= 659.63 HZ ~= E5 bool square2 = (now % 1516) < 758; digitalWrite(SPEAKER_PIN, square1 ^ square2); }
scale
// 1. generate chromatic tones on a speaker on pin 5 // 2. demonstrate for loops, int and float variables const int SPEAKER_PIN = 5; void setup() { } void loop() { float freq = 440.0; for (int i = 0; i < 24; i = i + 1) { tone(SPEAKER_PIN, freq); delay(200); freq = freq * 1.0595; } noTone(SPEAKER_PIN); delay(1000); }
melody
// 1. generate tones on a speaker on pin 5 // 2. demonstrate table lookup // 3. demonstrate Serial debugging const int SPEAKER_PIN = 5; void setup() { Serial.begin(115200); Serial.println("Hello!"); } const float note_table[] = { 440.0, 523.25, 659.26, 523.25, 659.26, 523.25/2, 440.0, 659.26, 659.26*2, 523.25, -1.0 }; void loop() { for (int i = 0; note_table[i] > 0.0 ; i = i + 1) { Serial.print("Note: "); Serial.println(note_table[i]); tone(SPEAKER_PIN, note_table[i]); delay(200); } noTone(SPEAKER_PIN); delay(500); }
note-table
// 1. generate tones on a speaker on pin 5 // 2. demonstrate MIDI notes and equal temperament scales // 3. use of a const byte table (unsigned 8 bit integers) const int SPEAKER_PIN = 5; const byte notes[] = {60, 62, 64, 65, 67, 69, 71, 72}; const int notes_len = sizeof(notes) / sizeof(byte); const int MIDI_A0 = 21; const float freq_A0 = 27.5; void setup() { Serial.begin(115200); } void loop() { for (int i = 0; i < notes_len; i = i + 1) { int note = notes[i]; float freq = freq_A0 * pow(2.0, ((float)(note - MIDI_A0)) / 12.0); Serial.println(freq); tone(SPEAKER_PIN, freq); delay(500); } noTone(SPEAKER_PIN); delay(1000); }
arpeggio
// 1. generate tones on a speaker on pin 5 // 2. demonstrate functional abstraction // 3. demonstrate MIDI notes and equal temperament scales // 4. demonstrate for loop with multiple expressions // 5. demonstate global constants with 'const float' and 'const int' const int SPEAKER_PIN = 5; void setup() { Serial.begin(115200); } void loop() { arpeggio(60, 3, 4); // 60 is the MIDI number for note C4 silence(); arpeggio(60, 3, 8); arpeggio(85, -6, 8); silence(); silence(); } void arpeggio(int start, int interval, int length) { for (int note = start, count = 0; count < length; note = note + interval, count = count + 1) { float freq = midi_to_freq(note); Serial.println(freq); tone(SPEAKER_PIN, freq); delay(200); } } const int MIDI_A0 = 21; const float freq_A0 = 27.5; float midi_to_freq(int midi_note) { return freq_A0 * pow(2.0, ((float)(midi_note - MIDI_A0)) / 12.0); } void silence(void) { noTone(SPEAKER_PIN); delay(500); }
tonestep
// 1. read a switch input on pin 9 // 2. generate tones on a speaker on pin 5 // 3. demonstrate a simple state machine // 4. demonstrate Serial debugging const int SWITCH_PIN = 9; const int SPEAKER_PIN = 5; void setup() { Serial.begin(115200); Serial.println("Hello!"); } const float note_table[] = { 440.0, 523.25, 659.26, 523.25, 659.26, 523.25/2, 440.0, 659.26, 659.26*2, 523.25, -1 }; int nextnote = 0; /// The loop function is called repeatedly by the Arduino system. In this /// example, it executes once per cycle of the switch input. void loop() { while(digitalRead(SWITCH_PIN) != 0) { // Busywait for the switch to be pressed. Note that the body of the while // is empty, this just loops reading the switch input until it goes low. } // The following is executed once per switch cycle, right after the switch is pressed. float freq = note_table[nextnote]; Serial.print("Note: "); Serial.println(freq); tone(SPEAKER_PIN, freq); // advance to the next note, looping at the end nextnote = nextnote + 1; if (note_table[nextnote] < 0) nextnote = 0; // Busywait for the switch to be released: loop until the switch input goes high. while(digitalRead(SWITCH_PIN) == 0) { } // The following is executed once, right after the switch is released. noTone(SPEAKER_PIN); }
servos
metronome
// demo use of a library, hobby servo output #include <Servo.h> Servo your_chosen_servo_name; void setup() { your_chosen_servo_name.attach(9); } void loop() { your_chosen_servo_name.write(45); delay(500); your_chosen_servo_name.write(135); delay(500); }
sine-servo
#include <Servo.h> Servo indicator; const int SERVO_PIN = 6; void setup() { Serial.begin(115200); indicator.attach(SERVO_PIN); } // global step counter int step = 0; void loop() { // Perform a smooth sinusoidal movement around the center. float phase = step * (2*M_PI/60); float angle = 90 + 90*sin(phase); step = step + 1; indicator.write(angle); // degrees Serial.println(angle); delay(50); // milliseconds }
sine-metronome
// demo use of a trajectory generator function #include <Servo.h> const int SERVO_PIN = 9; Servo wiggling_servo; void setup(void) { Serial.begin(115200); wiggling_servo.attach(SERVO_PIN); } void loop(void) { // Perform a smooth movement around the center several times. for (int i = 0; i < 4; i = i+1) { // Define a few constants governing the motion. Note that this example // uses a C++ style of declaration which looks more like a normal variable // declaration, but whose value cannot be changed. const float center = 90.0; // in degrees const float magnitude = 30.0; // in degrees const float period = 4.0; // in seconds, duration of cycle const float interval = 0.020; // in seconds, duration of each step int cycle_steps = period / interval; for (int step = 0; step < cycle_steps; step++) { // Compute the 'phase angle' for the sine function. Note that the sin() // function requires an angle in radians. float phase = step * (2*M_PI/cycle_steps); // Compute the angle to send to the servo. float angle = center + magnitude * sin(phase); wiggling_servo.write(angle); // Wait for one sampling period. delay(1000*interval); } } Serial.println("cycle done."); }
table-metronome
// demo use of a lookup table #include <Servo.h> const int SERVO_PIN = 9; Servo svo; void setup(void) { svo.attach(SERVO_PIN); } const int angles[12] = { 45, 0, 135, 0, 90, 0, 90, 45, 135, 90, 180, 0 }; void loop(void) { for (int idx = 0; idx < 12; idx = idx + 1) { svo.write(angles[idx]); delay(500); } }
shm-servo
// 1. demonstrate use of a differential equation generator function // 2. demonstrate use of a function as motion primitive #include <Servo.h> const int SERVO_PIN = 9; Servo svo; // ================================================================ // Simple Harmonic Motion oscillator, e.g. unit-mass on spring with damping. const float k1 = 4*M_PI*M_PI; // 1 Hz; freq = (1/2*pi) * sqrt(k/m); k = (freq*2*pi)^2 const float b1 = 2.0; // default damping const float dt = 0.02; // integration time step (same as command rate) float q = 0.0; // initial position float qd = 0.0; // initial velocity // ================================================================ void setup(void) { Serial.begin(115200); svo.attach(SERVO_PIN); } // ================================================================ void loop() { ringing_servo(90.0, k1, b1, 1.5); ringing_servo(45.0, k1, b1, 1.5); ringing_servo(90.0, k1, b1, 2.5); } // ================================================================ // Create a simple harmonic motion around position 'q_d' using spring constant 'k' and // damping 'b' for 'duration' seconds. void ringing_servo(float q_d, float k, float b, float duration) { while (duration > 0.0) { // calculate the derivatives float qdd = k * (q_d - q) - b * qd; // integrate one time step q += qd * dt; qd += qdd * dt; // update the servo svo.write(q); // print the output for plotting Serial.println(q); // delay to control timing delay((int)(1000*dt)); duration -= dt; } }
event loops
non-blocking
// 1. Blink the onboard Arduino LED on pin 13. // 2. Demonstrate a non-blocking event loop. // 3. Demonstrate micros() and timing calculations. // 4. Note the absence of delay(). For comparison, see blink.ino. void setup(void) { pinMode(LED_BUILTIN, OUTPUT); } void loop(void) { static unsigned long last_update_clock = 0; unsigned long now = micros(); unsigned long interval = now - last_update_clock; last_update_clock = now; static long led_blink_timer = 0; static bool led_blink_state = false; const long led_blink_interval = 500000; led_blink_timer -= interval; if (led_blink_timer <= 0) { led_blink_timer += led_blink_interval; led_blink_state = !led_blink_state; digitalWrite(LED_BUILTIN, led_blink_state); } }
delay-with-poll
void setup(void) { pinMode(LED_BUILTIN, OUTPUT); } /****************************************************************/ void delay_and_poll(long microseconds) { unsigned long last_update_clock = micros(); while (microseconds > 0) { unsigned long now = micros(); unsigned long interval = now - last_update_clock; last_update_clock = now; microseconds -= interval; static long led_blink_timer = 0; static bool led_blink_state = false; const long led_blink_interval = 500000; led_blink_timer -= interval; if (led_blink_timer <= 0) { led_blink_timer += led_blink_interval; led_blink_state = !led_blink_state; digitalWrite(LED_BUILTIN, led_blink_state); } } } /****************************************************************/ void loop(void) { // entering state 0 delay_and_poll(1000000); // entering state 1 delay_and_poll(1000000); // entering state 2 delay_and_poll(1000000); // entering state 3 while (true) delay_and_poll(1000000); }
responsive-delay
// 1. Demonstrate polling hardware inputs while waiting. const int SPEAKER_PIN = 5; const int SWITCH_PIN = 3; void setup(void) { Serial.begin(115200); pinMode(SWITCH_PIN, INPUT); } void loop(void) { // start the main script Serial.println("siren..."); play_siren(); // always wait for a brief silence before repeating Serial.println("silence."); noTone(SPEAKER_PIN); delay(1000); } void play_siren(void) { // begin an interruptible sequence for (int i = 0; i < 3; i++) { tone(SPEAKER_PIN, 622); if (cond_delay(300)) return; tone(SPEAKER_PIN, 440); if (cond_delay(300)) return; } } // A conditional delay. This will wait for the given number of milliseconds // unless the switch is pressed. Returns false if time is reached or true if // interrupted. bool cond_delay(int milliseconds) { unsigned long last_update_clock = millis(); while (milliseconds > 0) { unsigned long now = millis(); unsigned long interval = now - last_update_clock; last_update_clock = now; milliseconds -= interval; // check if the switch input has gone low (active-low switch circuit) if (digitalRead(SWITCH_PIN) == 0) return true; } return false; }
state machines
state-machine
// 1. Simultaneous blink the onboard Arduino LED on pin 13 and play a melody in pin 5. // 2. Demonstrate a non-blocking event loop with multiple tasks. // 3. Demonstrate micros() and timing calculations. // 4. Demonstrate switch-case state machine structure. void setup(void) { pinMode(LED_BUILTIN, OUTPUT); } /****************************************************************/ void loop(void) { static unsigned long last_update_clock = 0; unsigned long now = micros(); unsigned long interval = now - last_update_clock; last_update_clock = now; // simultaneously run several independent tasks poll_led(interval); poll_melody(interval); } /****************************************************************/ // State variables for the LED blinker. long led_blink_timer = 0; bool led_blink_state = false; const long led_blink_interval = 500000; void poll_led(unsigned long interval) { // This task uses the decrementing timer idiom (led_blink_timer). led_blink_timer -= interval; if (led_blink_timer <= 0) { // Reset the LED timer. led_blink_timer += led_blink_interval; // Toggle the LED to blink it. led_blink_state = !led_blink_state; digitalWrite(LED_BUILTIN, led_blink_state); } } /****************************************************************/ // State variables for the melody player. int melody_index = 0; long melody_elapsed = 0; const int SPEAKER_PIN = 5; const int NOTE_FS4 = 370; const int NOTE_C4 = 262; void poll_melody(unsigned long interval) { // This task uses the incrementing timer idiom (melody_elapsed). The elapsed // time value is increased on each cycle, then reset at state transitions. melody_elapsed += interval; // Following is a state machine implemented using switch-case. This example // executes state 0-5 in sequence then remains in state 5. Each state // transition is conditioned purely on elapsed time; transitions have the side // effect of changing the speaker pitch. Note that in a more general case // each state could transition to any other state or be conditioned on sensor // values. switch(melody_index) { case 0: // Initialization state: start the speaker tone and immediately transition to state 1. melody_elapsed = 0; melody_index += 1; tone(SPEAKER_PIN, NOTE_FS4); break; case 1: case 3: // Allow a tone to play for an interval, then change the tone and advance. if (melody_elapsed > 1000000) { melody_elapsed = 0; melody_index += 1; tone(SPEAKER_PIN, NOTE_C4); } break; case 2: case 4: // Allow a tone to play for an interval, then change the tone and advance. if (melody_elapsed > 1000000) { melody_elapsed = 0; melody_index += 1; tone(SPEAKER_PIN, NOTE_FS4); } break; case 5: default: // terminal state: script is done noTone(SPEAKER_PIN); break; } }
signal processing
smoothing
/****************************************************************/ void setup(void) { Serial.begin(115200); } /****************************************************************/ void loop(void) { static unsigned long last_update_clock = 0; unsigned long now = micros(); unsigned long interval = now - last_update_clock; last_update_clock = now; const long sample_interval = 10000; // 10 msec, 100 Hz sampling static long sample_timer = 0; sample_timer -= interval; if (sample_timer <= 0) { sample_timer += sample_interval; int raw_value = analogRead(0); // read the current input float calibrated = ((float)raw_value) / 1024.0; // scale to normalized units static float smoothed_value = 0.0; // filtered value of the input float difference = calibrated - smoothed_value; // compute the 'error' smoothed_value += 0.1 * difference; // apply a constant gain to move the smoothed value toward the reading Serial.println(smoothed_value); } }
ringfilter
/****************************************************************/ void setup(void) { Serial.begin(115200); } /****************************************************************/ void loop(void) { static unsigned long last_update_clock = 0; unsigned long now = micros(); unsigned long interval = now - last_update_clock; last_update_clock = now; const long sample_interval = 10000; // 10 msec, 100 Hz sampling static long sample_timer = 0; sample_timer -= interval; if (sample_timer <= 0) { sample_timer += sample_interval; int raw_value = analogRead(0); float calibrated = ((float)raw_value) / 1024.0; ringfilter_put(calibrated); float velocity = ringfilter_deriv(0.01); float quadratic_params[3]; ringfilter_fit_quadratic(quadratic_params); Serial.print("v: "); Serial.print(velocity); Serial.print(" q: "); Serial.print(quadratic_params[0]); Serial.print(" "); Serial.print(quadratic_params[1]); Serial.print(" "); Serial.println(quadratic_params[2]); } }
feedback
// 1. apply proportional feedback using a dual H-bridge driver and analog position sensor // 2. demonstrate non-blocking event-loop structure // 3. demonstrate DRV8833 motor driver pulse width modulation // 4. demonstrate a smoothing filter on an analog input // Define DRV8833 control pin wiring as per CKS-1 shield board. const int MOT_A1_PIN = 5; const int MOT_A2_PIN = 6; const int MOT_B1_PIN = 10; const int MOT_B2_PIN = 9; const int POS_SENSOR_PIN = A0; /****************************************************************/ void setup(void) { // Configure the four DRV8833 control lines and set them to a quiescent state. pinMode(MOT_A1_PIN, OUTPUT); pinMode(MOT_A2_PIN, OUTPUT); pinMode(MOT_B1_PIN, OUTPUT); pinMode(MOT_B2_PIN, OUTPUT); digitalWrite(MOT_A1_PIN, LOW); digitalWrite(MOT_A2_PIN, LOW); digitalWrite(MOT_B1_PIN, LOW); digitalWrite(MOT_B2_PIN, LOW); // Start the serial port for the console. Serial.begin(115200); } /****************************************************************/ void loop(void) { static unsigned long last_update_clock = 0; unsigned long now = micros(); unsigned long interval = now - last_update_clock; last_update_clock = now; poll_feedback_loop(interval); } /****************************************************************/ // Polling function for the feedback process: reads an analog position sensor at // regular sampling intervals, calculates a new motor speed and configures the // DRV8833 motor driver PWM outputs. const long sample_interval = 10000; // 10 msec, 100 Hz sampling long sample_timer = 0; float position = 0.0; // filtered value of the input (unit normalization) float target = 0.5; // target position (unit normalization) void poll_feedback_loop(unsigned long interval) { sample_timer -= interval; if (sample_timer <= 0) { sample_timer += sample_interval; int raw_value = analogRead(POS_SENSOR_PIN); // read the current input float calibrated = ((float)raw_value) / 1024.0; // scale to normalized units // first-order smoothing filter to reduce noise in the position estimate float difference = calibrated - position; // compute the 'error' in the sensor reading position += 0.2 * difference; // apply a constant gain to move the smoothed value toward the reading // calculate a proportional position control update float position_error = target - position; // compute the position error float control_output = 2.0 * position_error; // apply a proportional position gain int control_pwm = constrain((int)(256.0 * control_output), -255, 255); set_motor_pwm(control_pwm, MOT_A1_PIN, MOT_A2_PIN); } } /****************************************************************/ // Set the current speed and direction for either of the DRV8833 channels. // // Parameters: // pwm : integer velocity ranging from -255 to 255. // IN1_PIN : either MOT_A1_PIN or MOT_B1_PIN // IN2_PIN : either MOT_A2_PIN or MOT_B2_PIN // // (Note: uses 'fast-decay' mode: coast not brake.) void set_motor_pwm(int pwm, int IN1_PIN, int IN2_PIN) { if (pwm < 0) { // reverse speeds analogWrite(IN1_PIN, -pwm); digitalWrite(IN2_PIN, LOW); } else { // stop or forward digitalWrite(IN1_PIN, LOW); analogWrite(IN2_PIN, pwm); } } /****************************************************************/
shm-metronome
// demo use of a differential equation generator function #include <Servo.h> const int SERVO_PIN = 9; Servo svo; // ================================================================ // Simple Harmonic Motion oscillator, e.g. unit-mass on spring with damping. const float k = 4*M_PI*M_PI; // 1 Hz; freq = (1/2*pi) * sqrt(k/m); k = (freq*2*pi)^2 const float b = 1.0; // damping const float q_d = 90.0; // neutral spring position const float dt = 0.01; // integration time step float q = 0.0; // initial position float qd = 0.0; // initial velocity // ================================================================ void setup(void) { Serial.begin(115200); svo.attach(SERVO_PIN); } // ================================================================ void loop() { // calculate the derivatives float qdd = k * (q_d - q) - b * qd; // integrate one time step q += qd * dt; qd += qdd * dt; // update the servo svo.write(q); // logic to reset the oscillator after a cycle has completed if (fabs(qd) < 0.1 && fabs(q_d - q) < 0.1) q = 0.0; // print the output for plotting Serial.println(q); // delay to control timing delay((int)(1000*dt)); }
miscellaneous
numbers
// Demonstration of the following: // 1. properties of Arduino Uno numeric types // 2. use of Serial port for debugging output // 3. properties of Arduino numbers // Include optional floating-point numeric constants. #include <float.h> void setup() { Serial.begin(115200); } void loop() { int normal = 0; // 16 bit integer, values range from -32768 to 32767 long large = 0; // 32 bit integer, values range from -2147483648 to 2147483647 float number = 0.0; // 32 bit float, positive values range as high as 3.4028235E+38 Serial.print("bytes in an int: "); Serial.println(sizeof(normal)); Serial.print("bytes in a long: "); Serial.println(sizeof(large)); Serial.print("bytes in a float: "); Serial.println(sizeof(number)); // ----- int : 16 bits ------------------------------------------- normal = 0x7fff; Serial.print("Maximum int value: "); Serial.println(normal); // use the properties of twos-complement arithmetic to roll over to negative numbers normal = normal + 1; Serial.print("Minimum int value: "); Serial.println(normal); normal = LOW; Serial.print("Value of LOW: "); Serial.println(normal); normal = HIGH; Serial.print("Value of HIGH: "); Serial.println(normal); // ----- long : 32 bits ------------------------------------------- large = 0x7fffffff; Serial.print("Maximum long value: "); Serial.println(large); // use the properties of twos-complement arithmetic to roll over to negative numbers large = large + 1; Serial.print("Minimum int value: "); Serial.println(large); // ----- float: 32 bits ------------------------------------------- number = 0.123456789; Serial.print("0.123456789 with float precision: "); Serial.println(number, 10); // 10 decimal places number = M_PI; Serial.print("Value of pi as a float: "); Serial.println(number, 10); Serial.println("Please note, the print function does not work as expected for very large or small numbers:"); number = FLT_MAX; Serial.print("Maximum positive float value: "); Serial.println(number, 10); number = FLT_MIN; Serial.print("Minimum positive float value: "); Serial.println(number, 10); delay(1000); }
rocker
// 1. rock the toy with a servo // 2. demonstrate the Servo library #include <Servo.h> const int ARDUINO_LED = 13; const int SERVO1_PIN = 23; // on the Mega Pinball Shield const int PHOTO1_PIN = A0; // on the Mega Pinball Shield const int TILT_X_PIN = A8; // on the Mega Pinball Shield const int TILT_Y_PIN = A9; // on the Mega Pinball Shield const int TILT_Z_PIN = A10; // on the Mega Pinball Shield Servo rocker_servo; void setup() { pinMode(ARDUINO_LED, OUTPUT); rocker_servo.attach(SERVO1_PIN); Serial.begin(115200); } int lower = 60; int upper = 80; int pause1 = 100; int pause2 = 500; void loop() { digitalWrite(ARDUINO_LED, HIGH); rocker_servo.write(lower); delay(pause1); digitalWrite(ARDUINO_LED, LOW); rocker_servo.write(upper); delay(pause2); int photo1 = analogRead(PHOTO1_PIN); int tilt_x = analogRead(TILT_X_PIN); int tilt_y = analogRead(TILT_Y_PIN); int tilt_z = analogRead(TILT_Z_PIN); Serial.print("Photo1: "); Serial.print(photo1); Serial.print(" "); Serial.print("Servo lower upper pause1 pause2: "); Serial.print(lower); Serial.print(" "); Serial.print(upper); Serial.print(" "); Serial.print(pause1); Serial.print(" "); Serial.print(pause2); Serial.print(" "); Serial.print("Tilt XYZ: "); Serial.print(tilt_x); Serial.print(" "); Serial.print(tilt_y); Serial.print(" "); Serial.println(tilt_z); if (Serial.available() > 0) { lower = Serial.parseInt(); upper = Serial.parseInt(); pause1 = Serial.parseInt(); pause2 = Serial.parseInt(); while(Serial.available() > 0) Serial.read(); } }
new
switch-counter-servo
#include <Servo.h> const int SERVO_PIN = 6; const int SWITCH_PIN = 10; Servo svo; void setup(void) { pinMode(SWITCH_PIN, INPUT); svo.attach(SERVO_PIN); } bool previously_pressed = false; int angle = 0; void loop(void) { bool input = digitalRead(SWITCH_PIN); if (input) { // if the switch has not been pressed if (previously_pressed) { if (switchPressed) { // wait for the switch to be pressed while (digitalRead(SWITCH_PIN)) { // do nothing } while for (int idx = 0; idx < 12; idx = idx + 1) { svo.write(angles[idx]); delay(500); } }
iteration
// Demonstration of the following: // 1. essential program structure and logic // 2. logic using if () {} // 3. iteration using loop(), while(){}, and for(){} // 4. use of Serial port for debugging output void setup() { Serial.begin(115200); } int count = 32700; // The following shows several possible loop functions, each demonstrating // different features. The '#if 0/#endif' pairs are instructions to the // compiler to ignore an entire block of code. #if 0 void loop() { count = count + 1; Serial.println(count); delay(100); } #endif #if 0 void loop() { count = count + 1; Serial.println(count); if (count == 32767) { count = 32700; } delay(100); } #endif #if 0 void loop() { while (count < 32767) { count = count + 1; Serial.println(count); delay(100); } count = 32700; } #endif #if 0 void loop() { for (count = 32700; count < 32767; count = count+1) { Serial.println(count); delay(100); } } #endif
tilt-ball-demo
// 1. demonstrate a tilt ball switch as digital input // 2. generate tones on a speaker on pin 5 const int SPEAKER_PIN = 5; const int SWITCH_PIN = 2; void setup() { pinMode(SWITCH_PIN, INPUT); Serial.begin(115200); } void loop() { if (digitalRead(SWITCH_PIN)) { noTone(SPEAKER_PIN); // silence Serial.println("1"); } else { tone(SPEAKER_PIN, 440); // play A4 "concert A" Serial.println("0"); } }
Source: Arduino Lecture Sample Code