カテゴリー
学術

Flutter AppにTextFieldを追加してみた

Flutter AppにTextFieldを追加してみた
Flutter AppにTextFieldを追加してみた

lib/my_app.dart

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:my_app_01/my_first_page.dart';
import 'package:my_app_01/my_home_page.dart';

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      localizationsDelegates: AppLocalizations.localizationsDelegates,
      supportedLocales: AppLocalizations.supportedLocales,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
          appBar: AppBar(
            bottom: const TabBar(
              tabs: [
                Tab(icon: Icon(Icons.looks_one)),
                Tab(icon: Icon(Icons.looks_two)),
                Tab(icon: Icon(Icons.looks_3)),
              ],
            ),
            title: const Text('Tabs Demo'),
          ),
          body: const TabBarView(
            children: [
              MyFirstPage(),
              Icon(Icons.looks_two),
              MyHomePage(title: 'Flutter Demo Home Page'),
            ],
          ),
        ),
      ),
    );
  }
}

lib/my_first_page.dart

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

class MyFirstPage extends StatefulWidget {
  const MyFirstPage({Key? key}) : super(key: key);

  @override
  State<MyFirstPage> createState() => _MyFirstPageState();
}

class _MyFirstPageState extends State<MyFirstPage> {
  late TextEditingController _controller;

  @override
  void initState() {
    super.initState();
    _controller = TextEditingController();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(AppLocalizations.of(context)!.firstPage),
      ),
      body: Container(
        padding: const EdgeInsets.all(8),
        child: Column(
          children: <Widget>[
            const Text('First Page'),
            TextField(
              controller: _controller,
              onSubmitted: (String value) async {
                await showDialog<void>(
                  context: context,
                  builder: (BuildContext context) {
                    return AlertDialog(
                      title: const Text('Title'),
                      content: Text(
                          '"$value", which has length ${value.characters.length}.'),
                      actions: <Widget>[
                        TextButton(
                          onPressed: () {
                            Navigator.pop(context);
                          },
                          child: const Text('OK'),
                        ),
                      ],
                    );
                  },
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}

lib/l10n/app_en.arb

{
    "helloWorld": "Hello World!",
    "@helloWorld": {
      "description": "The conventional newborn programmer greeting"
    },
    "firstPage": "First Page","@firstPage": {"description": "First Page Title"}
}

lib/l10n/app_ja.arb

{
    "helloWorld": "こんにちは。",
    "firstPage": "最初のページ"
}
カテゴリー
学術

Flutter AppにBottomNavigationBarを追加してみた

 アプリでよくある画面の下の方にタブバーを追加してみました。サンプルのまま追加しました。

Flutter AppにBottomNavigationBarを追加してみた
Flutter AppにBottomNavigationBarを追加してみた

lib/my_home_page.dart

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _selectedIndex = 0;
  static const TextStyle optionStyle =
      TextStyle(fontSize: 30, fontWeight: FontWeight.bold);
  static const List<Widget> _widgetOptions = <Widget>[
    Text(
      'Index 0: Home',
      style: optionStyle,
    ),
    Text(
      'Index 1: Business',
      style: optionStyle,
    ),
    Text(
      'Index 2: School',
      style: optionStyle,
    ),
  ];

  void _onItemTapped(int index) {
    setState(() {
      _selectedIndex = index;
    });
  }

  int _counter = 0;
  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(AppLocalizations.of(context)!.helloWorld),
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
      bottomNavigationBar: BottomNavigationBar(
        items: const <BottomNavigationBarItem>[
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
            label: 'Home',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.business),
            label: 'Business',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.school),
            label: 'School',
          ),
        ],
        currentIndex: _selectedIndex,
        selectedItemColor: Colors.amber[800],
        onTap: _onItemTapped,
      ),
    );
  }
}
カテゴリー
学術

Flutter AppにTabbarを追加する

 タブで画面を切り替えられるようにTabbarを追加してみます。画面の上側に表示されるTabbarです。

Flutter AppにTabbarを追加
Flutter AppにTabbarを追加

lib/my_app.dart

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:my_app_01/my_home_page.dart';

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      localizationsDelegates: AppLocalizations.localizationsDelegates,
      supportedLocales: AppLocalizations.supportedLocales,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
          appBar: AppBar(
            bottom: const TabBar(
              tabs: [
                Tab(icon: Icon(Icons.looks_one)),
                Tab(icon: Icon(Icons.looks_two)),
                Tab(icon: Icon(Icons.looks_3)),
              ],
            ),
            title: const Text('Tabs Demo'),
          ),
          body: const TabBarView(
            children: [
              Icon(Icons.looks_one),
              Icon(Icons.looks_two),
              MyHomePage(title: 'Flutter Demo Home Page'),
            ],
          ),
        ),
      ),
    );
  }
}

 GoogleのMaterial Iconsは凄いですね。ダウンロードしてビルドプロジェクトにアイコン画像を登録しなくても、いきなりコード内で使用できます。アプリで使用するアイコンが全てMaterial Iconsだったら開発効率が良くなります。

カテゴリー
学術

Flutter Appの多言語化

 アプリの開発途中から多言語化対応するとあちこち修正しなければならなくなるので最初から多言語化前提で開発を行います。日本語のみであったとしてもアプリとしては多言語化対応しているけれども日本語のみ設定されている状態が望ましいです。

端末の言語設定を英語にする
端末の言語設定を英語にする
画面のテキストが英語になる
画面のテキストが英語になる
端末の言語設定を日本語にする
端末の言語設定を日本語にする
画面のテキストが日本語になる
画面のテキストが日本語になる

l10n.yaml

arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart

pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  intl: ^0.17.0
#  intl_translation: 0.17.10+1

 intl_translation: 0.17.10+1はintl: ^0.17.0と合わないのでインストールできませんでした。

なので

return MaterialApp(
  onGenerateTitle: (BuildContext context) =>
      DemoLocalizations.of(context).title,

以降はできません。

lib/my_app.dart

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:my_app_01/my_home_page.dart';

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      localizationsDelegates: AppLocalizations.localizationsDelegates,
      supportedLocales: AppLocalizations.supportedLocales,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

lib/my_home_page.dart

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(AppLocalizations.of(context)!.helloWorld),
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

lib/l10n/app_en.arb

{
    "helloWorld": "Hello World!",
    "@helloWorld": {
      "description": "The conventional newborn programmer greeting"
    }
}

lib/l10n/app_ja.arb

{
    "helloWorld": "こんにちは。"
}
カテゴリー
学術

Defaultアプリのdartファイルをクラス毎に分割する

 実際のアプリを開発するときは、起動時の処理、アプリの初期、トップ画面は別のクラスにしそのソースファイルは分割されているのでDefaultのアプリもそのように分割してみます。

main.dart

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

分割後

main.dart

import 'package:flutter/material.dart';
import 'package:my_app_01/my_app.dart';

void main() {
  runApp(const MyApp());
}

my_app.dart

import 'package:flutter/material.dart';
import 'package:my_app_01/my_home_page.dart';

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

my_home_page.dart

import 'package:flutter/material.dart';

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}
カテゴリー
学術

Repositoryが無くてもgit init

 ローカルだけで作業をするにしても履歴が確認できるのでプロジェクトのディレクトリでgit initとしておくと便利です。MACは標準でgitコマンドが使えます。

初めてgitを使うとき

git config --global user.email "mail@xxxxx.co.jp"
git config --global user.name "Name"

プロジェクトのディレクトリーに移動して

git init
git branch -m main
git commit --allow-empty -m "first commit"
カテゴリー
学術

Flutter Default Application

 Android StudioでFlutter Projectを新規作成するとデフォルトのアプリケーションが作成されます。

Android Studio Flutter Default Application
Android Studio Flutter Default Application
Flutter Default Application for iOS
Flutter Default Application for iOS

iOSや

Flutter Default Application for Android
Flutter Default Application for Android

Androidの実機でデバック実行しFlutterでアプリを開発する環境ができているか確認します。

カテゴリー
学術

Flutterのインストールで行った環境作り

.zshrc

export PATH=$PATH:/Applications/Android\ Studio.app/Contents/jre/Contents/Home/bin
export PATH=$PATH:/Users/developer/Documents/flutter/bin
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jre/Contents/Home
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

各環境

developer@Mac-mini my_app_01 % gem -v     
3.2.22

developer@Mac-mini my_app_01 % ruby --version
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-darwin20]

developer@Mac-mini my_app_01 % rbenv versions                                   
  system
* 3.0.2 (set by /Users/developer/.rbenv/version)

developer@Mac-mini my_app_01 % brew -v
Homebrew 3.2.6
Homebrew/homebrew-core (git revision f909c2126a; last commit 2021-08-08)
Homebrew/homebrew-cask (git revision b4da68444e; last commit 2021-08-08)

developer@Mac-mini my_app_01 % xcode-select --version                         
xcode-select version 2384.

developer@Mac-mini my_app_01 % gem list ffi

*** LOCAL GEMS ***

ffi (1.15.3)
public_suffix (4.0.6)

developer@Mac-mini my_app_01 % xcodebuild -version
Xcode 13.0
Build version 13A5201i

developer@Mac-mini my_app_01 % pod --version
1.10.2

カテゴリー
学術

Flutter DoctorでUnable to find bundled Java version.

developer@Mac-mini ~ % flutter doctor -v
[✓] Flutter (Channel master, 2.4.0-5.0.pre.166, on macOS 11.5.1 20G80
    darwin-x64, locale ja-JP)
    • Flutter version 2.4.0-5.0.pre.166 at /Users/developer/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 2dc11a85ff (2 weeks ago), 2021-07-22 17:56:03 -0700
    • Engine revision fbbb3b3f7b
    • Dart version 2.14.0 (build 2.14.0-343.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at /Users/developer/Library/Android/sdk
    • Platform android-30, build-tools 30.0.3
    • Java binary at: /Applications/Android Studio 4.2
      Preview.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6842174)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 13.0, Build version 13A5201i
    • CocoaPods version 1.10.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio
    • Android Studio at /Applications/Android Studio 4.2 Preview.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6842174)

[!] Android Studio (version 2020.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    ✗ Unable to find bundled Java version.
    • Try updating or re-installing Android Studio.

[✓] VS Code (version 1.59.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.25.0

[✓] Connected device (2 available)
    • iPhone (mobile) • XXXXXXXX-XXXXXXXXXXXXXXXX • ios            • iOS 14.7.1
      18G82
    • Chrome (web)    • chrome                    • web-javascript • Google
      Chrome 92.0.4515.131
    ! Error: iPhone is busy: Fetching debug symbols for iPhone. Xcode will
      continue when iPhone is finished. (code -10)

! Doctor found issues in 1 category.

Unable to find bundled Java version.

が消えない。

developer@Mac-mini ~ % cd /Applications/Android\ Studio.app/Contents/jre
developer@Mac-mini jre % ln -s ../jre jdk
developer@Mac-mini jre % ln -s "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk

とすると解消した。

developer@Mac-mini my_app_01 % flutter doctor -v
[✓] Flutter (Channel master, 2.4.0-5.0.pre.166, on macOS 11.5.1 20G80
    darwin-x64, locale ja-JP)
    • Flutter version 2.4.0-5.0.pre.166 at /Users/developer/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 2dc11a85ff (2 weeks ago), 2021-07-22 17:56:03 -0700
    • Engine revision fbbb3b3f7b
    • Dart version 2.14.0 (build 2.14.0-343.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    • Android SDK at /Users/developer/Library/Android/sdk
    • Platform android-30, build-tools 30.0.3
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 13.0, Build version 13A5201i
    • CocoaPods version 1.10.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio
    • Android Studio at /Applications/Android Studio 4.2 Preview.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6842174)

[✓] Android Studio (version 2020.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)

[✓] VS Code (version 1.59.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.25.0

[✓] Connected device (2 available)
    • iPhone (mobile) • XXXXXXXX-XXXXXXXXXXXXXXXX • ios            • iOS 14.7.1
      18G82
    • Chrome (web)    • chrome                    • web-javascript • Google
      Chrome 92.0.4515.131
    ! Error: iPhone is busy: Fetching debug symbols for iPhone. Xcode will
      continue when iPhone is finished. (code -10)

• No issues found!

No issues found!がやっと出た。

カテゴリー
学術

FlutterでFirebase Storage

カテゴリー
学術

#リレー で作った #過電流遮断器 を #トランス 式 #正負電源 装置に付け加えた。二次側を電球で試してみたらそれなりに動いている。 #electronicscircuits #electronic #電子回路 #電子工作

カテゴリー
学術

最初 #リレーの #コイル 側のドライブに #トランジスター を使おうとしたら #商用電源 側なので電圧が高く素人が安全な回路を組めるとも思われなくなったので、直列に入れる抵抗値を少し大きくしてその抵抗の電圧だけでリレーのコイルを動かすようにした。手持ちの27Ω3Wを並列にしてそこで発生する電圧がある一定の値を超えるとリレーで回路を遮断する仕組み。40Wの #電球 は点くが60Wの電球は遮断される。概ね0.5Aの #遮断器 ができた。#electronicscircuits #electronic #電子回路 #電気回路

カテゴリー
学術

#リレー で #過電流遮断器 を作るために #ダイオード を4個使って #ブリッジ整流 してみた。が、配線を間違えダイオードが破裂した。100Vは怖い。

カテゴリー
学術

実験中に #ヒューズ が切れたのが癪に障ったので #リレー を使って #過電流遮断器 を作ってみる。10Ωの抵抗を3本束ねて3.3Ω、500mAが流れると1.65Vになる。これを #整流 し #ダイオード の #電圧降下 分を差し引くとリレーのドライバーの #2SC1815 の駆動がギリギリできる見込みです。#electronicscircuits #electronic #電子回路 #電子工作

カテゴリー
学術

#ヒューズ が切れた。#トランス を使った #電源 の #実験 で負荷に #電球 を使ったのは失敗だった。電球は最初抵抗値が低いのを忘れてた。40Wの電球は最初20Ωしか無くトランスの10V端子では大丈夫だったが20V端子の時にピカッと光って切れてしまいました。#electronicscircuits #electronic #電子回路

カテゴリー
学術

#電源トランス のアウトプットを #整流 してみた。 #コンデンサー をたくさん付けたせいかガラクタっぽくなった。 #electronicscircuits #electronic #電子回路 #電子工作

カテゴリー
学術

一度貼り付けた #ブレッドボード を #再利用 しようと剥がしたら電極まで取れちゃいました。取れた金具をよく見ると差し込み口に近いところだけ接触するようになっていました。奥までグイット差し込めば接触が良くなる訳ではなかったです。両面テープで #ダイソー の #MDF に貼り付けたらまた使えそうになりました。 #電子回路 #電子工作 #electronic #electronicscircuits

カテゴリー
学術

#ジャンク屋 で1個100円で買った#コンデンサー です。16V, 2200μFですが古い物だと思うので測定してみた。 #electronic #electronicscircuits #電子回路

カテゴリー
学術

#ダイソー の #竹製 のトレーを裏返してシャーシとし #電源トランス を載せてレトロ調の正負電源作る。#電子回路 #electronicscircuits #electronic

カテゴリー
学術

8080Aが10個もあるのにまだ使える環境ができていない。いつになるやら。#electronic #electronicscircuits #電子回路#microcontroller #cpu #コンピュータ