极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 迷你强

Arduino入门教程--第六课--电位器PWM控制LED亮度

[复制链接]
发表于 2013-10-13 16:43:04 | 显示全部楼层
感谢楼主教程,尝试成功
回复 支持 反对

使用道具 举报

发表于 2013-10-31 22:16:24 | 显示全部楼层
顶一下!!
回复 支持 反对

使用道具 举报

发表于 2014-3-29 16:03:14 | 显示全部楼层
感谢楼主教程,尝试成功
回复 支持 反对

使用道具 举报

发表于 2014-5-18 10:56:54 | 显示全部楼层
我的电路似乎一定都要连接DIGITAL端的GND才能顺利完成实验。
连接POWER端的是不行的。
难道因为我的板子是arduino uno板?
回复 支持 反对

使用道具 举报

发表于 2014-10-10 21:08:20 | 显示全部楼层
好东西,顶啊!!!
回复 支持 反对

使用道具 举报

发表于 2014-12-3 17:31:36 | 显示全部楼层
int ledpin=11;
void setup()
{
  pinMode(ledpin,OUTPUT);  //数字口要选择带#号的具有pwm功能的输出口
  pinMode(A0,INPUT);   //把A0设置为输出
  Serial.begin(9600);
}

void loop()
{
  int n = analogRead(A0);   //读取A0模拟口的数值(0-5V 对应 0-1023取值)
  int m=n/4;
  Serial.println(m);
  if(0<m<=126)
  {
   digitalWrite(ledpin,LOW);
  }
  
  else if(126<m<=255)
  {
   digitalWrite(ledpin,HIGH);
  }
}
为什么我的灯一直会不亮呢???  只有改成analogWirite才能亮  可是这样就会一直逐渐变亮再逐渐变暗(调节电位器)   和我想要那种达到我的要求才变亮的想法完全冲突     求大神解答!!!
回复 支持 反对

使用道具 举报

发表于 2014-12-17 11:51:56 | 显示全部楼层
回路図
ソースは以下 もし容量とかの関係で表示されない場合は参考ページを見てください

/*
WEB上で表示されるように"<"と">"を全角に変換しております。
テキストエディタで半角の括弧に置換するか、リンク先からダウンロードして下さい。

商用利用不可。オークションも含む。必ずご一報下さい。
Arduino用パワーパック ロータリースイッチ抵抗版
*/

#include <avr/io.h>

#define MASCON masconvol( analogRead( 3 ) + 42) // ロータリースイッチ 1~12
#define PWM2A 11 // OCR2A出力はpin11に接続
#define PWM2B 3 // OCR2B出力はpin 3に接続
#define PWM1B 10 // OCR1B出力はpin10に接続
#define PINLIGHT 4 // アナログピン4に常点灯ダイアル
#define PINKASOKU 5 // アナログピン5に加速率ダイアル
#define KASOKU 3 // 加速率 = 加速率入力 × 3
#define GENSOKU 3 // 1ノッチ以上の減速率 = 加速率入力 / GENSOKU

int vvvfpat; // 走行音 0~12
int mascon; // マスコンの位置
int inptmascon; // マスコンの位置入力
int compmascon; // マスコンの位置前回と比較
int light; // 常点灯
int inptkasoku; // 加速率入力
int kasoku; // 加速率
int mode; // 走行状態
// 0 停止
// 1 減速
// 2 惰行
// 3 加速

long notch1; // 各ノッチでの最高速度
long notch2;
long notch3;
long notch4;
long notch5;

long teishisp; // 走行する出力をカットする速度

long sttfrq; // 開始周波数
long endfrq; // 終了周波数
long frq; // 周波数
long sttspd; // 開始スピード
long endspd; // 終了スピード
long spd; // 内部スピード 0~3,000,000(速度×10,000)
long contspd; // 指示スピードl
int i;
int j;
int f;

int mascondata[] = { // 各パターンの各ノッチ位置での最高速度 1ノッチ,2ノッチ,3ノッチ,4ノッチ,5ノッチ
20, 40, 60, 80, 130, // 0 パターン 1
20, 40, 60, 80, 130, // 1 パターン 2
20, 40, 60, 80, 130, // 2 パターン 3
5, 20, 40, 60, 100, // 3 パターン 4
20, 40, 60, 80, 130, // 4 パターン 5
20, 40, 60, 80, 130, // 5 パターン 6
40, 80, 120, 200, 300, // 6 パターン 7 新幹線用
40, 80, 120, 200, 300, // 7 パターン 8 新幹線用
40, 80, 120, 200, 300, // 8 パターン 9 新幹線用
20, 40, 60, 80, 130, // 9 パターン10
20, 40, 60, 80, 130, //10 パターン11
20, 40, 60, 80, 130 //11 パターン12
};

int teishi[] = { //走行用の出力を止める速度 速度×10 ピタッと止めるため
49, // 0 パターン 1
49, // 1 パターン 2
49, // 2 パターン 3
49, // 3 パターン 4
20, // 4 パターン 5
49, // 5 パターン 6
29, // 6 パターン 7 新幹線はギヤ比が高いため大きくするとガクンと止まるため
29, // 7 パターン 8
29, // 8 パターン 9
49, // 9 パターン10
49, //10 パターン11
49, //11 パターン12
};


int data[] = {
// 設定可能周波数 123Hz~8000kHz DUTY比の分解能確保のため30kHzぐらいを上限 整数に限る
// 音を出す場合必ず2段階以上入力すること 減速時1段階目音を止めるため

// パターン1の場合
// 1行目 速度0~ 7 1,800Hzで音程変化なし
// 2行目 速度8~18のあいだで 500Hzから1,800Hzまで変化する
// 例えば1,800Hzから500Hzとかにすれば幽霊インバーターも設定可能

//0 パターン1 223系2000番台
1800, 1800, 7, // 1 開始周波数 終了周波数 切替スピード
500, 1800, 18, // 2 開始周波数 終了周波数 切替スピード
500, 750, 30, // 3 開始周波数 終了周波数 切替スピード
600, 800, 40, // 4 開始周波数 終了周波数 切替スピード
550, 600, 50, // 5 開始周波数 終了周波数 切替スピード
250, 700, 120, // 6 開始周波数 終了周波数 切替スピード
-1, // 7 終了コード

//1 パターン2 京急1000
300, 300, 10, // 1 開始周波数 終了周波数 切替スピード
350, 350, 11, // 2 開始周波数 終了周波数 切替スピード
392, 392, 12, // 3 開始周波数 終了周波数 切替スピード
440, 440, 13, // 4 開始周波数 終了周波数 切替スピード
466, 466, 14, // 5 開始周波数 終了周波数 切替スピード
523, 523, 15, // 6 開始周波数 終了周波数 切替スピード
587, 587, 16, // 7 開始周波数 終了周波数 切替スピード
622, 622, 17, // 8 開始周波数 終了周波数 切替スピード
698, 698, 18, // 9 開始周波数 終了周波数 切替スピード
783, 783, 19, //10 開始周波数 終了周波数 切替スピード
900, 900, 35, //11 開始周波数 終了周波数 切替スピード
900, 1000, 37, //12 開始周波数 終了周波数 切替スピード
900, 1000, 40, //13 開始周波数 終了周波数 切替スピード
300, 500, 100, //14 開始周波数 終了周波数 切替スピード
-1, //15 終了コード

//2 パターン3 207系 223系0番台 281系はるか
800, 800, 10, // 1 開始周波数 終了周波数 切替スピード
380, 900, 30, // 2 開始周波数 終了周波数 切替スピード
500, 750, 40, // 3 開始周波数 終了周波数 切替スピード
500, 800, 80, // 4 開始周波数 終了周波数 切替スピード
800, 800, 100, // 5 開始周波数 終了周波数 切替スピード
-1, // 6 終了コード

//3 パターン4 DL
130, 140, 5, // 1 開始周波数 終了周波数 切替スピード
140, 200, 50, // 2 開始周波数 終了周波数 切替スピード
150, 190, 100, // 3 開始周波数 終了周波数 切替スピード
-1, // 4 終了コード

//4 パターン5 221系
150, 200, 10, // 1 開始周波数 終了周波数 切替スピード
200, 1000, 100, // 2 開始周波数 終了周波数 切替スピード
-1, // 3 終了コード

//5 パターン6 EF210
600, 600, 10, // 1 開始周波数 終了周波数 切替スピード
600, 600, 20, // 2 開始周波数 終了周波数 切替スピード
400, 800, 40, // 3 開始周波数 終了周波数 切替スピード
800, 800, 100, // 4 開始周波数 終了周波数 切替スピード
-1, // 5 終了コード

//6 パターン7 223系2000番台
1800, 1800, 7, // 1 開始周波数 終了周波数 切替スピード
500, 1800, 18, // 2 開始周波数 終了周波数 切替スピード
500, 750, 30, // 3 開始周波数 終了周波数 切替スピード
600, 800, 40, // 4 開始周波数 終了周波数 切替スピード
550, 600, 50, // 5 開始周波数 終了周波数 切替スピード
250, 700, 120, // 6 開始周波数 終了周波数 切替スピード
-1, // 7 終了コード

//7 パターン8 京急1000
300, 300, 10, // 1 開始周波数 終了周波数 切替スピード
350, 350, 11, // 2 開始周波数 終了周波数 切替スピード
392, 392, 12, // 3 開始周波数 終了周波数 切替スピード
440, 440, 13, // 4 開始周波数 終了周波数 切替スピード
466, 466, 14, // 5 開始周波数 終了周波数 切替スピード
523, 523, 15, // 6 開始周波数 終了周波数 切替スピード
587, 587, 16, // 7 開始周波数 終了周波数 切替スピード
622, 622, 17, // 8 開始周波数 終了周波数 切替スピード
698, 698, 18, // 9 開始周波数 終了周波数 切替スピード
783, 783, 19, //10 開始周波数 終了周波数 切替スピード
900, 900, 35, //11 開始周波数 終了周波数 切替スピード
900, 1000, 37, //12 開始周波数 終了周波数 切替スピード
900, 1000, 40, //13 開始周波数 終了周波数 切替スピード
300, 500, 100, //14 開始周波数 終了周波数 切替スピード
-1, //15 終了コード

//8 パターン9 207系 223系0番台 281系はるか
800, 800, 10, // 1 開始周波数 終了周波数 切替スピード
380, 900, 30, // 2 開始周波数 終了周波数 切替スピード
500, 750, 40, // 3 開始周波数 終了周波数 切替スピード
500, 800, 80, // 4 開始周波数 終了周波数 切替スピード
800, 800, 100, // 5 開始周波数 終了周波数 切替スピード
-1, // 6 終了コード

//9 パターン10
-1, // 1 終了コード

//10 パターン11
-1, // 1 終了コード

//11 パターン12
-1 // 1 終了コード
};

int datanum[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

byte font[16] = { // 7segの表示パターン
0b00111111, //0
0b00000110, //1
0b01011011, //2
0b01001111, //3
0b01100110, //4
0b01101101, //5
0b01111101, //6
0b00100111, //7
0b01111111, //8
0b01101111, //9
0b01110111, //A
0b01111100, //b
0b00111001, //C
0b00111110, //d
0b01111001, //E
0b01110001 //F
};

int masconvol(int vol){ // マスコン位置検出

// 0~1023の入力を12段階に分ける さらに3段階に分けて真ん中の時だけ採用
// 中途半端な位置の時にでたらめな入力になるので

int a;
if ( (vol * 10 / 284) % 3 == 1 ){
a = 13 - vol / 85;
} else {
a = 0;
}
return a;
}

// 1 非常
// 2 減速5
// 3 減速4
// 4 減速3
// 5 減速2
// 6 減速1
// 7 惰行
// 8 ノッチ1
// 9 ノッチ2
//10 ノッチ3
//11 ノッチ4
//12 ノッチ5

byte wnum;


//アノードコモン
void swrite(byte num){

byte a;

if( f == 1 ){ //1桁目
f = 0;
digitalWrite( 2, HIGH);
digitalWrite( 4, HIGH);

if( num >= 16){
num = num % 16;
}

a = font[num];

PORTD = (~( a << 5 )) & (PORTD | B11100000); // 7seg表示のポートが連続していないための処理
PORTB = ((((~( a >> 3 )) | B11111100 )) & ((~( a >> 1 )) | B11001111 )) & (PORTB | B00110011);

digitalWrite( 2, LOW);


} else { //2桁目
f = f++;

digitalWrite( 2, HIGH);
digitalWrite( 4, HIGH);

num = num / 16;

if( num == 0){ //ゼロサプレス
a = 0;
} else {
a = font[num];
}

PORTD = (~( a << 5 )) & (PORTD | B11100000);
PORTB = ((((~( a >> 3 )) | B11111100 )) & ((~( a >> 1 )) | B11001111 )) & (PORTB | B00110011);

digitalWrite( 4, LOW);


}


}

void setup(){

// PWM PIN設定
pinMode(PWM2A, OUTPUT);
pinMode(PWM2B, OUTPUT);
pinMode(PWM1B, OUTPUT);

// 7SEG PIN設定
pinMode( 2, OUTPUT);
pinMode( 4, OUTPUT);
pinMode( 5, OUTPUT);
pinMode( 6, OUTPUT);
pinMode( 7, OUTPUT);
pinMode( 8, OUTPUT);
pinMode( 9, OUTPUT);
pinMode( 12, OUTPUT);
pinMode( 13, OUTPUT);

// 走行音パターン各開始位置取得
int n;
int m = 0;

for ( n = 1; n <= 11; n++ ){
while ( data[m] != -1 ){
m++;
}

m++;
datanum[n] = m;
}

// 走行音パターン取得注意喚起
i = 0;
while ( i < 3 ){
i++;

j = 0;
while ( j < 10000){
j++;
swrite( 0x88 );
}

digitalWrite( 2, HIGH);
digitalWrite( 4, HIGH);
delay(100);
}

delay(100);

// 走行音パターン取得 しばらくロータリースイッチを動かさないとその位置で決定
do{
j = 0;
while ( j < 1000){
j++;
inptmascon = MASCON;
if ( mascon != inptmascon ){
j = 0;
mascon = inptmascon;
}
if( mascon > 9){
swrite( mascon + 6 );
} else {
swrite( mascon );
}
delay( 1);
}

} while ( mascon == 0 || mascon > 12);

// 走行音パターンほか選択したパターンに合わせて設定

vvvfpat = mascon - 1;

notch1 = (long)mascondata[vvvfpat * 5] * 10000 - 1;
notch2 = (long)mascondata[vvvfpat * 5 + 1] * 10000 - 1;
notch3 = (long)mascondata[vvvfpat * 5 + 2] * 10000 - 1;
notch4 = (long)mascondata[vvvfpat * 5 + 3] * 10000 - 1;
notch5 = (long)mascondata[vvvfpat * 5 + 4] * 10000 - 1;

teishisp = (long)teishi[vvvfpat] * 1000 - 1;

// 決定したパターンを点滅表示

i = 0;
while ( i < 3 ){
i++;

j = 0;
while ( j < 10000){
j++;
if(mascon > 9){
swrite( mascon + 6 );
} else {
swrite( mascon );
}
}
digitalWrite( 2, HIGH);
digitalWrite( 4, HIGH);
delay(200);
}

// マスコン位置を惰行か減速にしてもらう注意喚起 急に走り出さないようにするため

mascon = MASCON;
while ( mascon == 0 || mascon > 7 ){

j = 0;
while ( j < 10000){
j++;
swrite( 0xBB );
}

digitalWrite( 2, HIGH);
digitalWrite( 4, HIGH);
delay( 100);
mascon = MASCON;

}
}


void loop(){

inptkasoku = analogRead(PINKASOKU)/128+1; // analogRead 0~1023 → 1~8
light = analogRead(PINLIGHT )/8; // analogRead 0~1023 → 0~127

inptmascon = MASCON;

if ( inptmascon > 0 && inptmascon < 13 ){
if ( compmascon == inptmascon ){
mascon = inptmascon;
} else if ( compmascon > inptmascon ){
compmascon--;
} else if ( compmascon < inptmascon ){
compmascon++;
}
}

switch ( mascon ){
case 1:
// 非常
contspd = 0;
spd = 0;
mode = 0;
wnum = 0xe;
break;

case 2:
// 減速5
contspd = 0;
kasoku = inptkasoku * 5;
mode = 1;
wnum = 0xb5;
break;

case 3:
// 減速4
contspd = 0;
kasoku = inptkasoku * 4;
mode = 1;
wnum = 0xb4;
break;

case 4:
// 減速3
contspd = 0;
kasoku = inptkasoku * 3;
mode = 1;
wnum = 0xb3;
break;

case 5:
// 減速2
contspd = 0;
kasoku = inptkasoku * 2;
mode = 1;
wnum = 0xb2;
break;

case 6:
// 減速1
contspd = 0;
kasoku = inptkasoku * 1;
mode = 1;
wnum = 0xb1;
break;

case 7:
// 惰行
kasoku = 0;
contspd = spd;

// kasoku = inptkasoku ; 惰行で速度を落とす場合
// contspd = 0;
mode = 2;
wnum = 0;
break;

case 8:
// ノッチ1
contspd = notch1;
kasoku = inptkasoku * KASOKU;
mode = 3;
wnum = 1;
break;

case 9:
// ノッチ2
contspd = notch2;
kasoku = inptkasoku * KASOKU;
mode = 3;
wnum = 2;
break;

case 10:
// ノッチ3
contspd = notch3;
kasoku = inptkasoku * KASOKU;
mode = 3;
wnum = 3;
break;

case 11:
// ノッチ4
contspd = notch4;
kasoku = inptkasoku * KASOKU;
mode = 3;
wnum = 4;
break;

case 12:
// ノッチ5
contspd = notch5;
kasoku = inptkasoku * KASOKU;
mode = 3;
wnum = 5;
break;
}

for ( j = 0; j < 200; j++ ){ // チャタリング防止ループ

swrite( wnum );

if ( spd < contspd ){
if ( contspd - spd <= kasoku ){
spd = contspd;
} else {
spd = spd + kasoku;
}
}

if ( spd > contspd ){
if ( mascon >= 7 ){
if ( spd - contspd <= kasoku / GENSOKU ){
spd = contspd;
} else {
spd = spd - kasoku / GENSOKU;
}
} else {
if ( spd - contspd <= kasoku ){
spd = contspd;
} else {
spd = spd - kasoku;
}
}
}

if ( spd < teishisp && mascon < 8 ){
spd = 0;
mode = 0;
}

OCR2A = 255 - light; // 走行時の常点灯 PWM DUTY比 周波数は31kHz CPU周波数/2/分周256 Aはこの数値からTOP255がDUTY比
OCR2B = (int)(spd / ( 7680 + spd / 390 )); //走行用出力 SPD / 128 / 4 / 10 / DUTY比 ( 1.5 + speed / 390)

for ( i = 0; ;i = i + 3){

sttfrq = data[datanum[vvvfpat] + i];
endfrq = data[datanum[vvvfpat] + i + 1];

if( i == 0 ){
sttspd = 0;
} else {
sttspd = data[datanum[vvvfpat] + i - 1];
}

endspd = data[datanum[vvvfpat] + i + 2];

if ( i == 0 && sttfrq == -1 ){ //走行音が設定されていない場合の処理
OCR1A = 421; // TOP値 = CPUの動作周波数 / 2 / 分周 / 希望周波数 = 16,000,000 / 2 / 1 / frq 19000 = 421
OCR1B = 421 - 421 * (word)light / 245 ; // 音を出すPWMのDUTY比 
TCCR1B = B00010001;
TCCR1A = B00110001;
TCCR2B = B00000001;
TCCR2A = B00100001;
break;
}

// 停止時 音停止

if ( mode == 0 ) {
OCR1A = 421; // TOP値 = CPUの動作周波数 / 2 / 分周 / 希望周波数 = 16,000,000 / 2 / 1 / frq 19000 = 421
OCR1B = 421 - 421 * (word)light / 255 ; // 音を出すPWMのDUTY比 
TCCR1B = B00010001;
TCCR1A = B00110001;
TCCR2B = B00000001;
TCCR2A = B00000001; //PWM 2A(常点灯部分 代わりに1Bで常点灯出力 19kHzで出力したいから)と2B停止

break;
}

// 減速のとき1段階目の音停止

if ( i == 0 && spd <= endspd * 10000 && mode == 1 ) {
OCR1A = 421; // TOP値 = CPUの動作周波数 / 2 / 分周 / 希望周波数 = 16,000,000 / 2 / 1 / frq 19000 = 421
OCR1B = 421 - 421 * (word)light / 255 ; // 音を出すPWMのDUTY比 
TCCR1B = B00010001;
TCCR1A = B00110001;
TCCR2B = B00000001;
TCCR2A = B00100001; //PWM 2A停止(常点灯部分 代わりに1Bで常点灯出力) 2B出力

break;
}

// 惰行 vvvf音停止

if ( mode == 2 ){
OCR1A = 421; // TOP値 = CPUの動作周波数 / 2 / 分周 / 希望周波数 = 16,000,000 / 2 / 1 / frq 19000 = 421
OCR1B = 421 - 421 * (word)light / 245 ; // 音を出すPWMのDUTY比 
TCCR1B = B00010001;
TCCR1A = B00110001;
TCCR2B = B00000001;
TCCR2A = B00100001; //PWM 2A停止(常点灯部分 代わりに1Bで常点灯出力) 2B出力

break;
}

// 高速時 vvvf音停止

if ( sttfrq == -1 ){
frq = 31500;
OCR1A = (word)(8000000 / frq); // TOP値 = CPUの動作周波数 / 2 / 分周 / 希望周波数 = 16,000,000 / 2 / 1 / frq
OCR1B = (word)(8000000 / frq - 8000000 / frq / 99); // 音を出すPWMのDUTY比 100/99 = 1%
TCCR1B = B00010001;
TCCR1A = B00110001;
TCCR2B = B00000001; //PWM 2A/2B 分周1
TCCR2A = B11100001; //PWM 2A/2B 出力

break;
}

// VVVF音

if ( ( spd >= sttspd * 10000 ) && ( spd < endspd * 10000)){
frq = ( endfrq * 10 - sttfrq * 10 ) / ( endspd - sttspd ) * ( spd - sttspd * 10000 ) / 100000 + sttfrq;

if ( frq < 123 ){
frq = 123;
} else if ( frq > 31500 ) {
frq = 31500;
}

OCR1A = (word)(8000000 / frq); // TOP値 = CPUの動作周波数 / 2 / 分周 / 希望周波数 = 16,000,000 / 2 / 1 / frq
OCR1B = (word)(8000000 / frq - 8000000 / frq / 15); // 音を出すPWMのDUTY比 100/15 = 6.6%
TCCR1B = B00010001;
TCCR1A = B00110001;
TCCR2B = B00000001; //PWM 2A/2B 分周1
TCCR2A = B11100001; //PWM 2A/2B 出力

break;
}
}

}

}
回复 支持 反对

使用道具 举报

发表于 2015-1-10 21:35:02 | 显示全部楼层
精密线性电位器自带电源吗?第一次见到这个东西。
回复 支持 反对

使用道具 举报

发表于 2015-1-10 21:37:45 | 显示全部楼层
flying03 发表于 2015-1-10 21:35
精密线性电位器自带电源吗?第一次见到这个东西。

我误解了,板子还是要USB供电,看上面那个图片是把USB拔掉的。这个乌龙大了
回复 支持 反对

使用道具 举报

发表于 2015-7-1 19:41:46 | 显示全部楼层
很不错,还没玩过
回复 支持 反对

使用道具 举报

发表于 2016-1-9 14:42:02 | 显示全部楼层
不错,顶
回复 支持 反对

使用道具 举报

发表于 2016-1-19 16:39:59 | 显示全部楼层
刚开始学习 新人
回复 支持 反对

使用道具 举报

发表于 2016-3-12 17:25:39 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2016-6-19 17:03:26 | 显示全部楼层
PotBuffer = analogRead(Pot);                                 //读取AD值
  PotBuffer = map(PotBuffer, 0, 1023, 0, 255);        //把AD值0-1023 缩放为 0-255
回复 支持 1 反对 0

使用道具 举报

发表于 2016-6-19 17:06:38 | 显示全部楼层
<一一巛 发表于 2013-3-4 12:42
交作业
int n=0;
void setup() {   

PotBuffer = analogRead(Pot);                                 //读取AD值
  PotBuffer = map(PotBuffer, 0, 1023, 0, 255);        //把AD值0-1023 缩放为 0-255
直接用map映射
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 22:17 , Processed in 0.054897 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表