https://zenn.dev/suzuky/articles/25dab74334e6ff でdht22成功
本文のdht11をdht22にした dht11,dht22ともに配線はおなじ
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN 2 // what pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Initialize DHT sensor for normal 16mhz Arduino
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
}
void loop() {
// Wait a few seconds between measurements.
delay(2000);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius
float t = dht.readTemperature();
// Read temperature as Fahrenheit
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Compute heat index
// Must send in temp in Fahrenheit!
float hi = dht.computeHeatIndex(f, h);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("Heat index: ");
Serial.print(hi);
Serial.println(" *F");
}
https://morimori2008.web.fc2.com/contents/Arduino/i2cLCD_Arduino.html
を参考に成功 ライブラリファイルのsendをwriteにした(IDEよりの指示)
また写真ではRSTをつないでいたが、なくても動いた!
/*************************************************
* [プログラム名]
* ST7032コントローラ by Arduino
* [プログラムの説明]
* ストロベリーリナックスより購入できるLCDモジュールをI2Cで制御するプログラムです。
*
* [参考資料]
* [1]ArduinoでI2C液晶,http://blog.goo.ne.jp/sim00/e/ab138be751d447bcdb0eecaaca232214,2011/5.
* [2]ストロベリーリナックス I2C低電圧キャラクタ液晶モジュール,http://strawberry-linux.com/catalog/items?code=27001,2011/5.
*
* [LCDモジュール説明]
* LDCモジュールは16文字×2行です。
* 文字アドレスは、1行目が0x00-0x0f
* 文字アドレスは、2行目が0x40-0x4f
*
* [I/O port map]
* Arduino i2c-lcd
* Dig 2 ----- 1pin rst (pull-up 10k ohm)
* Ana 5 ----- 2pin scl (pull-up 2.2k ohm)
* Ana 4 ----- 3pin sda (pull-up 2.2k ohm)
* GND ------- 4pin
* 5V -------- 5pin
***********************************************/
// ********** ヘッダファイルをインクルード **********
#include <Wire.h>
// ********** define宣言 **********
#define ASC_LF 0x0a // ASCIIコードでLF(ラインフィード)
#define ASC_CR 0x0d // 同じく、CR(キャリッジリターン)
#define LCD_LN 2 // LCDに表示可能な行数
#define resetPin 2
#define sdaPin 18 // analog pin 4
#define sclPin 19 // analog pin 5
#define i2c_adr 0x3e // LCD表示器のアドレス(I2C上での識別ID番号です)
#define contrast 10 // 0-63 5V系だとかなり小さくする
// ********** 外部変数 **********
char line_num = 0;
byte lcd_head_addST47032[2] = { // LCDの各行先頭アドレス
0x00, 0x40};
// ********** サブルーチン群 **********
// LCDに関するサブルーチンはここから-----
/* */
void lcd_cmd(byte x)
{
Wire.beginTransmission(i2c_adr);
Wire.write(0x00);
Wire.write(x);
Wire.endTransmission();
return;
}
/* */
void lcd_data(byte x)
{
Wire.beginTransmission(i2c_adr);
Wire.write(0x40);
Wire.write(x);
Wire.endTransmission();
return;
}
/*---------------------------------
文字の書き込みアドレス変更
---------------------------------*/
void lcd_move(byte pos){
lcd_cmd(0x80 | pos);
return;
}
/*---------------------------------
LCDへ文字列を送信1
文字列の終端のヌル文字を検出すると出力は止まる
引数:*s 文字列の先頭アドレス(ポインタ)
---------------------------------*/
void lcd_print(char *s)
{
while(*s) {
if(*s != ASC_LF){
lcd_data((byte)*s++);
}
else{
s++; // 読み込み位置を進める
lcd_move(lcd_head_addST47032[(++line_num) % LCD_LN]); // 改行コードを読み込むと、改行させる。上手い処理方法はないかな?
line_num %= LCD_LN;
}
}
return;
}
/*---------------------------------
LCDへ文字列を送信2
文字列の終端のヌル文字を検出すると出力は止まる
表示位置を指定して出力することができます。
引数:*s 文字列の先頭アドレス(ポインタ), line_num 行番号(0~), offset 左端からの文字数
---------------------------------*/
void lcd_print(char *s, int _line_num, int _offset)
{
lcd_move(lcd_head_addST47032[_line_num % LCD_LN] + _offset);
lcd_print(s);
return;
}
/*---------------------------------
LCDに数値を表示
表示位置は前回の書き込みの後になります。
引数:v 表示したい数値
---------------------------------*/
void lcd_print(int v)
{
int i, j, k;
i = 0; // 桁数を数える
j = v;
while(j){
j /= 10;
i++;
}
while(i--) { // 表示させる
j = 1;
for(k = 0; k < i; k++)j *= 10; // 最上位の桁から取り出す
k = (v / j) % 10;
lcd_data((byte)(k + 0x30)); // ASCIIコードなので、0x30を足す
}
return;
}
/*---------------------------------
LCDに数値を表示2
表示位置は前回の書き込みの後になります。
引数:v 表示したい数値,digit 表示したい桁数, c 埋めたい文字(例えば、'0')
---------------------------------*/
void lcd_print(int v, int digit, char c)
{
int i, j, k, v_digit;
i = 0; // 桁数を数える
j = v;
while(j){
j /= 10;
i++;
}
if(v == 0)i = 1;
v_digit = i; // 渡された数値の桁数を覚えておく
while(digit > 0) { // 表示させる
if(digit > v_digit){
lcd_data((byte)c); // 指定文字で埋める
}
else{
i--;
j = 1;
for(k = 0; k < i; k++)j *= 10; // 最上位の桁から取り出す
k = (v / j) % 10;
lcd_data((byte)(k + 0x30)); // ASCIIコードなので、0x30を足す
}
digit--;
}
return;
}
/*---------------------------------
LCDに数値を表示3
表示位置を指定して出力することができます。
引数:v 表示したい数値, line_num 行番号(0~), offset 左端からの文字数
---------------------------------*/
void lcd_print(int v, int _line_num, int _offset)
{
lcd_move(lcd_head_addST47032[_line_num % LCD_LN] + _offset); // アドレスをセット
lcd_print(v); // 数値を表示させる
return;
}
/*---------------------------------
LCDに数値を表示3
表示位置を指定して出力することができます。
引数:v 表示したい数値,digit表示したい桁数, c 埋めたい文字(例えば、'0'), line_num 行番号(0~), offset 左端からの文字数
---------------------------------*/
void lcd_print(int v, int digit, char c, int _line_num, int _offset)
{
lcd_move(lcd_head_addST47032[_line_num % LCD_LN] + _offset); // アドレスをセット
lcd_print(v, digit, c); // 数値を表示させる
return;
}
/*---------------------------------
LCDの初期化処理
---------------------------------*/
void lcd_init()
{
// reset
delay(500);
digitalWrite(resetPin, LOW);
delay(1);
digitalWrite(resetPin, HIGH);
delay(10);
// LCD initialize
delay(40);
Wire.begin();
lcd_cmd(0x38); // function set
lcd_cmd(0x39); // function set
lcd_cmd(0x14); // interval osc
lcd_cmd(0x70 | (contrast & 15)); // contrast low
lcd_cmd(0x5c | (contrast >> 4 & 3)); // contrast high / icon / power
lcd_cmd(0x6c); // follower control
delay(300);
lcd_cmd(0x38); // function set
lcd_cmd(0x0c); // display on
lcd_cmd(0x01); // clear display
delay(2);
}
// LCDに関するサブルーチンはここまで-----
// ********** undef宣言(他のソースコードに影響しないようにundefしておく) **********
#undef ASC_LF
#undef ASC_CR
#undef LCD_LN
#undef resetPin
#undef sdaPin
#undef sclPin
#undef i2c_adr
#undef contrast
0 件のコメント:
コメントを投稿