2024/01/12(金)Arduinoボード 3品種のLDO駆動能力
搭載LDOの最大電流は下記の通り、自作の回路やシールド基板では1割程度余裕を見ておいたほうが良いと思う。
| ボード | 搭載LDO | 最大電流 |
|---|---|---|
| Arduino UNO R3 | LP2985-33DBVR | 150mA |
| Arduino Uno R4 Minima | マイコン内蔵LDO | 100mA |
| Arduino Nano Every | AP2112K-3.3 | 600mA |
がっつり3.3Vが必要な場合はVINから自前でDCDCで作るのが順当。
| ボード | 搭載LDO | 最大電流 |
|---|---|---|
| Arduino UNO R3 | LP2985-33DBVR | 150mA |
| Arduino Uno R4 Minima | マイコン内蔵LDO | 100mA |
| Arduino Nano Every | AP2112K-3.3 | 600mA |
TCA0.SINGLE.INTCTRL = 0b0 TCA0.SINGLE.CTRLA = 0b1011 TCA0.SINGLE.CTRLB = 0b11 TCA0.SINGLE.CTRLC = 0b0 TCA0.SINGLE.CTRLD = 0b0 TCA0.SINGLE.CTRLECLR = 0b0 TCA0.SINGLE.CTRLESET = 0b0 TCA0.SINGLE.CTRLFCLR = 0b0 TCA0.SINGLE.CTRLFSET = 0b0 TCA0.SINGLE.EVCTRL = 0b0 TCA0.SINGLE.INTCTRL = 0b0 TCA0.SINGLE.PER = 255 TCA0.SINGLE.CMP0 = 128 TCA0.SINGLE.CMP1 = 128 TCA0.SINGLE.CMP2 = 128TCA0.SINGLE.CTRLCなのですが、起動時は0b0だがtone()実行中は0b111になっています。
nRF5_SDK_17.1.0_ddde560\components\serializationというのがあって、どうやらMCU側はこのライブラリを使って「よろしく動かしましょう。通信プロトコルやパケットフォーマットは気にしなくてよいです。」ということが言いたそうな空気を感じました。
*** sd_ble_version_get --> 03 00 00 65 00 <-- 06 00 01 65 10 00 00 00
\nRF5_SDK_17.1.0_ddde560\components\serialization\common\ser_dbg_sd_str.cの中にありました。どうやらこれが一覧っぽいです。
S132 v17.1.0
static const char * sd_functions[] = {
/* 0x60 offset */
"SD_BLE_ENABLE", /*0x60*/
"SD_BLE_EVT_GET", /*0x61*/
"SD_BLE_UUID_VS_ADD", /*0x62*/
"SD_BLE_UUID_DECODE", /*0x63*/
"SD_BLE_UUID_ENCODE", /*0x64*/
"SD_BLE_VERSION_GET", /*0x65*/
"SD_BLE_USER_MEM_REPLY", /*0x66*/
"SD_BLE_OPT_SET", /*0x67*/
"SD_BLE_OPT_GET", /*0x68*/
"SD_BLE_CFG_SET", /*0x69*/
"SD_BLE_UUID_VS_REMOVE", /*0x6A*/
"SD_UNKNOWN", /*0x6B*/
...
抜粋。
public class TapButton
{
float x;
float y;
float w;
float h;
String s;
int fontsize;
boolean visible;
TapButton(float _x, float _y, float _w, float _h, String _s)
{
x = _x;
y = _y;
w = _w;
h = _h;
s = _s;
fontsize = int(w / s.length());
visible = true;
}
void Draw()
{
if (visible)
{
rectMode(CENTER);
textAlign(CENTER, CENTER);
textSize(fontsize);
fill(255);
rect(x, y, w, h);
fill(0);
text(s, x, y, w, h);
}
}
void Visible(boolean b)
{
visible = b;
}
boolean Tapped(TouchEvent touchEvent)
{
int tapNum = touchEvent . getNumPointers( ) ;
float tap_x, tap_y;
if (0 < tapNum)
{
tap_x = touchEvent . getPointer( 0 ).x ;
tap_y = touchEvent . getPointer( 0 ).y ;
if ( abs(tap_x - this.x) < (w/2) && abs(tap_y - this.y) < (h/2) && this.visible)
{
return true;
}
}
return false;
}
}
import android.os.Bundle;
import android.view.WindowManager;
static int LetterBox = 16; //Letterbox of application draw area
int sizeW, sizeH;
boolean flag_backpress = false;//back button press flag
boolean flag_exit = false;
TapButton tb1 = new TapButton(500, 400, 300, 100, "button1");
TapButton tb2 = new TapButton(500, 600, 300, 100, "button2");
public void settings()
{
sizeW = displayWidth - LetterBox;
sizeH = displayHeight - LetterBox;
size(sizeW, sizeH);
}
public void setup()
{
frameRate(30);
}
void backPressed()
{
flag_backpress = true;
}
public void draw()
{
//DRAWING PROCESS --------------------------------------------------------------
background(150);
if (mousePressed)
{
textSize(50);
fill(0);
textAlign(TOP, LEFT);
text(Integer.toString(mouseX) + "," + Integer.toString(mouseY), 0, 500);
}
textSize(32);
fill(0);
textAlign(TOP, LEFT);
text(Integer.toString(displayWidth), 0, 150);
text(Integer.toString(displayHeight), 300, 150);
ellipseMode(CENTER); // Set ellipseMode to CENTER
fill(100); // Set fill to gray
ellipse(mouseX, mouseY, 100, 100); // Draw gray ellipse using CENTER mode
//TapButton draw ---------------------------------------------------------------
tb1.Draw();
tb2.Draw();
//MAIN LOOP PROCESS ------------------------------------------------------------
if (flag_backpress)
{
flag_backpress = false;
textAlign(CENTER, CENTER);
textSize(100);
fill(255);
rect(0, sizeH/2 - 80, sizeW, 160, 32);
fill(0);
text("Exiting...", sizeW/2, sizeH/2);
flag_exit = true;
} else if (flag_exit)
{
delay(1000);
exit();
}
}
public void touchStarted(TouchEvent touchEvent)
{
int tapNum = touchEvent . getNumPointers( ) ;
float x = touchEvent . getPointer( 0 ).x ;
float y = touchEvent . getPointer( 0 ).y ;
//TapButton
if (tb1.Tapped(touchEvent))
{
tb1.Visible(false);
}
if (tb2.Tapped(touchEvent))
{
tb1.Visible(true);
}
}
if (tb1.Tapped(touchEvent))
{
tb1.Visible(false);
}
のようにifで判定してタップ時の処理を書きます。