2019年5月22日 星期三

Arduino





























































byte adNUM = 16; // 宣告有幾個廣告燈變化
byte ledPin[] = { 9, 8, 7, 6, 5, 4,3,2};  // 宣告 LED 的接腳 I/O 陣列
int delaytime = 100;   // 延遲時間預設為 100 ms
int ad[] = {0x81,0x42,0x24,0x18,0x24,0x42,0x81,0x00,0x81,0xc3,0xe7,0xff,0xe7,0xc3,0x81,0x00 };
int i,j;            // for迴圈的計數變數

// the setup routine runs once when you press reset:
void setup() {             
  // initialize the digital pin as an output.
  for (i=0; i<8; i++)
  {  pinMode(ledPin[i], OUTPUT);
     digitalWrite(ledPin[i], HIGH);
  }
  // 設定串列埠的鮑率為 9600 bps
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
 // 判斷串列埠緩衝區有無資料
  if (Serial.available()) {
    delaytime=Serial.parseInt();      // 從串列埠緩衝區中讀取下一個有效的整數資料
    Serial.print(delaytime);          // 在 Serial Monitor 中顯示訊息
    Serial.println(" ms");            // ms
  }
  for (i=0; i<adNUM; i++)
  {  OutPort(ad[i]);
     delay(delaytime);               // wait for a second
  }
}

// 將指定的資料依序顯示在 LED 上
void OutPort(byte dat) {
  for (j=7; j>=0; j--) {
    if (dat % 2==1)    // 除 2 的餘數代表要取出 dat 的最低位元狀態
      digitalWrite(ledPin[j], HIGH);  // LED off
    else
      digitalWrite(ledPin[j], LOW);   // LED on
    dat=dat >> 1;      // dat 右移一個位元, 繼續偵測其它位元狀態
  }
}







例:pili燈左右來回跑




























































































/*  使用查表法的廣告燈程式    */
byte adNum = 12; // 宣告有幾個廣告燈變化
byte ledPin[] = { 2,3,4,5,6,7,8,9};  // 宣告 LED 的接腳 I/O 陣列
int delaytime = 2000;   // 延遲時間預設為 100 ms
byte adTable[] = {
             0b11000000,
             0b01100000,
             0b00110000,
             0b00011000,
             0b00001100,
             0b00000110,
             0b00000011,
             0b00000110,
             0b00001100,
             0b00011000,
             0b00110000,
             0b01100000,
             };
int i,j,k;            // for迴圈的計數變數
// the setup routine runs once when you press reset:
void setup()
{
  // put your setup code here, to run once:
  for(i=0;i<8;i++)
  {
    pinMode(ledPin[i],OUTPUT);
    digitalWrite(ledPin[i],HIGH);
  }
}
void outPort(byte dat)
{
  for(j=0;j<8;j++)
  {
    if(dat %2==0) digitalWrite(ledPin[j],HIGH);
    else digitalWrite(ledPin[j],LOW);
    dat=dat/2;
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  for(k=0;k<adNum;k++)
  {
   outPort(adTable[k]);delay(delaytime);
  }
}
範例2:
/*  使用查表法的廣告燈程式    */
byte adNum = 15; // 宣告有幾個廣告燈變化
byte ledPin[] = { 2,3,4,5,6,7,8,9};  // 宣告 LED 的接腳 I/O 陣列
int delaytime = 2000;   // 延遲時間預設為 100 ms
byte adTable[] = {
             0b00000001,
             0b00000011,
             0b00000111,
             0b00001111,
             0b00011111,
             0b00111111,
             0b01111111,
             0b11111110,
             0b11111100,
             0b11111000,
             0b11110000,
             0b11100000,
             0b11100000,
             0b11000000,
             0b10000000,
             };
int i,j,k;            // for迴圈的計數變數
// the setup routine runs once when you press reset:
void setup()
{
  // put your setup code here, to run once:
  for(i=0;i<8;i++)
  {
    pinMode(ledPin[i],OUTPUT);
    digitalWrite(ledPin[i],HIGH);
  }
}
void outPort(byte dat)
{
  for(j=0;j<8;j++)
  {
    if(dat %2==0) digitalWrite(ledPin[j],HIGH);
    else digitalWrite(ledPin[j],LOW);
    dat=dat/2;
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  for(k=0;k<adNum;k++)
  {
   outPort(adTable[k]);delay(delaytime);
  }
}





























































沒有留言:

張貼留言

algorithm

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