aboutsummaryrefslogtreecommitdiffstats
path: root/docs/source/arduino/for.rst
blob: b7e2e95ea9b488b948833dc68aaf1c871aebc675 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
.. _arduino-for:

for statements
==============

Desciption
----------

The **for** statement is used to repeat a block of statements
enclosed in curly braces. An increment counter is usually used to
increment and terminate the loop. The **for** statement is useful
for any repetitive operation, and is often used in combination with
arrays to operate on collections of data/pins.



There are three parts to the **for** loop header:



``<strong>for</strong> (<strong>initialization</strong>;<strong> condition</strong>;<strong>  increment</strong>) {``



``//statement(s);``



``}``

|image0|


The **initialization** happens first and exactly once. Each time
through the loop, the **condition** is tested; if it's true, the
statement block, and the **increment** is executed, then the
**condition** is tested again. When the **condition** becomes
false, the loop ends.



Example
-------

::

    // Dim an LED using a PWM pin
    int PWMpin = 10; // LED in series with 470 ohm resistor on pin 10
    
    void setup()
    {
      // no setup needed
    }
    
    void loop()
    {
       for (int i=0; i <= 255; i++){
          analogWrite(PWMpin, i);
          delay(10);
       } 
    }



Coding Tips
-----------

The C **for** loop is much more flexible than **for** loops found
in some other computer languages, including BASIC. Any or all of
the three header elements may be omitted, although the semicolons
are required. Also the statements for initialization, condition,
and increment can be any valid C statements with unrelated
variables, and use any C datatypes including floats. These types of
unusual **for** statements may provide solutions to some rare
programming problems.



For example, using a multiplication in the increment line will
generate a logarithmic progression:

::

    for(int x = 2; x < 100; x = x * 1.5){
    println(x);
    }



Generates: 2,3,4,6,9,13,19,28,42,63,94



Another example, fade an LED up and down with one **for** loop:



::

    void loop()
    {
       int x = 1;
       for (int i = 0; i > -1; i = i + x){
          analogWrite(PWMpin, i);
          if (i = 255) x = -1;             // switch direction at peak
          delay(10);
       } 
    }



See also
--------


-  `while <http://arduino.cc/en/Reference/While>`_