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);
}
}
訂閱:
張貼留言 (Atom)
algorithm
#include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv) { for(int j=2;j<=100;j++)//j...
-
本文旨在補充《 超圖解Arduino互動設計入門 》第18章「RFID無線識別裝置與問答遊戲製作」單元,書本採用的RFID讀卡機模組是採用9600bps, TTL序列通訊介面,RFID的通訊頻率為125KHz。這種模組的接線和程式都很簡單,每當感測到RFID卡,讀卡機就把...
-
/* 多重按鈕開關 */ //==宣告區================================ #include // 定義8051暫存器之標頭檔,P2-17~19 #include "myio.h" // 自己寫的I/O程式庫 sbit PB...
沒有留言:
張貼留言