電子工作で誰もが最初に通る道,Lチカですが,マイコン間の比較記事がそんなに見つからなかったので,
いろいろなマイコンのいろんなLチカの書き方をまとめてみました.
※写真のLEDは抵抗入りのLEDを使っています。
抵抗の入っていないLEDを使う場合は直列に抵抗を入れるのを忘れないようにしてください
昔ながらのPICマイコン
#include <stdio.h>
#include <htc.h>
#include <pic.h>
#include <pic16f84a.h>
#define _XTAL_FREQ 8000000
void main( void )
{
__CONFIG ( FOSC_HS & WDTE_OFF & PWRTE_ON & CP_OFF );
TRISB = 0x00;
while ( 1 ) {
PORTB = 0x01;
__delay_ms(500);
PORTB = 0x00;
__delay_ms(500);
}
}
初期からあるマイコン.自分で回路を作ってはんだ付けをして,それで初めてプログラムができるという状態だったので,Lチカできたときの達成感がかなりありました
プログラムとしてはC言語で,メモリに操作でピンの状態を変更します
(XXX番地のメモリを1に書き換えたら5V出力する,など)
電子回路入門のハードルを下げたArduino
int LED = 13;
void setup() {
pinMode(LED,OUTPUT);
}
void loop() {
digitalWrite(LED,HIGH);
delay(500)
digitalWrite(LED,LOW);
delay(500)
}
回路を作らないで,いきなりプログラムがかけるようになったマイコン.
setupとloopという関数を初めて(?)導入して,
PICと同じくC言語でかけるが,メモリをいじることはなく,様々な関数を呼ぶことでピンの状態を操作します
マイコンというよりはPCのRaspberry Pi
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(3, GPIO.OUT)
while True:
GPIO.output(3, GPIO.HIGH)
sleep(0.5)
GPIO.output(3, GPIO.LOW)
sleep(0.5)
マイコンが高機能になったというより,PCにGPIOをつけたようなボード.
ほぼほぼPCなので,どの言語でもかけるが,Pythonで書いているサンプルが多い気がします
教育に最適なMicro:bit
ブロックプログラムができるので,プログラムを触ったことがない人でも使いやすくなっています
Javascriptでも書くことができて,その場合のLチカはこうなります
basic.forever(() => {
led.plot(0, 0)
basic.pause(500)
led.unplot(0, 0)
basic.pause(500)
})
最近話題のM5Stack
※写真は公式サイトより
#include <M5Stack.h>
int ledPin = 1;
int ledState = LOW;
void setup(){
M5.begin();
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, ledState);
m5.update();
}
ディスプレイとwifiがついたボード.
書き方はArduinoと互換性あり.ほかにもESP-IDFでかいたり,micro Pythonで書いたりすることができます
UIが簡単に作れるobniz
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@1.2.2/obniz.js"></script>
</head>
<body>
<div id="obniz-debug"></div>
<h1>LED</h1>
<script>
var obniz = new Obniz("OBNIZ_ID_HRERE");
obniz.onconnect = async function () {
var led = obniz.wired("LED", {anode:0, cathode:1});
while(1){
led.on();
await obniz.wait(500);
led.off();
await obniz.wait(500);
}
};
</script>
</body>
</html>
こちらもディスプレイとwifiがついたボード.
言語はHTML(javascript)で,Web上のUIと連携が簡単に作れるのが特徴です