2021年11月30日 星期二

逆時針轉3圈就停

 unsigned long time1 = 0;

unsigned long time2 = 0;

int seg7_pin[] = {2, 3, 4, 5, 6, 7, 8};//七段顯示器腳位設為一維陣列

char seg7_table[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xff};//seg7_table[bcd[0]]

//                   點亮a 點亮b 點亮c 點亮d 點亮e 點亮f

int scan_line[] = {9, 10, 11, 12}; //com1 com0 scan_lin[0]=存放第9支腳 scan_lin[1]=存放第10支腳

char bcd[] = {6, 6, 6, 6 }; //一開機,先清除畫面

int j = 0;//j參數是設掃瞄線,因為兩位數,and cnt bcd[0]=0 bcd[1]=6陣列元素=0 陣列元素=1設定七段顯示用的字型,利用陣列中的陣列

int cnt;

int num = 0; //每切換一次奇變偶,偶變奇 一開機就順時針

//-----------------------------------------------------------------------------

void setup()

{

  pinMode(13, INPUT);//設定13腳為輸入

  digitalWrite(13, INPUT_PULLUP); //13腳為輸入提升電阻

  for (int i = 0; i < 8; i++)//七段顯示器腳位,用迴圈指定腳位為輸出

    pinMode(seg7_pin[i], OUTPUT);//資料端, a b c d e f g

  for (int i = 0; i < 4; i++)//com0 com1 用迴圈指定掃瞄腳位為輸出

    pinMode(scan_line[i], OUTPUT);//掃瞄端

  Serial.begin(9600);

}

//-------------------------------------------------------------------------------

void outport(byte data)//七段顯示器 a b c d e f某一段字型副程式 data是十進位,因為宣告byte 0~255

{

  for (int j = 0; j < 7; j++)//abcdefg用loop跑7次

  {

    if (data % 2 == 1) // 取出 data 的最低位元 , 從最低位元開始取,每取一次就除以2,共取7次就給束

      digitalWrite(seg7_pin[j], LOW);

    else

      digitalWrite(seg7_pin[j], HIGH);

    data = data / 2; // 十進制整數是連除  除以2,進行下一位元的處理

  }

}

//-----------------------------------------------------------------------------

void loop()

{

  if (millis() - time1 <= 40000 && millis() - time2 <= 40000)//跑三圈只是加此行條件同時滿足即可, 條件成立就執行,不成立就跳出來

  {

    if (millis() - time1 > 5) //超過5ms=0.005秒掃瞄scan_line及秀字

    { //每隔5ms就跑進來一次,使用陣列的陣列

      outport(seg7_table[bcd[j]]);//傳送seg7_table[bcd[0或1]=0 1 2 3 4 5 6]

      Serial.println(j);

      digitalWrite(scan_line[j], HIGH);//exe j=0 個位數、十位數  送高電位再送低電位因為掃瞄線是5m進來一次,七段是1秒進來一次,

      delay(1);

      digitalWrite(scan_line[j], LOW);

      //0先跑一遍,j==1不成立,j++再從上面右大括號電上往下跑一遍,

      if (j == 4)//scan_line[0]第9支腳 scan_line[1]第10支腳

      {

        j = 0;//掃瞄是從右到左

      }

      else

      {

        j++;

      }

    }

    if (millis() - time2 >= 1000) //超過1秒,計數值cnt加1

    {

      time2 = millis();

      if (num % 2 == 0)//偶數的話就cnt加加0123456

      {

        if (cnt == 12) cnt = 0;

        else  cnt++;//順逆時針的變數一樣,即可以切換

      }

      else//偶數的話就cnt--0123456

      {

        if (cnt == 0) cnt = 12;

        else cnt--;

      }

    }//兩個七段幾乎同時顯示,因為速度很快, 使用一維陣列,總共要8次變化

    //每隔1秒,計數值cnt就加1,bcd[1]=

    if (cnt == 0) {

      bcd[3] = 6 ;    //-

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 0;

    }

    if (cnt == 1) {

      bcd[3] = 6 ;    //  -

      bcd[2] = 6;

      bcd[1] = 0 ;

      bcd[0] = 6;

    }

    if (cnt == 2) {

      bcd[3] = 6 ;    //    -

      bcd[2] = 0;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 3) {

      bcd[3] = 0 ;    //      -

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 4) {

      bcd[3] = 5 ;    //      |

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 5) {

      bcd[3] = 4 ;    //      |

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 6) {

      bcd[3] = 3 ;    //    _

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 7) {

      bcd[3] = 6 ;    //  _

      bcd[2] = 3;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 8) {

      bcd[3] = 6 ;    //_

      bcd[2] = 6;

      bcd[1] = 3 ;

      bcd[0] = 6;

    }

    if (cnt == 9) {

      bcd[3] = 6 ;    //|

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 3;

    }

    if (cnt == 10) {

      bcd[3] = 6 ;    //|

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 2;

    }

    if (cnt == 11) {

      bcd[3] = 6 ;    //|

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 1;

    }

  }

}

順時針繞三圈就停

 unsigned long time1 = 0;

unsigned long time2 = 0;

int seg7_pin[] = {2, 3, 4, 5, 6, 7, 8};//七段顯示器腳位設為一維陣列

char seg7_table[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xff};//seg7_table[bcd[0]]

//                   點亮a 點亮b 點亮c 點亮d 點亮e 點亮f

int scan_line[] = {9, 10, 11, 12}; //com1 com0 scan_lin[0]=存放第9支腳 scan_lin[1]=存放第10支腳

char bcd[] = {6, 6, 6, 6 }; //一開機,先清除畫面

int j = 0;//j參數是設掃瞄線,因為兩位數,and cnt bcd[0]=0 bcd[1]=6陣列元素=0 陣列元素=1設定七段顯示用的字型,利用陣列中的陣列

int cnt;

int num = 0; //每切換一次奇變偶,偶變奇 一開機就順時針

//-----------------------------------------------------------------------------

void setup()

{

  pinMode(13, INPUT);//設定13腳為輸入

  digitalWrite(13, INPUT_PULLUP); //13腳為輸入提升電阻

  for (int i = 0; i < 8; i++)//七段顯示器腳位,用迴圈指定腳位為輸出

    pinMode(seg7_pin[i], OUTPUT);//資料端, a b c d e f g

  for (int i = 0; i < 4; i++)//com0 com1 用迴圈指定掃瞄腳位為輸出

    pinMode(scan_line[i], OUTPUT);//掃瞄端

  Serial.begin(9600);

}

//-------------------------------------------------------------------------------

void outport(byte data)//七段顯示器 a b c d e f某一段字型副程式 data是十進位,因為宣告byte 0~255

{

  for (int j = 0; j < 7; j++)//abcdefg用loop跑7次

  {

    if (data % 2 == 1) // 取出 data 的最低位元 , 從最低位元開始取,每取一次就除以2,共取7次就給束

      digitalWrite(seg7_pin[j], LOW);

    else

      digitalWrite(seg7_pin[j], HIGH);

    data = data / 2; // 十進制整數是連除  除以2,進行下一位元的處理

  }

}

//-----------------------------------------------------------------------------

void loop()

{

  if (millis() - time1 <= 40000 && millis() - time2 <= 40000)//跑三圈只是加此行條件同時滿足即可,40000值是要去微調的

  {

    if (millis() - time1 > 5) //超過5ms=0.005秒掃瞄scan_line及秀字

    { //每隔5ms就跑進來一次,使用陣列的陣列

      outport(seg7_table[bcd[j]]);//傳送seg7_table[bcd[0或1]=0 1 2 3 4 5 6]

      Serial.println(j);

      digitalWrite(scan_line[j], HIGH);//exe j=0 個位數、十位數  送高電位再送低電位因為掃瞄線是5m進來一次,七段是1秒進來一次,

      delay(1);

      digitalWrite(scan_line[j], LOW);

      //0先跑一遍,j==1不成立,j++再從上面右大括號電上往下跑一遍,

      if (j == 4)//scan_line[0]第9支腳 scan_line[1]第10支腳

      {

        j = 0;//掃瞄是從右到左

      }

      else

      {

        j++;

      }

    }

    if (millis() - time2 >= 1000) //超過1秒,計數值cnt加1

    {

      time2 = millis();

      if (num % 2 == 0)//偶數的話就cnt加加0123456

      {

        if (cnt == 12) cnt = 0;

        else  cnt++;//順逆時針的變數一樣,即可以切換

      }

      else//偶數的話就cnt--0123456

      {

        if (cnt == 0) cnt = 12;

        else cnt--;

      }

    }//兩個七段幾乎同時顯示,因為速度很快, 使用一維陣列,總共要8次變化

    //每隔1秒,計數值cnt就加1,bcd[1]=

    if (cnt == 0) {

      bcd[3] = 0 ;    //-

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 1) {

      bcd[3] = 6 ;    //  -

      bcd[2] = 0;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 2) {

      bcd[3] = 6 ;    //    -

      bcd[2] = 6;

      bcd[1] = 0 ;

      bcd[0] = 6;

    }

    if (cnt == 3) {

      bcd[3] = 6 ;    //      -

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 0;

    }

    if (cnt == 4) {

      bcd[3] = 6 ;    //      |

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 1;

    }

    if (cnt == 5) {

      bcd[3] = 6 ;    //      |

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 2;

    }

    if (cnt == 6) {

      bcd[3] = 6 ;    //    _

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 3;

    }

    if (cnt == 7) {

      bcd[3] = 6 ;    //  _

      bcd[2] = 6;

      bcd[1] = 3 ;

      bcd[0] = 6;

    }

    if (cnt == 8) {

      bcd[3] = 6 ;    //_

      bcd[2] = 3;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 9) {

      bcd[3] = 3 ;    //|

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 10) {

      bcd[3] = 4 ;    //|

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

    if (cnt == 11) {

      bcd[3] = 5 ;    //|

      bcd[2] = 6;

      bcd[1] = 6 ;

      bcd[0] = 6;

    }

  }

}

2021年11月27日 星期六

四個七段顯示器 順時針繞

 //兩個七段顯示器 順時針繞

unsigned long time1 = 0;

unsigned long time2 = 0;

int seg7_pin[] = {2, 3, 4, 5, 6, 7, 8};//七段顯示器腳位設為一維陣列

char seg7_table[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xff};//seg7_table[bcd[0]]

//                   點亮a 點亮b 點亮c 點亮d 點亮e 點亮f

int scan_line[] = {9, 10,11,12};//com1 com0 scan_lin[0]=存放第9支腳 scan_lin[1]=存放第10支腳

char bcd[] = {6, 6,6,6 }; //一開機,先清除畫面

int j = 0;//j參數是設掃瞄線,因為兩位數,and cnt bcd[0]=0 bcd[1]=6陣列元素=0 陣列元素=1設定七段顯示用的字型,利用陣列中的陣列

int cnt;

int num = 0; //每切換一次奇變偶,偶變奇 一開機就順時針

//-----------------------------------------------------------------------------

void setup()

{

  pinMode(13, INPUT);//設定13腳為輸入

  digitalWrite(13,INPUT_PULLUP);//13腳為輸入提升電阻

  for (int i = 0; i < 8; i++)//七段顯示器腳位,用迴圈指定腳位為輸出

    pinMode(seg7_pin[i], OUTPUT);//資料端, a b c d e f g

  for (int i = 0; i < 4; i++)//com0 com1 用迴圈指定掃瞄腳位為輸出 

    pinMode(scan_line[i], OUTPUT);//掃瞄端

  Serial.begin(9600);

}

//-------------------------------------------------------------------------------

void outport(byte data)//七段顯示器 a b c d e f某一段字型副程式 data是十進位,因為宣告byte 0~255

{

  for (int j = 0; j < 7; j++)//abcdefg用loop跑7次

  {

    if (data % 2 == 1) // 取出 data 的最低位元 , 從最低位元開始取,每取一次就除以2,共取7次就給束

      digitalWrite(seg7_pin[j], LOW);

    else

      digitalWrite(seg7_pin[j], HIGH);

    data = data / 2; // 十進制整數是連除  除以2,進行下一位元的處理

  }

}

//-----------------------------------------------------------------------------

void loop()

{

  if (digitalRead(13) == LOW)//按鈕按下去是0,加防彈跳

  {

    delay(20);

    while (digitalRead(13) == LOW);

    num++;

  }

  if (millis() - time1 > 5) //超過5ms=0.005秒掃瞄scan_line及秀字

  {//每隔5ms就跑進來一次,使用陣列的陣列

     outport(seg7_table[bcd[j]]);//傳送seg7_table[bcd[0或1]=0 1 2 3 4 5 6]

     Serial.println(j);

    digitalWrite(scan_line[j], HIGH);//exe j=0 個位數、十位數  送高電位再送低電位因為掃瞄線是5m進來一次,七段是1秒進來一次,

    delay(1);

    digitalWrite(scan_line[j], LOW);

    //0先跑一遍,j==1不成立,j++再從上面右大括號電上往下跑一遍,

    if (j == 4)//scan_line[0]第9支腳 scan_line[1]第10支腳

    {

      j = 0;//掃瞄是從右到左

    }

    else

    {

      j++;

    }

  }

  if (millis() - time2 > 1000) //超過1秒,計數值cnt加1

  {

    time2 = millis();

    if (num % 2 == 0)//偶數的話就cnt加加0123456

    {

      if (cnt == 12) cnt = 0;

      else  cnt++;//順逆時針的變數一樣,即可以切換

    }

    else//偶數的話就cnt--0123456

    {

      if (cnt == 0) cnt = 12;

      else cnt--;

    }

  }//兩個七段幾乎同時顯示,因為速度很快, 使用一維陣列,總共要8次變化

  //每隔1秒,計數值cnt就加1,bcd[1]=

  if (cnt == 0) {    bcd[3] = 0 ;   bcd[2] = 6;    bcd[1] = 6 ;   bcd[0] = 6; }//-

  if (cnt == 1) {    bcd[3] = 6 ;   bcd[2] = 0;    bcd[1] = 6 ;   bcd[0] = 6; }//  - 

  if (cnt == 2) {    bcd[3] = 6 ;   bcd[2] = 6;    bcd[1] = 0 ;   bcd[0] = 6; }//    -

  if (cnt == 3) {    bcd[3] = 6 ;   bcd[2] = 6;    bcd[1] = 6 ;   bcd[0] = 0; }//      -

  if (cnt == 4) {    bcd[3] = 6 ;   bcd[2] = 6;    bcd[1] = 6 ;   bcd[0] = 1; }//      |

  if (cnt == 5) {    bcd[3] = 6 ;   bcd[2] = 6;    bcd[1] = 6 ;   bcd[0] = 2; }//      |

  if (cnt == 6) {    bcd[3] = 6 ;   bcd[2] = 6;    bcd[1] = 6 ;   bcd[0] = 3; }//    _

  if (cnt == 7) {    bcd[3] = 6 ;   bcd[2] = 6;    bcd[1] = 3 ;   bcd[0] = 6; }//  _

  if (cnt == 8) {    bcd[3] = 6 ;   bcd[2] = 3;    bcd[1] = 6 ;   bcd[0] = 6; }//_ 

  if (cnt == 9) {    bcd[3] = 3 ;   bcd[2] = 6;    bcd[1] = 6 ;   bcd[0] = 6; }//|

  if (cnt == 10) {   bcd[3] = 4 ;   bcd[2] = 6;    bcd[1] = 6 ;   bcd[0] = 6; }//|

  if (cnt == 11) {   bcd[3] = 5 ;   bcd[2] = 6;    bcd[1] = 6 ;   bcd[0] = 6; }//|

}

兩個七段顯示器 順時針繞

 //兩個七段顯示器 順時針繞

unsigned long time1 = 0;

unsigned long time2 = 0;

int seg7_pin[] = {2, 3, 4, 5, 6, 7, 8};//七段顯示器腳位設為一維陣列

char seg7_table[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xff};//seg7_table[bcd[0]]

//                   點亮a 點亮b 點亮c 點亮d 點亮e 點亮f

int scan_line[] = {9, 10};//com1 com0 scan_lin[0]=存放第9支腳 scan_lin[1]=存放第10支腳

char bcd[] = {6, 6 }; //一開機,先清除畫面

int j = 0;//j參數是設掃瞄線,因為兩位數,and cnt bcd[0]=0 bcd[1]=6陣列元素=0 陣列元素=1設定七段顯示用的字型,利用陣列中的陣列

int cnt;

int num = 0; //每切換一次奇變偶,偶變奇 一開機就順時針

//-----------------------------------------------------------------------------

void setup()

{

  pinMode(13, INPUT);//設定13腳為輸入

  digitalWrite(13,INPUT_PULLUP);//13腳為輸入提升電阻

  for (int i = 0; i < 8; i++)//七段顯示器腳位,用迴圈指定腳位為輸出

    pinMode(seg7_pin[i], OUTPUT);//資料端, a b c d e f g

  for (int i = 0; i < 2; i++)//com0 com1 用迴圈指定掃瞄腳位為輸出 

    pinMode(scan_line[i], OUTPUT);//掃瞄端

  Serial.begin(9600);

}

//-------------------------------------------------------------------------------

void outport(byte data)//七段顯示器 a b c d e f某一段字型副程式 data是十進位,因為宣告byte 0~255

{

  for (int j = 0; j < 7; j++)//abcdefg用loop跑7次

  {

    if (data % 2 == 1) // 取出 data 的最低位元 , 從最低位元開始取,每取一次就除以2,共取7次就給束

      digitalWrite(seg7_pin[j], LOW);

    else

      digitalWrite(seg7_pin[j], HIGH);

    data = data / 2; // 十進制整數是連除  除以2,進行下一位元的處理

  }

}

//-----------------------------------------------------------------------------

void loop()

{

  if (digitalRead(13) == LOW)//按鈕按下去是0,加防彈跳

  {

    delay(20);

    while (digitalRead(13) == LOW);

    num++;

  }

  if (millis() - time1 > 5) //超過5ms=0.005秒掃瞄scan_line及秀字

  {//每隔5ms就跑進來一次,使用陣列的陣列

     outport(seg7_table[bcd[j]]);//傳送seg7_table[bcd[0或1]=0 1 2 3 4 5 6]

     Serial.println(j);

    digitalWrite(scan_line[j], HIGH);//exe j=0 個位數、十位數  送高電位再送低電位因為掃瞄線是5m進來一次,七段是1秒進來一次,

    delay(1);

    digitalWrite(scan_line[j], LOW);

    //0先跑一遍,j==1不成立,j++再從上面右大括號電上往下跑一遍,

    if (j == 1)//scan_line[0]第9支腳 scan_line[1]第10支腳

    {

      j = 0;//掃瞄是從右到左

    }

    else

    {

      j++;

    }

  }

  if (millis() - time2 > 1000) //超過1秒,計數值cnt加1

  {

    time2 = millis();

    if (num % 2 == 0)//偶數的話就cnt加加0123456

    {

      if (cnt == 7) cnt = 0;

      else  cnt++;//順逆時針的變數一樣,即可以切換

    }

    else//偶數的話就cnt--0123456

    {

      if (cnt == 0) cnt = 7;

      else cnt--;

    }

  }//兩個七段幾乎同時顯示,因為速度很快, 使用一維陣列,總共要8次變化

  //每隔1秒,計數值cnt就加1,bcd[1]=

  if (cnt == 0) {   bcd[1] = 0; bcd[0] = 6 ; }//1是左邊a點亮 右邊暗

  if (cnt == 1) {   bcd[1] = 6; bcd[0] = 0 ; }//2是左邊暗    右邊a點亮

  if (cnt == 2) {   bcd[1] = 6; bcd[0] = 1 ; }//3是左邊暗    右邊b點亮

  if (cnt == 3) {   bcd[1] = 6; bcd[0] = 2 ; }//4是左邊暗    右邊c點亮

  if (cnt == 4) {   bcd[1] = 6; bcd[0] = 3 ; }//5是左邊暗    右邊d點亮

  if (cnt == 5) {   bcd[1] = 3; bcd[0] = 6 ; }//6是左邊d點亮 右邊暗

  if (cnt == 6) {   bcd[1] = 4; bcd[0] = 6 ; }//7是左邊e點亮 右邊暗

  if (cnt == 7) {   bcd[1] = 5; bcd[0] = 6 ; }//8是左邊f點亮 右邊暗

}

2021年11月26日 星期五

110不用接地

 int add = 2;

int num;

boolean flag=1;

unsigned long time;

unsigned long time1;

void setup()

{

  for (int i = 2; i < 10; i++)

  {

    pinMode(i, OUTPUT);

    digitalWrite(i, LOW);

  }

  pinMode(11, INPUT);

  digitalWrite(11, INPUT_PULLUP);

  Serial.begin(9600);

}


void loop()

{

  if (digitalRead(11) == LOW)

  {

    delay(20);

    while (digitalRead(11) == LOW);

    num++;

    Serial.println(num);

    if (num % 2 == 0)

      flag = 1;

    else

      flag = 0;

  }

  if (millis() - time1 >= 1000)

  {

    time1=millis();

    digitalWrite(13,HIGH);

    delay(500);

    digitalWrite(13,LOW);

    

  }

  if (millis() - time > 500)

  {

    if (flag)

    {

      digitalWrite(add, HIGH);

      delay(500);

      digitalWrite(add, LOW);

      add++;

      if (add > 9)

        add = 2;

    }

    else if (flag == 0)

    {

      digitalWrite(add, HIGH);

      delay(300);

      digitalWrite(add, LOW);

      add--;

      if (add < 2)

        add=9;

    }

  }

}

2021年11月25日 星期四

110 不用地線

 byte led = 2;

boolean flag=1;

unsigned long time = 0;

unsigned long time1 = 0;

void setup()

{

  pinMode(13,OUTPUT);

  pinMode(11, INPUT);

  for (int i = 2 ; i < 10; i++)

  {

    pinMode(i, OUTPUT);

    digitalWrite(i, LOW);

  }

  Serial.begin(9600);

}

void loop()

{

  if (digitalRead(11) == LOW )

  {

    delay(1000);

    flag = !flag;

    Serial.println(flag);

  }

    if(millis()-time1>=1000)

    {

      digitalWrite(13,HIGH);delay(500);

      digitalWrite(13,LOW);

    }

    if (flag)

    {

      if (millis() - time >= 500)

      {

        time = millis();

        digitalWrite(led, HIGH);

        delay(500);

        digitalWrite(led, LOW);

        led++;

        if (led >9)

          led = 2;

        Serial.println(led);  

      }

    }

    else if(flag==0)

    {

      if( millis() - time >= 300)

      {

        time = millis();

        digitalWrite(led, HIGH);

        delay(300);

        digitalWrite(led, LOW);

        led--;

        if (led <2)

          led = 9;

        Serial.println(led);  

      }

    }  

}

2021年11月24日 星期三

magic fan

 boolean state = false;

boolean btn_up = true;

void setup()

{

  pinMode(7, INPUT);

  pinMode(8, OUTPUT);

  digitalWrite(8,LOW);

  pinMode(9, OUTPUT);

  digitalWrite(9,LOW);

  Serial.begin(9600);

}


void loop()

{

  if (digitalRead(7) == LOW && btn_up == HIGH)

  {Serial.println("test1");

    digitalWrite(8, state);

    state = !state;

    digitalWrite(9, state);

    btn_up = LOW;

  }

  else if (digitalRead(7) == HIGH && btn_up == LOW)

  {Serial.println("test2");

    btn_up = HIGH;

  }

  delay(100);

  }

2021年11月23日 星期二

debounce

 boolean state = false;

boolean btn_up = true;

void setup()

{

  pinMode(2, INPUT);

  // digitalWrite(3,HIGH);

  pinMode(3, OUTPUT);

  digitalWrite(3, state);

  Serial.begin(9600);

}


void loop()

{

  if (digitalRead(2) == LOW && btn_up == true)

  {

    state = !state;

    digitalWrite(3, state);

    btn_up = false;//你壓下去是false

  }

  else if (digitalRead(2) == HIGH && btn_up == false)//放開 且 btn_false 

  {

    Serial.println("else if");

    Serial.println(btn_up);

    btn_up = true;

    Serial.println(btn_up);

  }

  Serial.println("loop");

  Serial.println(btn_up);

  delay(1000);

}

2021年11月22日 星期一

debounce

 boolean state = false;//一開始假設沒有人按這顆按鈕

boolean btn_up = true;//flag旗標:按鈕放開了嗎?true

void setup()//初始化工作,進入loop迴圈

{

  pinMode(13, OUTPUT);

  digitalWrite(13, LOW);

  pinMode(2, INPUT);

  digitalWrite(2, HIGH);

}


void loop()

{//有人按了按鈕LOW 而且 按鈕曾經被放開過,就切換led狀態一次

  if(digitalRead(2) == LOW && btn_up == HIGH)//條件判斷

  {

    state = 1^state;

    digitalWrite(13, state);

    btn_up = false;//轉態完之後,變按鈕還沒有放開,就不會chg led的狀態

  }//按鈕壓下是LOW 被放開是LOW

  else if (digitalRead(2) == HIGH && btn_up == LOW)//還沒有被放開

  {

    btn_up = HIGH;//按鈕被放開了

  }

  delay(10);

}

2021年11月21日 星期日

彈跳問題

byte bnt_pin2 = 2;  // 按鍵pin腳

byte btn_state;  // 按鍵讀取狀態的變數

byte reading;

byte led_pin3 = 3;  // LED pin

byte led_state = HIGH;  // 宣告LED的狀態,一開始預設為不亮

byte last_btn_state = LOW;  // 上次的按鍵讀取狀態變數

long last_debounce_time = 0;  // 記錄上一次消除彈跳的時間

long debounce_delay = 50;  // 消除開關彈跳的延遲時間設為50ms

void setup()

{

  pinMode(bnt_pin2, INPUT);

  pinMode(led_pin3, OUTPUT);

  digitalWrite(led_pin3, led_state); // 設定LED初始狀態

}

void loop()

{

  reading = digitalRead(bnt_pin2);  // 讀取按鍵開關狀態

  if (reading != last_btn_state)   // 當開關壓下或有雜訊時,開關狀態有改變(不相等)

  {

    last_debounce_time = millis();// 重設上一次的消除彈跳時間

  }

  if ((millis() - last_debounce_time) > debounce_delay)// 現在與上次時間點的差值有無超過debounceDelay,若有,代表時間到,可將LED轉態

  {

    if (reading != btn_state)

    {

      btn_state = reading; // 如果按鍵狀態有改變

      if (btn_state == HIGH) // 只有在buttonState為HIGH時才將ledState轉態

      {

        led_state = !led_state;

      }

    }

  }

  digitalWrite(led_pin3, led_state); // 將 ledState 的值直接輸出至LED

  last_btn_state = reading;  // 儲存按鍵讀值

}

2021年11月19日 星期五

控制led亮off

 int flag=1;

void setup()

{

 pinMode(13,OUTPUT); 

}


void loop() 

{

 flag=!flag;

 digitalWrite(13,flag);

 delay(500);

}

2021年11月18日 星期四

分數練習

 #include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) 

{

   int score;

   scanf("%d",& score);

   if(score>90)   {    printf("A");   }

   else if(score>80 && score<90)   {    printf("B");   }

   else if(score>70 && score<80)   {    printf("C");   }

   else if(score>60 && score<60)   {    printf("D");   }

   else  {    printf("E");   }

return 0;

}

sizeof test

 #include <stdio.h>

#include <stdlib.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char *argv[]) 

{

    printf("%d\n",sizeof(char));

    printf("%d\n",sizeof(int));

    printf("%d\n",sizeof(float));

    printf("%d\n",sizeof(double));

//    printf("%d",sizeof(single));

return 0;

}

algorithm

 #include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv)  { for(int j=2;j<=100;j++)//j...