Section outline
-
-
-
-
Wokwiにアクセスし,Arduino Unoを選びます。
次のような回路を作成し三角の緑のボタンを押すとLEDが点灯します。
なお,抵抗値は次のような計算により300Ωです。
5Vに接続。LED両端電圧を2V,流す電流を10mAとすると,
5=R×10×10^{-3}+2よりR=300Ωとなります。
電源5Vに接続しているので,プログラム不要です。

-
-
-
-
-
WorkwiでArduino unoを選びます。
次のような回路を作成します。

プログラムは下を貼り付けます。次に緑の三角のボタンを押すとLEDが点滅します。
int LED = 10; //変数LEDに10を代入
void setup() {pinMode(LED, OUTPUT);//PD10を出力に設定}
void loop() {digitalWrite(LED, HIGH);//P10の電圧を5Vにする=点灯delay(300); //0.3秒待機digitalWrite(LED, LOW);//P10の電圧を0Vにする=消灯するdelay(300); //0.3秒待機}
-
-
-
-
-
次のような回路を組みます。

なお、次の図のようにLibrary Managerにおいて,servo_mortorを追加します。
パルス幅で回転角を調整します。
#include <Servo.h>
int SERVO_SOKET = 9; //ソケット番号の指定
Servo myServo; // サーボモータ制御用のオブジェクト
void setup() {myServo.attach(9); // サーボモーターをデジタルピン9に接続}
void loop(){myServo.write(0); // パルス幅0.5m秒delay(1000); // 1秒停止myServo.write(90); // パルス幅1.45m秒delay(1000);myServo.write(180); // パルス幅2.4m秒delay(1000);}
-
-
-
-
-
下の回路図を作成します。なお、抵抗はすべて330Ωです。

下のプログラムを動作させると、1分経つと1番目のLEDが消え、2分経過で2番目のLEDが消え、3分で3番目のLEDが消えます。
// ピンを設定int LED_1 = 13;int LED_2 = 12;int LED_3 = 8;
void setup() {// ピンのモードを出力に設定pinMode(LED_1, OUTPUT);pinMode(LED_2, OUTPUT);pinMode(LED_3, OUTPUT);}
void loop() {digitalWrite(LED_1, HIGH); //LED_1を点灯digitalWrite(LED_2, HIGH); //LED_2を点灯digitalWrite(LED_3, HIGH); //LED_3を点灯
delay(60000); //1分待つdigitalWrite(LED_1, LOW); //LED_1を消灯
delay(60000); //1分待つdigitalWrite(LED_2, LOW); //LED_2を消灯
delay(60000); //1分待つdigitalWrite(LED_3, LOW); //LED_3を消灯
delay(3000); //終了後、3秒待つ}
-
-
-
-
-
次のような回路を組みます。

なお,LEDの配置は次の図のようです。

(プログラム例)
void setup() {for (int i = 2; i <= 10; i++) {pinMode(i, OUTPUT);}randomSeed(analogRead(0));}
void loop() {int ptnData = random(0, 512);
// iが2から10まで増えながら、順番に書き込むfor (int i = 2; i <= 10; i++) {// i-2 とすることで、ピン2のときビット0、ピン10のときビット8を読み込むdigitalWrite(i, bitRead(ptnData, i - 2));}
delay(1000);}
-
-
-
-
-
回路はその1と同じです。

(プログラム例2)
// 全部が点滅してから,ランダムに光りだす。
void setup() {// すべてのピン(2〜10)を出力に設定for (int i = 2; i <= 10; i++) {pinMode(i, OUTPUT);}randomSeed(analogRead(0));
// --- オープニング演出:3回点滅 ---for (int count = 0; count < 3; count++) {// すべて全灯for (int i = 2; i <= 10; i++) { digitalWrite(i, HIGH); }delay(200);// すべて消灯for (int i = 2; i <= 10; i++) { digitalWrite(i, LOW); }delay(200);}delay(500); // 少し間を置いてから本編へ}
void loop() {// メイン:一斉ランダム点灯int ptnData = random(0, 512);
for (int i = 2; i <= 10; i++) {digitalWrite(i, bitRead(ptnData, i - 2));}
delay(1000);} -
-
-
-
-
-
Arduino 本体のメモリ容量は小さいです。後で記します。このためにポインタの理解が必要なことがあります。ポインタの動作を少しだけ理解しましょう。下の図のようにプログラムを貼り付けます。

(コード)
void setup() {Serial.begin(9600); //9600bpsでシリアルポートを開く}
void loop() {int A = 1, B = 0; //[1] int型変数A,Bを宣言してそれぞれ1,0を格納int *P1, *P2; //[2] ポインタ変数の宣言の仕方その1(参考)int* P[] = {NULL, NULL}; //[3] ポインタ変数の宣言の仕方その2(以下使用)P[0] = &A; //[4] int型変数Aの前に"&"を付けるとAのアドレスを返しポインタ変数P[0]に格納Serial.println((int)P[0]); //[5] ポインタ変数P[0]に格納されたアドレスをシリアル出力可能なint型にして出力P[1] = P[0]; //[6] ポインタ変数P[0]のアドレスをポインタ変数P[1]にコピー可能Serial.println(A); //[7] int型変数Aをシリアル出力*P[1] = 2; //[8] P[1]の住所の中身を2に設定Serial.println(A); //[9] int型変数Aをシリアル出力B = *P[1] + 1; //[10] 変数BにP[1]の住所の中身に1を足した数を格納Serial.println(B); //[11] int型変数Bをシリアル出力delay(3000); //[12] 3秒待つ}出力に関しては、次のように解釈できます。
(参考)
Arduino UNO R3のメモリ容量は、プログラム保存用のFlashメモリが32KB(うち0.5KBはブートローダー使用)、実行時データ保持用のSRAM(メインメモリ)が2KB、電源OFFでもデータが消えないEEPROMが1KBです。
ポイント:なぜこれを使うの?
ポインタを理解すると以下のような高度なことができるようになります。
-
関数の外にある値を書き換える: 別の関数に「住所」だけを教えて、中身を更新してもらう。
-
メモリの節約: 大きなデータをコピーするのではなく、住所だけをやり取りして処理する。
-
配列の操作: 配列の先頭住所を使って、効率的にデータを読み書きする。
メモリの種類と容量- Flashメモリ(プログラムメモリ): 32KB (32,768バイト)
- スケッチ(プログラム)を保存する領域で、書き換え可能ですが、書き換え回数に制限があります。
- SRAM(静的RAM・メインメモリ): 2KB (2,048バイト)
- プログラム実行中に変数などを一時的に保存する領域です。電源を切ると消えます。
- EEPROM(不揮発性メモリ): 1KB (1,024バイト)
- 電源を切ってもデータが消えない領域で、設定値などを永続的に保存するのに使います。
-
-
-
-
-
-
Opened: Tuesday, 13 January 2026, 12:00 AMDue: Tuesday, 31 March 2026, 12:00 AM
-
-
-