x 過去ログを見よ
OLED_SSD1306_BITMAP32x320_ir_length_071
//OLED_SSD1306_BITMAP32x320_ir_length_071
//ヘッダーファイル
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//定義
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//80-20
unsigned char qq[] = {
80, 78, 77, 76, 75, 75, 74, 73, 72, 71,
70, 69, 68, 68, 67, 66, 65, 65, 64, 63,
63, 62, 61, 61, 60, 60, 59, 58, 58, 57,
57, 56, 56, 55, 55, 54, 54, 53, 53, 52,
52, 51, 51, 50, 50, 50, 49, 49, 48, 48,
47, 47, 47, 46, 46, 46, 45, 45, 45, 44,
44, 44, 43, 43, 43, 42, 42, 42, 41, 41,
41, 41, 40, 40, 40, 40, 39, 39, 39, 38,
38, 38, 38, 37, 37, 37, 37, 37, 36, 36,
36, 36, 35, 35, 35, 35, 35, 34, 34, 34,
34, 34, 33, 33, 33, 33, 33, 32, 32, 32,
32, 32, 32, 31, 31, 31, 31, 31, 31, 30,
30, 30, 30, 30, 30, 30, 29, 29, 29, 29,
29, 29, 28, 28, 28, 28, 28, 28, 28, 28,
27, 27, 27, 27, 27, 27, 27, 27, 26, 26,
26, 26, 26, 26, 26, 26, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 24, 24, 24, 24,
24, 24, 24, 24, 24, 24, 23, 23, 23, 23,
23, 23, 23, 23, 23, 23, 22, 22, 22, 22,
22, 22, 22, 22, 22, 22, 22, 22, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20
};
//20-10
unsigned char pp[] = {
200, 199, 198, 197, 196, 196, 195, 194, 193, 193,
192, 191, 190, 190, 189, 188, 187, 187, 186, 185,
185, 184, 183, 183, 182, 181, 181, 180, 179, 179,
178, 177, 177, 176, 176, 175, 174, 174, 173, 173,
172, 171, 171, 170, 170, 169, 168, 168, 167, 167,
166, 166, 165, 165, 164, 163, 163, 162, 162, 161,
161, 160, 160, 159, 159, 158, 158, 157, 157, 156,
156, 155, 155, 154, 154, 153, 153, 152, 152, 151,
151, 151, 150, 150, 149, 149, 148, 148, 147, 147,
147, 146, 146, 145, 145, 144, 144, 144, 143, 143,
142, 142, 142, 141, 141, 140, 140, 140, 139, 139,
138, 138, 138, 137, 137, 136, 136, 136, 135, 135,
135, 134, 134, 134, 133, 133, 132, 132, 132, 131,
131, 131, 130, 130, 130, 129, 129, 129, 128, 128,
128, 127, 127, 127, 126, 126, 126, 125, 125, 125,
125, 124, 124, 124, 123, 123, 123, 122, 122, 122,
121, 121, 121, 121, 120, 120, 120, 119, 119, 119,
119, 118, 118, 118, 117, 117, 117, 117, 116, 116,
116, 116, 115, 115, 115, 114, 114, 114, 114, 113,
113, 113, 113, 112, 112, 112, 112, 111, 111, 111,
111, 110, 110, 110, 110, 109, 109, 109, 109, 108,
108, 108, 108, 107, 107, 107, 107, 107, 106, 106,
106, 106, 105, 105, 105, 105, 105, 104, 104, 104,
104, 103, 103, 103, 103, 103, 102, 102, 102, 102,
102, 101, 101, 101, 101, 101, 100, 100, 100, 100,
100
};
//10-6
unsigned char oo[] = {
100, 99, 98, 98, 97, 97, 96, 96, 95, 95,
94, 94, 93, 93, 92, 92, 91, 91, 90, 90,
90, 89, 89, 88, 88, 87, 87, 86, 86, 86,
85, 85, 84, 84, 84, 83, 83, 82, 82, 82,
81, 81, 81, 80, 80, 80, 79, 79, 78, 78,
77, 77, 76, 76, 75, 75, 74, 74, 74, 73,
73, 72, 72, 71, 71, 71, 70, 70, 69, 69,
68, 67, 66, 66, 65, 64, 63, 63, 62, 61,
61, 60, 60
};
//赤外線距離センサー(GP2Y0A21YK)の電圧から距離を求める。
//Voltage //電圧
int ir_len_i(int Voltage)
{
int ir_length; //長さ
if (Voltage >= 0 && Voltage <= 400 ) {
return (800);
}
if (Voltage >= 3120 && Voltage <= 5000) {
return (60);
}
if (Voltage >= 400 && Voltage <= 1300 ) { //80-20
ir_length = (int)qq[(Voltage - 400) >> 2];
ir_length = ir_length * 10;
} else if (Voltage >= 1300 && Voltage <= 2300 ) { //20-10
ir_length = (int)pp[(Voltage - 1300) >> 2];
} else if (Voltage >= 2300 && Voltage <= 3120 ) { //10-6
//ir_length = (int)oo[(Voltage - 2300) / 10];
ir_length = (int)oo[ ((Voltage - 2300) * 205) >> 11 ]; //10の割り算
}//end if
//戻り値
return (ir_length);
} //ir_le_i
// ビットマップデータ
// 'soiya1', 128x320px
static const unsigned char PROGMEM databytes[] = {
0x00, 0x0f, 0xf0, 0x00, 0x00, 0x1e, 0x78, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x60, 0x06, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xc0, 0x01, 0x80,
0x00, 0xc0, 0x03, 0x00, 0x00, 0x70, 0x07, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x1f, 0xfc, 0x00,
0x00, 0x0f, 0xc0, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00, 0x61, 0x80, 0x00,
0x00, 0x41, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00,
0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x3f, 0xfc, 0x00,
0x00, 0x0f, 0xf0, 0x00, 0x00, 0x1e, 0x78, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x60, 0x06, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
0x00, 0x80, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x07, 0xf8, 0x00,
0x00, 0x0f, 0xf0, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x80, 0x00, 0x7f, 0xff, 0x80,
0x00, 0x0f, 0xf0, 0x00, 0x00, 0x1e, 0x78, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x60, 0x06, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00,
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0f, 0xf8, 0x00,
0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00,
0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0xc0, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x80,
0x00, 0xc0, 0x01, 0x80, 0x00, 0x70, 0x03, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x1f, 0xfc, 0x00,
0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x70, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x03, 0x00, 0x00,
0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x60, 0x00, 0x00, 0x3c, 0x60, 0x00, 0x00, 0x78, 0x60, 0x00,
0x00, 0xe0, 0x60, 0x00, 0x00, 0xc0, 0x60, 0x00, 0x01, 0xc0, 0x60, 0x00, 0x01, 0x80, 0x60, 0x00,
0x01, 0x80, 0xe0, 0x80, 0x01, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0x80, 0x00, 0x00, 0x60, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x60, 0x00,
0x00, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0x80, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00,
0x01, 0xc0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0xf8, 0x00,
0x00, 0x0d, 0xf8, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00,
0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x80,
0x00, 0xc0, 0x01, 0x80, 0x00, 0x70, 0x03, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x1f, 0xfc, 0x00,
0x00, 0x0f, 0xf0, 0x00, 0x00, 0x1e, 0x78, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x60, 0x06, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
0x01, 0x80, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00,
0x01, 0xff, 0xfc, 0x00, 0x01, 0xe0, 0x0c, 0x00, 0x01, 0xc0, 0x06, 0x00, 0x01, 0x80, 0x03, 0x00,
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xc0, 0x01, 0x80, 0x00, 0xc0,
0x01, 0x80, 0x00, 0xc0, 0x01, 0x80, 0x00, 0xc0, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x80,
0x00, 0xc0, 0x01, 0x80, 0x00, 0x70, 0x03, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x1f, 0xfc, 0x00,
0x03, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x03, 0x80,
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1c, 0x00,
0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0, 0x00,
0x00, 0x01, 0xc0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00,
0x00, 0x1e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00,
0x00, 0xf0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00,
0x01, 0xe0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00,
0x01, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00,
0x00, 0x0f, 0xf0, 0x00, 0x00, 0x1e, 0x78, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x60, 0x06, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xc0, 0x01, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0x60, 0x06, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x1f, 0xf8, 0x00,
0x00, 0x0f, 0xf8, 0x00, 0x00, 0x1c, 0x1c, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x60, 0x03, 0x00,
0x00, 0xc0, 0x01, 0x80, 0x00, 0xc0, 0x01, 0x80, 0x01, 0x80, 0x00, 0xc0, 0x01, 0x80, 0x00, 0xc0,
0x01, 0x80, 0x00, 0xc0, 0x01, 0x80, 0x00, 0xc0, 0x01, 0x80, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x80,
0x00, 0xc0, 0x01, 0x80, 0x00, 0x70, 0x03, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x1f, 0xfc, 0x00,
0x00, 0x0f, 0xf0, 0x00, 0x00, 0x1e, 0x78, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x60, 0x06, 0x00,
0x00, 0xc0, 0x03, 0x00, 0x00, 0xc0, 0x03, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0xc0, 0x01, 0x80,
0x00, 0xc0, 0x01, 0x80, 0x00, 0x60, 0x01, 0x80, 0x00, 0x30, 0x0f, 0x80, 0x00, 0x1f, 0xff, 0x80,
0x00, 0x0f, 0xf9, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80,
0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80,
0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x80,
0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xe0, 0x00
};
//初期化
void setup() {
// I2Cアドレスは使用するディスプレイに合わせて変更する
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
}//setup
//メインループ
void loop() {
int x = 46; //数値
//アナログ値の読み込み
analogReadResolution(12); //adc 12bit mode
int sensorValue = analogRead(A0); // PB7 PIN1 031 センサーの読み取り値
//アナログ値を電圧に変換
int Voltage = (sensorValue * 3300) >> 12; //stm32 (s*3300)/4096 電圧
//赤外線距離センサー(GP2Y0A21YK)の電圧から距離を求める。
int ir_length = ir_len_i(Voltage); // 長さ
x = ir_length;
//10の割り算 0から9999までは、正しい。 stm32
#define DIV10(n) (((n*409)+((n*154)>>8))>>12)
int cn[16]; //表示用の文字列
cn[3] = ( x - (DIV10(x) * 10) ); // '0'+(d%10)
x = DIV10(x);
cn[2] = ( x - (DIV10(x) * 10) ); // '0'+(d%10)
x = DIV10(x);
cn[1] = ( x - (DIV10(x) * 10) ); // '0'+(d%10)
cn[0] = DIV10(x); // '0'+(d/10)
//桁数を求める
int keta_count = 4;
if(cn[0] == 0 && cn[1] == 0 && cn[2] == 0 ) { keta_count = 1; }
else if( cn[0] == 0 && cn[1] == 0 ) { keta_count = 2;}
else if( cn[0] == 0 ) { keta_count = 3;}
// 画面表示をクリア
display.fillScreen(BLACK);
//センター寄せの計算
//int kaisi_x[] = { 32+16 , 32 , 16 , 0 };
// 0 1 2 3
// 3-0 3-1 3-2 3-3
// 48 32 16 0
// (3-keta_count-1)*16
//文字列の開始位置
// 4 3 2 1
// 0 1 2 3
//
//4-keta_count
for(int ii=0;ii<keta_count;ii++){
display.drawBitmap( ( (3-(keta_count-1))*16 ) + ii*32 , 0,
databytes + ( cn[ii + ( 4-keta_count )] * (32 / 8) * 32), 32, 32, WHITE);
}//for
// 描画バッファの内容を画面に表示
display.display();
delay(1000); //1秒待つ
}//loop