2020年8月31日月曜日

一緒

VISUAL STUDIO ここまで成功

下部の画面に大きく字を描きます。
---------------------------------
    private void FormBallGame_Load(object sender, EventArgs e)
        {
            DrawCircleSelectPictureBox();
            DrawmainPictureBox();
        }
            private void DrawCircleSelectPictureBox()
            {
                int height = selectPictureBox.Height;
                int width = selectPictureBox.Width;

                Bitmap selectCanvas = new Bitmap(width, height);
                using (Graphics g = Graphics.FromImage(selectCanvas))
                {
                g.FillEllipse(Brushes.LightBlue, 0, 0, height, height);
                selectPictureBox.Image = selectCanvas;
                } 
            }
       
        private void DrawmainPictureBox()
        {
            Bitmap canvas = new Bitmap(mainPictureBox.Width, 
           mainPictureBox.Height);
            using(Graphics g = Graphics.FromImage(canvas))
            {
                 g.DrawString("萩",
                   new Font("HG教科書体",
                 mainPictureBox.Height - mainPictureBox.Height / 4 ),
                   Brushes.Gray,0,0,new StringFormat());
                  mainPictureBox.Image = canvas;
            }
        }
-------------------------------------
 文字のフォントをメイリオにするとはみ出ました。ちなみに、
mainPictureBox.Height - mainPictureBox.Height / 4 ←を3にするとうまく表示されます。

VISUAO STUDIO 再挑戦

画面作成は、前と同様簡単にできました。

さて、描画です。ここからつまづいたのです。
本のとおり、プログラムを打ち込みましたが、using ・・・はこのバージョンでは仕え居ないと表示されます。受けつけてくれないのです。仕方なくこれをはずし、

無理矢理のプログラム(おそらくGraphicsが開放されない)でやってみると、
できました。
なおも、本のプログラムを見ていると、using・・・の最後に)が2つあるのです。
---------------------------------
    private void FormBallGame_Load(object sender, EventArgs e)
        {
            DrawCircleSelectPictureBox();
        }
            private void DrawCircleSelectPictureBox()
            {
                int height = selectPictureBox.Height;
                int width = selectPictureBox.Width;

                Bitmap selectCanvas = new Bitmap(width, height);
                Graphics g = Graphics.FromImage(selectCanvas);
               
                g.FillEllipse(Brushes.LightBlue, 0, 0, height, height);
                selectPictureBox.Image = selectCanvas;
               
            }
-----------------------------------
気まぐれに、usingの後に(を付けてみると、
正しいプログラム
------------------------------------
 private void FormBallGame_Load(object sender, EventArgs e)
        {
            DrawCircleSelectPictureBox();
        }
            private void DrawCircleSelectPictureBox()
            {
                int height = selectPictureBox.Height;
                int width = selectPictureBox.Width;

                Bitmap selectCanvas = new Bitmap(width, height);
            using (Graphics g = Graphics.FromImage(selectCanvas))
                {
                g.FillEllipse(Brushes.LightBlue, 0, 0, height, height);
                selectPictureBox.Image = selectCanvas;
                } 
            }
------------------------------------
できました!
本には、「(」がなかったのです。

2020年8月30日日曜日

人感センサーと圧電(たぶん)スピーカー

音程の出るスピーカーを圧電スピーカーと思っていて、なかなか音が出ませんでした。
また、人感センサーの接続が間違っていないか自信を持つのに数時間。
どうもスピーカーがだめなのだと気づくまでに数時間。
スピーカーを取り替え、接続も間違っていたのを直し、
やっと音が出るようになりました。
前回、人感センサーを使ったときは、シリアルモニターに数字が(1)表示されるようになっていましたが、今回は音が出るので人に反応しているのを実感できました。
やっとできて、しばらくピーピー鳴らせています。
------------------------------------------------------------------------------
const int sensorPin = 2;
const int buzzerPin = 8;

void setup(){
  pinMode( buzzerPin ,OUTPUT);
  pinMode( sensorPin,INPUT);
}

void loop(){
  boolean sensorState = digitalRead(sensorPin);
  digitalWrite( buzzerPin ,sensorState);
  delay(10);
}
----------------------------------

散歩直後



arduino ステッピングモーター Stepper motor 28BYJ-48 Parameters

中でモーターが動く音はしているのですが、軸が回りません。
どうも、モーターがダメなのかもしれません。







------------------------------------
const int dirPin = 12;
const int stepPin = 13;

void setup(){
  digitalWrite(dirPin,OUTPUT);
  pinMode(stepPin,OUTPUT);
}

void loop(){
  digitalWrite(dirPin,HIGH);
  for ( int i=0; i < 200 ; i++){
    digitalWrite(stepPin,HIGH);
    delay(1);
    digitalWrite( stepPin,LOW);
    delay(1);
  }
  delay(1000);
  digitalWrite( dirPin,LOW);
  for (int i = 0;i<200;i++){
    digitalWrite( stepPin,HIGH);
    delay(1);
    digitalWrite( stepPin,LOW);
    delay(1);
  }
  delay(1000);
}
-------------------------------

2020年8月29日土曜日

尻尾



arduino ステッピングモーター STSPIN220

はんだつけをしました。
パーツが小さい。
少し、「ハ」の字形に広がってしまいました。
 


arduino 回路図を描く

今自分が回路図を描く予定はありませんが、回路図を描くいいツールがどこかにないか探していました。
↓こちらは有料です。検索で出てくるのはこれが多く、無料で手に入れる方法がないか調べてみましたがダメでした。
https://fritzing.org/
そして、このサイト。
うまく描くことができます。ただ、ダウンロードすると、*BRDという拡張子のファイルになています。これを表示させるアプリは残念ながら持っていないのです。
画面上で画像コピーが早いかもしれません。

2020年8月28日金曜日

無警戒


警戒した目


VISUAL STUDIO ついに助けを借りる 間違いボール探しゲーム

本に沿って進めていましたが、ダメ。
コードを書き込んでいくところで、理解できなくなりました。
https://www.shuwasystem.co.jp/book/9784798058986.html
サンプルファイルを手に入れることにしました。
https://www.shuwasystem.co.jp/support/7980html/5898.html
「間違いボール探し」までの解説が大変丁寧だったのですが、この部分から解説が中途半端というか、この先は自分で考えてということなのか、飛躍しています。
サンプルファイルを見ないことには理解できません。
この本で挫折するのは、おそらくこのあたりからだと思います。

まず、292ページの表5-30と290ページの表5-29が同じでした。292ページの表5-30はSplitContainerコントロールのプロパティの設定のはずなのです。292ページの表5-30の下に画面の図があり、これでなんとか理解できます。

PictureBOxに円を描くところでは、1つの円を描く例が示されています。しかし、本来のコードは、5つの円を描くことになっていて5つ描くプログラムは、
--------------------------------------
 // 上のselectPictureBoxに円を描く
        private void DrawCircleSelectPictureBox()
        {
            int height = selectPictureBox.Height; // 高さ
            int width = selectPictureBox.Width; // 幅
            Bitmap selectCanvas = new Bitmap(width, height);
            using (Graphics g = Graphics.FromImage(selectCanvas))
            {
                for (int i = 0; i < ballCount; i++)
                {
                    g.FillEllipse(brushes[i], i * height, 0, height, height);
                }
                selectPictureBox.Image = selectCanvas;
            }
        }
----------------------------------
324ページです。
下の部分に画像を表示するプログラムは、
----------------------------------
 // 下のPictureBoxに描画する
        private void DrawMainPictureBox(Brush color, string text, bool trueFlag)
        {
            int height = mainPictureBox.Height; // 高さ
            int width = mainPictureBox.Width; // 幅
                                              //描画先とするImageオブジェクトを作成する
            if (canvas == null)
            {
                canvas = new Bitmap(width, height);
            }
            using (Graphics g = Graphics.FromImage(canvas))
            {
                // 正解用の背景色にする
                if (trueFlag)
                {
                    g.FillRectangle(Brushes.LightPink, 0, 0, width, height);
                }
                else
                {
                    g.FillRectangle(Brushes.White, 0, 0, width, height);
                }
                //背景に引数で指定した文字列を描画する
                g.DrawString(text,
                new Font(fontName, height - height / 4),
                color, 0, 0, new StringFormat());
                //MainPictureBoxに表示する
                mainPictureBox.Image = canvas;
            }
------------------------------------
325ページです。
つまり、305ページまでは解説です。まだ時間がかかります。


からない。しばらくながめてみます。

arduino ソレノイドプッシュ型


-----------------------------------
int solenoid = 13;
int tempo = 100;

void setup(){
  pinMode(solenoid,OUTPUT);
}
void loop(){

  for (int k=0; k<3; k++){
    for (int i=0;i<3;i++){
      digitalWrite(solenoid,HIGH);
      delay(tempo);
      digitalWrite(solenoid,LOW);
      delay(tempo);
       }
       delay(tempo*3);
  }
        digitalWrite(solenoid,HIGH);
      delay(tempo);
      digitalWrite(solenoid,LOW);
      delay(tempo);
     delay(tempo*9);
}
-------------------------------

2020年8月27日木曜日

お隣が気になる


できものがほとんどなくなりました

arduino DCモーターを自由に動かす






電池の補助が必要でした。
----------------------------------
int IN1 = 5;
int IN2 = 6;

void setup(){
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
}

void loop(){
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  delay(1000);
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,HIGH);
  delay(1000);
 digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  delay(1000);
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,HIGH);
  delay(1000);
}
----------------------------------

arduino サーボモーター 可変抵抗器つき



------------------------------------
# include <Servo.h>
Servo myServo;
 void setup(){
  myServo.attach(9);
 }

void loop(){
  int sensorValue = analogRead(A0);
  int angle = map(sensorValue,0,1023,0,90);
  myServo.write(angle);

  delay(500);
}
-----------------------------------

2020年8月26日水曜日



arduino サーボモーター

これも復習です。


-------------------------------
#include <Servo.h>

Servo myservo;


void setup() {
  myservo.attach(9);
  myservo.write(0);
  delay(1000);
  myservo.write(90);
  delay(1000);
  myservo.write(-90);
  delay(1000);

}

void loop() {

}
--------------------------------------

arduino キャラクターを動かす

ディスプレイが表示されるようになったので、キャラクターが動くプログラムを入れてみました。スケッチ例のリキッドクリスタル→カスタムキャラクターを選ぶと人形が動くのが見られます。
手が上下します。

スケッチ例のリキッドクリスタル「LiquidCrystal」を見ていて、試しに「CustomCharacter」以外のものを試してみたところ、いろいろな表示を見ることができました。これは楽しい。

2020年8月25日火曜日



arduino 液晶ディスプレイ SD1602HULB-XA-G-G と LCD1602

手間取りました。
私の持っているディスプレイは、LCD1602。
本に紹介されているディスプレイは、SD1602HULB-XA-G-G。
ピンの数は同じなので、苦労はないと思っていたのですがこれが大間違い。
ピンの場所が対照的な感じで配置されているのです。本の通りにブレッドボートに指すことができません。
私の元のディスプレイ配線と比べてみました。そして、可変抵抗器のピンが3番とつながっていることがわかりました。ここを元にしてピンの場所を考えると、ピンの配置を左上に置いて3番ピンを見ると、1番ピンは左端だとわかりました。つまり本の配置の1番ピンは、私の持っているディスプレイの左端。
ここからワイヤを指し直し本のプログラムを流し入れてみましたが、変化がありません。でも、そのうち、暗~く数値が表示されているのが見えました。
ということは、ほとんど接続は合っている。
どうやれば、明るくなるのか。これでまた、いくつかのピンを指し直しました。
そしてついに見つけました。本の16番ピンは私のディスプレイではAのピン、15番ピンはkのピンだったのです。
また、本には文字列はシングルクォーテーション「'」でくくってあったのですが、ダブルクォーテーション「""」でした。
ディスプレイには、気温が表示されるとあるのですが、どうも計算式がおかしいようです。

------------------------------------
# include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);

void setup(){
  lcd.begin(16,2);
}

void loop(){
  int sensorValue = analogRead(A0);
  float temperature = sensorValue * (5.0 / 1023.0) * 100;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Temp" + String(temperature) + " C");

  delay(1000);
 
}
------------------------------------

arduino フルカラーLEDを使う

これも前に一度やっています。




何度も見ています。
とても美しい。

2020年8月24日月曜日

様子うかがい


arduino 可変抵抗器でLEDの明るさを調整する

これは前に一度やっています。
再挑戦です。


arduino delay関数でLEDの明るさを調整する

短い時間のdelay関数を設定することで明るさの調整ができました。
---------------------------------
void setup(){
pinMode(13,OUTPUT);
}

void loop() {
digitalWrite(13,HIGH);
delay(1);
digitalWrite(13,LOW);
delay(3);
}
-------------------------------
delayの数値を変えて実行すると明るさが変わりました。