Raspberry pi pico1
やっとraspberry Pi picoが届きました。
まず回路を考え、基板に仮組みして今回やることは
1 LED 4回路 ---Lチカ 一回路はGP25で基板上にあるLED
2 SW 2回路 ---(1回路はレセット用)
3 I2C 3回路 ---LCD(AQM1602XA-GWB-11C) ATH25(温湿度) ADT7410(温SW度のみ)

回路はこんな感じです。
Pi Picoもスケッチを用いて、プログラム出来ることが解ったので、このコンパイラを使ってプログラムを試してみたいと思います。
STEP1-2 まずはLチカから、ついでにSTEP2のSW1テストも含めて、もう一つのスイッチはリセット用の端子に繋げましたので、テストとしては、押してリスタート出来るかだけです。
(try1.ino)
void setup() {
pinMode(11, OUTPUT); // GP11を出力に設定
pinMode(15, OUTPUT); // GP15を出力に設定
pinMode(17, OUTPUT); // GP17を出力に設定
pinMode(25, OUTPUT); // GP25を出力に設定-基板上のLED
pinMode(13, INPUT_PULLUP); //GP13を入力に設定
}
void loop() {
if (digitalRead(13) == LOW){
digitalWrite(11, HIGH); // 点灯
digitalWrite(16, LOW); // 消灯
digitalWrite(17, HIGH); // 点灯
digitalWrite(25, LOW); // 消灯
delay(1000);
digitalWrite(11, LOW); // 消灯
digitalWrite(16, HIGH); // 点灯
digitalWrite(17, LOW); // 消灯
digitalWrite(25, HIGH); // 点灯
delay(1000);
}
else{
digitalWrite(11, LOW); // 消灯
digitalWrite(16, LOW); // 消灯
digitalWrite(17, LOW); // 消灯
digitalWrite(25, LOW); // 消灯
}
}
何とかうまく動きました。
ほとんどArduinoNanoと同じ構文でうごきました。
STP3 その1
次にI2Cを動かしてみたいと思います。
最初に表示器が動けばセンサーからの数値が直接目に見える形に出来ます。センサーのテストなどでぐっとらくになります。
LCDは秋月から仕入れました。AQM1602XA-GWB-11Cです。アドレスは0x3Eです。
Nanoと同じLCDなので、初期処理用ルーチンとコマンド書き込みルーチンと書き込みルーチーンを最初に作っておけば、良いので殆ど同じ関数で出来ました。後は、書き込みは自由に出来ます。
void init_LCD(void){
delay(100);
writeCommand(0x38); // FUNCTION SET
delay(20);
writeCommand(0x39); // IS=1
delay(20);
writeCommand(0x14); // INT OSC FREQUENCY
delay(20);
writeCommand(0x73); // CONTRAST SET 0,1,2,3
delay(20);
writeCommand(0x56); // CONTRAST SET 4,5
delay(20);
writeCommand(0x6C); // F0LLOWER CONTROL
delay(20);
writeCommand(0x38); // IS=0
delay(20);
writeCommand(0x0C); // Display ON
delay(20);
writeCommand(0x01); // Clear Display
delay(20);
writeCommand(0x06); // Entry Mode
delay(20);
}
これがLCDの初期関数でarduino Nanoと全く同じです。スケッチの
void setup(void){...}
の中に書き込みます。
動くようになってからCONTRAST SETの値を少しずつ変えて見ると表示が明るくなったり濃くなったりします。自分の見やすい数値を見つけ値を固定します。
下記は、LCDへのコマンド書き込みルーチンです。
void writeCommand(char t_command){
Wire.beginTransmission(DEVICE_ADDRESS);
Wire.write(0x00);
Wire.write(t_command);
Wire.endTransmission();
delay(10);
}
下記は, LCDへのデーター書き込みルーチンです。
void writeData(char t_data){
Wire.beginTransmission(DEVICE_ADDRESS);
Wire.write(0x40);
Wire.write(t_data);
Wire.endTransmission();
delay(1);
}
上記コマンド書き込みルーチンとデーター書き込みルーチンがあれば、取りあえず表示は何でも出来ちゃうことになります。
STP3 その2
で、上記を組み合わせて文字を表示させるところまで、もって行きます。
/* Board name : Arduino Nano */
/* LCD : AQM1602XA-GBW-IIC/Adr=0x3E */
#include <Arduino.h>
#include <Wire.h>
#define DEVICE_ADDRESS 0x3E // AQM1602XA-GBW-IIC/0x3E
char line1[] = "AQM1602XA-GBWII";
char line2[] = "yoshikon.com ";
char test[] = "1234567890123456"; // テスト用
void init_LCD(void);
void writeComent1(void);
void writeComent2(void);
void init_aht25(void);
void readData(void);
void writeData(char t_data);
void writeCommand(char t_command);
void setup(void) {
Wire.setClock(115200);
Wire.begin();
init_LCD();
Wire.beginTransmission(DEVICE_ADDRESS);
Wire.write(0x20);
Wire.write(0x01);
Wire.endTransmission();
writeCommand(0x02);
for (int i = 0; i < sizeof(line2); i++) {writeData(line2[i]);}
delay(2000);
}
void loop(void) {
writeComment1();
delay(2000);
writeComment2();
delay(2000);
}
void writeComent1(void){ // test0とtest1をLCDに書き込み
writeCommand(0x02);
for(int i = 0; i < sizeof(test0); i++){ // test0をLCD上段に書き込み
writeData(test0[i]);
delay(1);
}
for(int i = 0; i < sizeof(test1); i++){ // test1をLCD下段に書き込み
writeCommand(0x40 + 0x80 + i);
writeData(test1[i]);
delay(1);
}
void writeComent2(void){ // line0とline1をLCDに書き込み
writeCommand(0x02);
for(int i = 0; i < sizeof(line1); i++){ // line1をLCD上段に書き込み
writeData(line1[i]);
delay(1);
}
for(int i = 0; i < sizeof(line0); i++){ // line0をLCD下段に書き込み
writeCommand(0x40 + 0x80 + i);
writeData(line0[i]);
delay(1);
}
}
10行目から15行目の関数宣言はないとエラーが出てしまいます。arduino Nanoのコンパイラではそんな事なかったのですが、loop関数より下に書いた関数はPicoでは宣言しないといけないみたいです。普通のCと同じです。
ここまでで、LCDの書き込みまで出来ました。
センサーの読み取り計算がまだ残っています。これは
次ページにて行います。