GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
がじぇるね岡宮です。
GR-LYCHEEをArduinoライクなスケッチで行う際のリファレンス仮設です。基本的にはGR-PEACHと同様ですので、サンプルを中心に記載しようと思います。ピンマップを見てアサインされている機能を確認してください。正式なスケッチリファレンスは製品版としてFix後にgadget.renesas.comに掲載したいと思います。
GR-PEACHと同様です。pin番号はピンマップに示す通りです。
void pinMode(uint8_t pin, uint8_t mode)
補足:INPUT_PULLUPは使えません。2つの押しボタン(PIN_SW0, PIN_SW1)には外部プルアップがついてます。
void digitalWrite(uint8_t pin, uint8_t value)
int digitalRead(uint8_t pin)
int analogRead(uint8_t pin)
void analogWrite(uint8_t pin, int val)
補足:pin 0, 4はハードPWM(490Hz)でそれ以外はソフトPWM(125Hz)になります。
void analogReference(uint8_t mode)
補足:modeは基準電圧です。デフォルトは5.0Vの1024分解能です。実力通りにする場合はRAW12BITを指定して3.3Vの4096分解能にできます。
void tone(uint8_t pin, unsigned int frequency, unsigned long duration)
void noTone(uint8_t pin)
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout)
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder)
uint32_t shiftInEx(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, int len)
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
void shiftOutEx(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, int len, uint32_t val)
GR-PEACHと同様です。
uint32_t micros(void)
uint32_t millis(void)
void delayMicroseconds(unsigned int us)
void delay(unsigned long ms)
GR-PEACHと同様です。文法は省略します。min, max, abs(絶対値), constrain, pow(指数), sqrt(平方根)など使えます。
補足:map関数はmbed OS側と衝突するため、amapという関数にしています。・・・Arduino互換になってません。
long amap(long x, long in_min, long in_max, long out_min, long out_max)
GR-PEACHと同様です。irqにはピンマップのInt0~Int7を指定します。
void attachInterrupt(uint8_t irq, void (*userFunc)(void), int mode)
void detachInterrupt(uint8_t irq)
interrupts()
noInterrupts()
GR-PEACHと同様です。文法は省略します。begin, end, available, read, flush, write, availableForWriteが使用できます。peekは実装してません。
Serial : USB通信(mbedシリアル)
Serial1 : ESP32との通信
Serial4 : 0(RX), 1(TX)
Camera(uint16_t width = 640, uint16_t height = 480, uint8_t mode = VIDEO_CMOS_CAMERA)
説明:コンストラクターです。QVGA(320x240)にするときは第1,2引数で指定します。
void camera.begin()
説明:カメラの画像取得を開始します。
size_t camera.createJpeg()
説明:JPEG画像を生成して、そのサイズを返します。
uint8_t* camera.getJpegAdr()
説明:生成したJPEG画像のアドレスを返します。前記のサイズとセットで使用して写真を保存したり、転送したりします。
uint8_t* camera.getImageAdr();
説明:カメラの画像(YUV422形式)の格納アドレスを取得します。なお格納データサイズはWidth x Height x 2となります。
uint16_t camera.getWidth();
説明:カメラで取得する画像の横幅を返します。
uint16_t camera.getHeight();
説明:カメラで取得する画像の縦幅を返します。
シャッター(ボタン0)を押したらSDに保存するサンプルです。プログラムの中にある日付はRTCに使用され、その値がファイルのタイムスタンプになります。
#include <Arduino.h>#include <Camera.h>#include <SD.h>#include <RTC.h>Camera camera(640, 480);RTC rtc;void dateTime(uint16_t* date, uint16_t* time) { int year, mon, day, hour, min, sec, week; rtc.getDateTime(year, mon, day, hour, min, sec, week); *date = FAT_DATE(year, mon, day); *time = FAT_TIME(hour, min, sec);}void setup() { Serial.begin(9600); Serial.println("start"); pinMode(PIN_SW0, INPUT); pinMode(PIN_SW1, INPUT); pinMode(PIN_LED_GREEN, OUTPUT); pinMode(PIN_LED_YELLOW, OUTPUT); pinMode(PIN_LED_ORANGE, OUTPUT); pinMode(PIN_LED_RED, OUTPUT); camera.begin(); rtc.begin(); rtc.setDateTime(2017, 6, 17, 14, 1, 0); SdFile::dateTimeCallback(&dateTime); if (!SD.begin()) { Serial.println("Card failed, or not present."); digitalWrite(PIN_LED_RED, HIGH); while (1) ; } else { Serial.println("Card founded."); } Serial.println("Click button0 to take a picture."); digitalWrite(PIN_LED_GREEN, HIGH);}void loop() { static int count = 0; if (digitalRead(PIN_SW0) == 0) { char filename[13]; sprintf(filename, "image%d.jpg", count); File file = SD.open(filename, FILE_WRITE); if (file) { digitalWrite(PIN_LED_ORANGE, HIGH); size_t size = camera.createJpeg(); uint8_t* adr = camera.getJpegAdr(); for (size_t i = 0; i < size; i++) { file.write(*adr); adr++; } file.close(); Serial.print("Saved a picture as "); Serial.println(filename); digitalWrite(PIN_LED_ORANGE, LOW); count++; } else { Serial.println("Failed to open file."); digitalWrite(PIN_LED_RED, HIGH); while (1) ; } }}
500msごとに割り込み処理をするサンプルです。MsTimer2を使ってます。
#include <Arduino.h>#include <MsTimer2.h>void flash() { static boolean output = HIGH; digitalWrite(PIN_LED_GREEN, output); Serial.println(millis()); output = !output;}void setup() { pinMode(PIN_LED_GREEN, OUTPUT); MsTimer2::set(500, flash); // 500ms period MsTimer2::start();}void loop() {}
mochiさん、ご回答遅くなりすみません。Int0~7は割り込み番号を示します。
例えばInt7はピン7に割り当たっていますので、以下のコードを実行したときにピン7のHigh/Low変化に応じてLEDが点灯/消灯します。(・・・あ、LEDでGREENを指定しているのに赤が光りますね。次のスケッチテンプレートで修正しようと思います。)
#include "Arduino.h"int ledpin = PIN_LED_GREEN;int intpin = 7;volatile int state = LOW;void blink(){ state = !state;}void setup(){ pinMode(ledpin, OUTPUT); pinMode(intpin, INPUT); attachInterrupt(7, blink, CHANGE);}void loop(){ digitalWrite(ledpin, state);}
具体的なご説明を頂きましてありがとうございます。Interrupt の略だったのですね。Arduino で Interrupt 機能を使用したことがありませんでしたが、 今回のご説明で理解することができました。