ADXL 345 LED 1 W LED AOPWM D

  • Slides: 28
Download presentation

三軸加速計-ADXL 345 -電路規劃 LED輸出 1 W LED燈光 AO/PWM D 3 圖文顯示裝置 (OLED) SPI D

三軸加速計-ADXL 345 -電路規劃 LED輸出 1 W LED燈光 AO/PWM D 3 圖文顯示裝置 (OLED) SPI D 4, D 7, D 8, D 9 單晶片/MCU ATmega 328 A 5,A 4 加速度感知 ADXL 345 IIC

Ex 6_0: 顯示三軸加速器動態資料 //-------Declare-OLED-------------#include <OLED. h> OLED my. OLED; //-------Declare--ADXL 345 -----------#include <ADXL 345.

Ex 6_0: 顯示三軸加速器動態資料 //-------Declare-OLED-------------#include <OLED. h> OLED my. OLED; //-------Declare--ADXL 345 -----------#include <ADXL 345. h> #define SDA_PIN A 4 ///< pin for SDA #define SCL_PIN A 5 ///< pin for SCL ADXL 345 adxl; void Read_ADXL 345(); 讀取三軸值的函式 char ADXL_Data[18]; //存放三軸全部字串資料 uint 16_t i. X; // X軸值 uint 16_t i. Y; // Y軸值 uint 16_t i. Z; // Z軸值 char s. X; // X軸正負號 char s. Y; // Y軸正負號 char s. Z; // Z軸正負號

Ex 6_0: 顯示三軸加速器動態資料 //=====Setup ADXL 345====== adxl. begin(SDA_PIN, SCL_PIN); my. OLED. println("Ex 6 -0_ADXL_OLED");

Ex 6_0: 顯示三軸加速器動態資料 //=====Setup ADXL 345====== adxl. begin(SDA_PIN, SCL_PIN); my. OLED. println("Ex 6 -0_ADXL_OLED"); void loop() { //====Read_ADXL 345======= Read_ADXL 345(); my. OLED. set. Posi(2, 0); my. OLED. print("X="); my. OLED. print(s. X); my. OLED. println(i. X); my. OLED. print("Y="); my. OLED. print(s. Y); my. OLED. println(i. Y); my. OLED. print("Z="); my. OLED. print(s. Z); my. OLED. println(i. Z); }

三軸加速器 函式-Read_ADXL 345() void Read_ADXL 345() { uint 16_t buf[3]={0, 0, 0}; uint 16_t

三軸加速器 函式-Read_ADXL 345() void Read_ADXL 345() { uint 16_t buf[3]={0, 0, 0}; uint 16_t X 0, X 1, Y 0, Y 1, Z 0; X 0 = adxl. get. Data(0 x 32); // 取得 X 軸 低位元資料 X 1 = adxl. get. Data(0 x 33); // 取得 X 軸 高位元資料 buf[0]= ((X 1 << 8) | X 0) ; Y 0 = adxl. get. Data(0 x 34); // 取得 Y 軸 低位元資料 Y 1 = adxl. get. Data(0 x 35); // 取得 Y 軸 高位元資料 buf[1] = ((Y 1 << 8) | Y 0) ; Z 0 = adxl. get. Data(0 x 36); // 取得 Z 軸 低位元資料 Z 1 = adxl. get. Data(0 x 37); // 取得 Y 軸 高位元資料 buf[2] = ((Z 1 << 8) | Z 0) ; delay(500);

三軸加速器 函式-Read_ADXL 345() for (int i=0; i<3; i++) { if ((buf[i] & 0 x

三軸加速器 函式-Read_ADXL 345() for (int i=0; i<3; i++) { if ((buf[i] & 0 x 8000) == 0 x 8000) { buf[i] = 65535 -buf[i]; ADXL_Data[5*i] =' '; ADXL_Data[5*i+1] ='-'; ADXL_Data[5*i+2]=( buf[i]/100)+'0'; ADXL_Data[5*i+3]=( buf[i]/10%10)+'0'; ADXL_Data[5*i+4]=( buf[i]%10)+'0'; } else { ADXL_Data[5*i] =' '; ADXL_Data[5*i+1] ='+'; ADXL_Data[5*i+2]=( buf[i]/100)+'0'; ADXL_Data[5*i+3]=( buf[i]/10%10)+'0'; ADXL_Data[5*i+4]=( buf[i]%10)+'0'; } } ADXL_Data[0]='X'; ADXL_Data[5]='Y'; ADXL_Data[10]='Z'; i. X=buf[0]; i. Y=buf[1]; i. Z=buf[2]; s. X=ADXL_Data[1]; s. Y=ADXL_Data[6]; s. Z=ADXL_Data[11];

Ex 6_1: 手勢動作開關LED燈 複製Ex 6_0_ADXL_OLED 到Ex 6 -1_ADXL_LED加入下列 宣告設定資料 (三軸加速器值控制LED) //-------Declare-LED 1 W-MD 1

Ex 6_1: 手勢動作開關LED燈 複製Ex 6_0_ADXL_OLED 到Ex 6 -1_ADXL_LED加入下列 宣告設定資料 (三軸加速器值控制LED) //-------Declare-LED 1 W-MD 1 ---------------#define LED 3 int Set_LS=200; int GXMax=120; // Set Max. 3 GX int GYMax=120; // Set Max. 3 GX void setup() { //======Setup-ED 1 W-MD 1========= pin. Mode(LED, OUTPUT); my. OLED. println("Ex 6 -1_ADXL_LED"); //修改標題 my. OLED. print("Set_GX: "); my. OLED. println(GXMax); }

Ex 6_1: 手勢動作開關LED燈 Loop加入下列Smart Processing void loop() { my. OLED. set. Posi(6, 0); //修改顯示位置

Ex 6_1: 手勢動作開關LED燈 Loop加入下列Smart Processing void loop() { my. OLED. set. Posi(6, 0); //修改顯示位置 //=======Smart Processing======= if(i. X > GXMax) digital. Write(LED, HIGH); else digital. Write(LED, LOW); delay(500); } 自己將X軸改Y軸控制

Ex 6_2: 作機台傾角PWM調控器 複製Ex 6 -1_ADXL_LED到Ex 6 -1_ADXL_PWM 加入下列宣告設定資料 int GXMax=240; // Set Max.

Ex 6_2: 作機台傾角PWM調控器 複製Ex 6 -1_ADXL_LED到Ex 6 -1_ADXL_PWM 加入下列宣告設定資料 int GXMax=240; // Set Max. 3 GX int GXMin=30; // Set Min. 3 GX int GYMax=240; // Set Max. 3 GY int GYMin=30; // Set Min. 3 GYvoid setup() { //=====取代=========== my. OLED. print("GX 1: "); my. OLED. print(GXMax); my. OLED. print("GX 2: "); my. OLED. print(GXMin); }

Ex 6_2: 作機台傾角PWM調控器 在Loop修改Smart Processing void loop() { //=======Smart Processing======= //map(value, from. Low, from.

Ex 6_2: 作機台傾角PWM調控器 在Loop修改Smart Processing void loop() { //=======Smart Processing======= //map(value, from. Low, from. High, to. Low, to. High) int duty=map(i. X, GXMax, GXMin, 255, 0); my. OLED. set. Posi(6, 0); my. OLED. print("Duty: "); if(i. X>GXMax) { digital. Write(LED, HIGH); my. OLED. print("255"); }

Ex 6_2: 作機台傾角PWM調控器 在Loop修改Smart Processing else if (i. X<GXMin) { digital. Write(LED, LOW); my.

Ex 6_2: 作機台傾角PWM調控器 在Loop修改Smart Processing else if (i. X<GXMin) { digital. Write(LED, LOW); my. OLED. print(0); } else { my. OLED. print(duty); analog. Write(LED, duty); } delay(500);

Ex 6_3: 物品傾倒警報器 複製Ex 6 -2_ADXL_PWM到Ex 6 -3_ADXL_Buzz 加入下列宣告設定資料 //-------Declare- Buzzer --------------------#define buzzer. PIN

Ex 6_3: 物品傾倒警報器 複製Ex 6 -2_ADXL_PWM到Ex 6 -3_ADXL_Buzz 加入下列宣告設定資料 //-------Declare- Buzzer --------------------#define buzzer. PIN A 3 // CN 4 void Beep(int n, int finv); setup() { //====Setup-Buzzer========= pin. Mode(buzzer. PIN, OUTPUT); digital. Write(buzzer. PIN, LOW); my. OLED. println(“Ex 6 -3_ADXL_Buzz”); //修改標題 }

Ex 6_3: 物品傾倒警報器 在Loop修改Smart Processing void loop() { //=======Smart Processing======= if(i. X>GXMax) Beep(3, 200);

Ex 6_3: 物品傾倒警報器 在Loop修改Smart Processing void loop() { //=======Smart Processing======= if(i. X>GXMax) Beep(3, 200); else if (i. X<GXMin) digital. Write(buzzer. PIN, LOW); else Beep(1, 1000); delay(500); }

Ex 6_4: 手勢動作控制紅綠燈 //-----Declare-RGB LED -------#include "Fast. LED. h" #define LED_PIN A 0 #define

Ex 6_4: 手勢動作控制紅綠燈 //-----Declare-RGB LED -------#include "Fast. LED. h" #define LED_PIN A 0 #define NUM_LEDS 3 CRGB leds[NUM_LEDS]; void SET_RGB(int m, char c); void Flash_RGB(int m, char c, int n, int finv); //=======Setup-RGB========== delay( 100 ); // power-up safety delay Fast. LED. add. Leds<WS 2812 B, LED_PIN, GRB>(leds, NUM_LEDS). set. Correction( Typical. LEDStrip ); SET_RGB(1, 'D'); SET_RGB(2, 'D'); SET_RGB(3, 'D');

Ex 6_4: 手勢動作控制紅綠燈 //=======Smart Processing======= if(i. X>GXMax) { SET_RGB(2 , 'D'); SET_RGB(3 , 'D');

Ex 6_4: 手勢動作控制紅綠燈 //=======Smart Processing======= if(i. X>GXMax) { SET_RGB(2 , 'D'); SET_RGB(3 , 'D'); SET_RGB(1, 'R'); } else if(i. X<GXMin) { SET_RGB(1 , 'D'); SET_RGB(2 , 'D'); SET_RGB(3, 'G'); } else { SET_RGB(1 , 'D'); SET_RGB(3 , 'D'); Flash_RGB(2, 'Y', 1, 200); } delay(500);

Ex 6_4: 手勢動作控制紅綠燈 //=======Smart Processing======= if(i. X>GXMax && s. X=='+') SET_RGB(1, 'R'); else if(i.

Ex 6_4: 手勢動作控制紅綠燈 //=======Smart Processing======= if(i. X>GXMax && s. X=='+') SET_RGB(1, 'R'); else if(i. X>GXMax && s. X=='-') SET_RGB(1, 'G'); else if(i. Y>GYMax && s. Y=='+') SET_RGB(1, 'Y'); else if(i. Y>GYMax && s. Y=='-') SET_RGB(1, 'B'); else SET_RGB(1 , 'Y'); delay(500);