teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

OLEDディスプレイに表示される文字がeと出ます

2021/02/11 06:34

投稿

m-mikann
m-mikann

スコア2

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,118 @@
1
+ ```#include <Wire.h>
2
+ #define OLED_ADRS 0x3C //SA0=L(SA0=H の場合は 0x3D)
3
+ int DisplayON = 0x0F,
4
+ ClearDisplay = 0x01,
5
+ ReturnHome = 0x02;
6
+
7
+ int DS1307_ADDRESS=0x68;
8
+ int val=0;
9
+ byte command;
10
+
11
+
12
+ void setup() {
13
+ Wire.begin(); //Wire ライブラリを初期化し、I2C マスタとしてバスに接続
14
+ init_oled();
15
+ printTime();
16
+ setDay();
17
+ setTime();
18
+ }
19
+ void loop() {
20
+
21
+ writeData(r_sec);
22
+
23
+
24
+
25
+ writeCommand(0x20+0x80); //2 行目の先頭
26
+
27
+
28
+ contrast_max(); //輝度を最大に設定
29
+ while(1){}
30
+ }
31
+ //----main end----
32
+ void writeData(byte t_data)
33
+ {
34
+ Wire.beginTransmission(OLED_ADRS);
35
+ Wire.write(0x40);
36
+ Wire.write(t_data);
37
+ Wire.endTransmission();
38
+ delay(1);
39
+ }
40
+ void writeCommand(byte t_command)
41
+ {
42
+ Wire.beginTransmission(OLED_ADRS);
43
+ Wire.write(0x00);
44
+ Wire.write(t_command);
45
+ Wire.endTransmission();
46
+ delay(10);
47
+ }
48
+ void contrast_max(){
49
+ writeCommand(0x2a);//RE=1
50
+ writeCommand(0x79);//SD=1
51
+ writeCommand(0x81);//コントラストセット
52
+ writeCommand(0xFF);//輝度MAX
53
+ writeCommand(0x78);//SD を0にもどす
54
+ writeCommand(0x28); //2C=高文字 28=ノーマル
55
+ delay(100);
56
+ }
57
+ void setTime(){
58
+ byte hour=(Serial.read()<<4);
59
+ hour=hour+(Serial.read()&0x0F);
60
+ byte minute=(Serial.read()<<4);
61
+ minute=minute+(Serial.read()&0x0F);
62
+ byte sec=(Serial.read()<<4);
63
+ sec=sec+(Serial.read()&0x0F);
64
+ Wire.beginTransmission(DS1307_ADDRESS);
65
+ Wire.write(val);
66
+ Wire.write(sec);
67
+ Wire.write(minute);
68
+ Wire.write(hour);
69
+ Wire.endTransmission();
70
+ }
71
+
72
+ void setDay(){
73
+ byte year=(Serial.read()<<4);
74
+ year=year+(Serial.read()&0x0F);
75
+ byte month=(Serial.read()<<4);
76
+ month=month+(Serial.read()&0x0F);
77
+ byte day=(Serial.read()<<4);
78
+ day=day+(Serial.read()&0x0F);
79
+ byte day_of_week=(Serial.read()&0x0F);
80
+ Wire.beginTransmission(DS1307_ADDRESS);
81
+ Wire.write(0x03);
82
+ Wire.write(day_of_week);
83
+ Wire.write(day);
84
+ Wire.write(month);
85
+ Wire.write(year);
86
+ Wire.endTransmission();
87
+ }
88
+ void printTime(){
89
+ Wire.beginTransmission(DS1307_ADDRESS);
90
+ Wire.write(val);
91
+ Wire.endTransmission();
92
+ Wire.requestFrom(DS1307_ADDRESS,7);
93
+ byte r_sec=Wire.read();
94
+ byte r_minute=Wire.read();
95
+ byte r_hour=Wire.read();
96
+ byte r_day_of_week=Wire.read();
97
+ byte r_date=Wire.read();
98
+ byte r_month=Wire.read();
99
+ byte r_year=Wire.read();
100
+
101
+ }
102
+ void init_oled()
103
+ {
104
+ delay(100);
105
+ writeCommand(ClearDisplay); // Clear Display
106
+ delay(20);
107
+ writeCommand(ReturnHome); // ReturnHome
108
+ delay(2);
109
+ writeCommand(DisplayON); // Send Display on command
110
+ delay(2);
111
+ writeCommand(ClearDisplay); // Clear Display
112
+ delay(20);
113
+ }
114
+ コード
1
- RTC(DS1307)とOLEDディスプレイ(so1602aw)のコードを参考にしてr_secを表示するコードを作ってみたのですがうまくいきません。
115
+ ```RTC(DS1307)とOLEDディスプレイ(so1602aw)のコードを参考にしてr_secを表示するコードを作ってみたのですがうまくいきません。
2
116
  何が間違っていますか?
3
117
 
4
118