2021年12月30日 星期四
2021年12月26日 星期日
2021年12月25日 星期六
2021年12月18日 星期六
CNY70
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
Serial.begin(9600);
}
void loop()
{
if(analogRead(A5)>100 && analogRead(A5)<200)
{
digitalWrite(2, HIGH);
}
if(analogRead(A5)<100)
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
}
if(analogRead(A5)>300 && analogRead(A5)<1000)
{
digitalWrite(3, HIGH);
}
Serial.println(analogRead(A5));
delay(1000);
Arduino : CNY70
材料:
- CNY70 x 1
- 電阻 220 歐姆 x 1
- 電阻 10k 歐姆 x 1
資料來源:https://gsyan888.blogspot.com/2013/04/arduino-cny70.html
下面是將 CNY70 和 Arduino 連接的配置圖:
由俯視圖來看,如果 CNY70 的 Mark 在右側,右側是紅外線收接端 (D),而左側是紅外線發射端 (E)。如果 CNY70前是黑色的,A0 會呈現低電位狀態,相反的,如果 CNY70 前是白色時,A0 會是呈現高電位狀態。
我們可以利用下面的程式碼來觀察數值的變化:
const int irPin = 0;
void setup() {
Serial.begin(115200);
pinMode(irPin , INPUT);
}
void loop() {
int irVal = analogRead(irPin);
Serial.println(irVal);
delay(100);
}
利用觀察到的數值,如果再加兩顆馬達,就可以玩追著黑線跑的自走車了:
- 如果數值是黑色的範圍,就驅動前進的馬達。
- 如果數值是白色的範圍,就驅動左右轉的馬達,先順(逆)時轉一下,找不到黑線就再反方向轉,找到了就繼續驅動前進的馬達。
2021年12月10日 星期五
分十等分,超過就加就鎖住250
int i = 0;
void setup()
{
pinMode(3, OUTPUT);
digitalWrite(3, LOW);//一開機就設定為低電位
pinMode(2, INPUT);
digitalWrite(2, HIGH);//一開機就設定為高電位
Serial.begin(9600);
}
void loop()
{
if (digitalRead(2) == 0)
{
delay(1000);
while (digitalRead(2) == 0);
i = i + 25;
analogWrite(3, i);
if (i >= 255)//超過255,再壓一下進來是25
{
i = 250;
}
Serial.println(i);
}
}
不做用for loop 呼吸燈
void setup()
{
pinMode(3,OUTPUT);
}
void loop()
{
analogWrite(3,50);
delay(1000);
analogWrite(3,127);
delay(1000);
analogWrite(3,255);
delay(1000);
}
h m s
int Time_second;
int Time_minute;
int Time_hour;
unsigned long Time_hour_setting = 3600000; //1小時=60min 佔多少milli sec ,所以還要乘以1000
unsigned long Time_minute_setting = 60000;//1分=60秒 60 000ms
unsigned long Time_second_setting = 1000;//1秒=1000ms
//儲取millis()的變數
unsigned long start_time ;
void setup()
{
Serial.begin(9600);
}
void loop()
{
start_time=millis();
Serial.print(start_time);
Serial.print(" ");//演算法
Time_hour = start_time / 3600000; //小時 取到的值除小時得商為小時
Time_minute = (start_time % 3600000) / 60000; //分鐘 取到的值除小時 取餘數再除分 𢔽分
Time_second = ((start_time % 3600000) % 60000) / 1000; //秒 取到的值除小時除分 取餘數再除秒取商數 𢔽分
Serial.print(Time_hour);
Serial.print(":");
Serial.print(Time_minute);
Serial.print(":");
Serial.println(Time_second);
}
宣告整數 有正整數 負整數 0~32767 -32768~-1
int start_time;
void setup()
{
Serial.begin(9600);
int i = 32767;
int a, b, c, d, e, f, g;
Serial.println(a = i + 1);//-32768
Serial.println(a = i + 2);//-32767
Serial.println(a = i + 3);//-32766
Serial.println(a = i + 4);//-32768
Serial.println(a = i + 5);//-32764
Serial.println(a = i + 32767);//-2
Serial.println(a = i + 32768);//-1
Serial.println(a = i + 32769);//0
}
void loop()
{
}
2021年12月5日 星期日
array
#include <stdio.h>
#include <stdlib.h>
int main()
{
int v[]={1,2,3,4,5};
int i;
for(i=0;i<5;i++)
{
printf("%d\n",v[i]);
}
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int v[]={1,2,3,4,5};
int *n=v;//int *n =&v[0]
int i;
for(i=0;i<5;i++)
{
printf("%d\n",*(n+i)); //指標取值
}
}
2021年12月4日 星期六
pointer
#include <stdio.h>
#include <stdlib.h>
int addone(int *n)//int *
{
*n=*n+1;//位址的內容沒有int , 讀值或修改值,*星號位址值+1
}
int main()
{
int a=3;
addone(&a);//複制a的記憶體位址給 addone ,可以改變本尊
printf("%d\n",a);
return 0;
}
副程式練習
#include <stdio.h>
#include <stdlib.h>
int addone(int n)
{
n++;
return n;
}
int main()
{
int a=3;
int b=addone(a);
printf("%d\n",b);
return 0;
}
搭車問題共要幾台車
#include <stdio.h>
#include <stdlib.h>
int main()
{
int people=5;
int capacity=4;
int x=0;//x設定商數 人數/容量 , 商數=0就不用exe
int y=0;
x=people / capacity;
printf("%d\n",x);
y=people % capacity;//y設定商數 人數 mod 容量
printf("%d\n",y);
if(x !=0 && y !=0)//商數要不等於0且 mod不可以等於0,才exe,
{
x ++;
printf("%d",x);
}
return 0;
}
doulbe 除的問題
#include <stdio.h>
#include <stdlib.h>
int main()
{
int val1=10;
int val2=4;
int result1=0;
int result2=0;
int result3=0;
double result4=0;
printf("%d\n",result1=val1+val2);//整數+整數
printf("%d\n",result2=val1-val2);//整數-整數
printf("%d\n",result3=val1*val2);//整數*整數
printf("%f\n",result4=(double)val1/(double)val2);//整數除整數是整數在assign result
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int val1=10;
float val2=4;
float result1=0;
float result2=0;
float result3=0;
float result4=0;
printf("%d\n",result1=val1+val2);//整數+整數
printf("%d\n",result2=val1-val2);//整數-整數
printf("%d\n",result3=val1*val2);//整數*整數
printf("%f\n",result4=val1/val2);//整數除整數是整數在assign result
//其被加數、或被減數、被乘數、被除數只要其中設一個float即可,但+ - * 會有問題
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int val1=10;
int val2=4;
int result1=0;
int result2=0;
int result3=0;
float result4=0;
printf("%d\n",result1=val1+val2);//整數+整數
printf("%d\n",result2=val1-val2);//整數-整數
printf("%d\n",result3=val1*val2);//整數*整數
printf("%f\n",result4=(float)val1/(float)val2);//整數除整數是整數在assign result
return 0;
}
1+.....1000=500500
#include <stdio.h>
#include <stdlib.h>
int main()
{
int sum=0;
int i=0;
int j;
for(j=1;j<=1000;j++)//500500
{
sum=sum+j;
}
printf("%d\n",sum);
return 0;
}
2進位與16進位
#include <stdio.h>
#include <stdlib.h>
int main()
{
//2進位表示法bits
//01
//0b1111111
//16進位表示法 hex
//0123456789abcdef
//0x11223344
printf("%x\n",255);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
//2進位表示法bits
//01
//0b11111111//硬體控制會寫到
//16進位表示法 hex
//0123456789abcdef
//0x11223344
printf("%x\n",0b11111111); //compiler是認得的
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
char word0='a';
printf("%c\n",word0) ;
printf("%c \n",97);
printf("%c\n",0x61);
return 0;
}
relational operators 關係運算子
#include <stdio.h>
#include <stdlib.h>
int main()
{
//relational operators 關係運算子
int result =10>2;
if(result)
{
printf("Hello");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
//relational operators 關係運算子
bool result =10>2;
if(result)
{
printf("%d\n",sizeof(result));
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
//relational operators 關係運算子
bool result =10>=10;//10沒有大於10 自已沒有大於自已 不成立 false
//10>=10 自已有大於等於自已 成立 true
if(result)
{
printf("%d\n",sizeof(result));
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
//relational operators 關係運算子
bool result =(10 == 10);
//10==10為了區別,用小括號
//10沒有大於10 自已沒有大於自已 不成立 false
//10>=10 自已有大於等於自已 成立 true
//一個等號assign 兩個等號就是比較
if(result)
{
printf("%d\n",sizeof(result));
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
//relational operators 關係運算子
bool result =(10 != 10);
//驚嘆號就是反過來的意思
//10==10為了區別,用小括號
//10沒有大於10 自已沒有大於自已 不成立 false
//10>=10 自已有大於等於自已 成立 true
//一個等號assign 兩個等號就是比較
if(result)
{
printf("%d\n",sizeof(result));
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
//relational operators 關係運算子
bool result =(10 == 10);
//驚嘆號就是反過來的意思
//10==10為了區別,用小括號
//10沒有大於10 自已沒有大於自已 不成立 false
//10>=10 自已有大於等於自已 成立 true
//一個等號assign 兩個等號就是比較
if(!result)//驚嘆號要做用在布林值
{
printf("%d\n",sizeof(result));
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
//relational operators 關係運算子
bool result =(10 == 10);
//有時問題不是只有對跟錯,而是有些方案,就有else if, 就不會是boolean 而是else if 可以有好多個
//驚嘆號就是反過來的意思
//10==10為了區別,用小括號
//10沒有大於10 自已沒有大於自已 不成立 false
//10>=10 自已有大於等於自已 成立 true
//一個等號assign 兩個等號就是比較
if(!result)//驚嘆號要做用在布林值
{
printf("%d\n",sizeof(result));
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
int val=2;
if(val<1)
{
printf("004");
}
else if(val<=2)
{
printf("001");
}
else if(val<=2)//此行由上往下,因上面exe了,所以下面不會被exe
{
printf("002");
}
else
{
printf("null");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int people=11;//人數
int capacity=5;//一台車可以容納5個人
int cars=0;//一開始車子設定為0
int left_people=0;//剩下的人數
cars=people/capacity;//要幾台車子是人數除以容量
left_people=people % capacity;//剩下的人數=人數
if(left_people>0) //語意比較容昜看懂
{
cars ++;
left_people = 0;
}
printf("需要幾台車: %d\n",cars);
printf("有幾人沒搭到車: %d\n",left_people);
return 0;
}
搭車人數
#include <stdio.h>
#include <stdlib.h>
int main()
{
int people=11;//人數
int capacity=5;//一台車可以容納5個人
int cars=0;//一開始車子設定為0
int left_people=0;//剩下的人數
cars=people/capacity;//要幾台車子是人數除以容量
left_people=people % capacity;//剩下的人數=人數 取車子的mod
if(left_people)//沒有整除就是不是0,車量要加加
{
cars ++;
left_people = 0;
}
printf("需要幾台車: %d\n",cars);
printf("有幾人沒搭到車: %d\n",left_people);
return 0;
}
c語言是非0為1 0為false
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>//c語言是非0為1 0為false
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main()
{
if(true)
{
printf("OK");
}
return 0;
}
/* compiler就被代換(前置處理,前面取代後面,與變數不一樣)
#define bool _Bool
#define true 1
#define false 0
*/
8-13 dip
char seg7_table[] = {
~0xc0, ~0xf9, ~0xa4, ~0xb0, ~0x99, ~0x92, ~0x82, ~0xf8, ~0x80, ~0x90,
~0x88, ~0x83, ~0xc6,~0xa1, ~0x86, ~0x8e
};
byte weight[] = {8, 4, 2, 1};
byte seg7_pin[] = {2, 3, 4, 5, 6, 7, 8};
byte dip_sw[] = {9, 10, 11, 12};
byte number;
//----------------------------------------------------
void setup()
{
for (int i = 0; i < 7; i++)
{
pinMode(seg7_pin[i], OUTPUT);
}
for(int j=0;j<4;j++)
{
pinMode(dip_sw[j],INPUT);
}
Serial.begin(9600);
}
void tx(byte rx)
{
for (int x = 0; x < 7; x++)//只是讓他跑七段
{
if (rx % 2 == 1)
{
digitalWrite(seg7_pin[x], HIGH);
}
else
{
digitalWrite(seg7_pin[x], LOW);
}
rx = rx / 2;
}
}
void loop()
{
number = 0;
for ( int i = 0; i < 4; i++)
{
if (digitalRead(dip_sw[i]) == HIGH)
{
number = number + weight[i];Serial.println(number);
}
}
tx(seg7_table[number]);
}
8-13 dip
int seg7_pin[] = {2, 3, 4, 5, 6, 7, 8};
int dip_sw[] = {9, 10, 11, 12};
int weight[] = {8, 4, 2, 1};
int seg7_table[] = {~0xc0, ~0xf9, ~0xa4, ~0xb0, ~0x99, ~0x92, ~0x82, ~0xf8, ~0x80, ~0x90,
~0x88, ~0x8c, ~0xc6, ~0xa1, ~0x86, ~0x8e//寫是寫共陽,加個毛毛蟲(是bitwise),不是!(為真變假,假變真
};
int i;
int number;
void setup()
{
for (int a = 0; a < 7; a++)
{
pinMode(seg7_pin[a], OUTPUT);
}
Serial.begin(9600);
}
void tx(byte rx)
{
int x;
for (x = 0; x < 7; x++)
{
if (rx % 2 == 1)
digitalWrite(seg7_pin[x], HIGH);//板子是共陰,給高電位七段顯示器才會亮
else
digitalWrite(seg7_pin[x], LOW);
rx = rx / 2;
}
}
void loop()
{
number = 0;
for (i = 0; i < 4; i++)
{
if (digitalRead(dip_sw[i]) == HIGH)// if (digitalRead(dip_sw[i] == HIGH))括號括錯了
number = number + weight[i];//記得權值加中括號
Serial.println(number);
}
tx(seg7_table[number]);
}
指撥開關 一開機向左移1秒 再切換向右移0.3秒
int cnt=2;
byte val=0;
void setup()
{
pinMode(10,INPUT);
for (int i = 2; i < 10; i++)//想法是腳位2~9共8支腳
{
pinMode(i, OUTPUT);//全設為輸出
digitalWrite(i, LOW);//全設為低電位
}
}
void loop()
{
if (digitalRead(10)==0)//一開機讀的值為0由右向左跑一秒
{
digitalWrite(cnt, HIGH); delay(1000);//不可以用loop寫,因為不可以隨時切換
digitalWrite(cnt, LOW); delay(10);
cnt++;
if(cnt>9)//超過9,cnt設為0
{
cnt=0;
}
}
else
{
digitalWrite(cnt, HIGH); delay(300);//讀的值為1由左向右跑0.3秒
digitalWrite(cnt, LOW); delay(10);
cnt--;
if(cnt<0)//因為小於0,所以有負數,cnt不可以宣告byte , 要宣告因為有正負數
{
cnt=9;//小於0,設為9
}
}
}
cond 1 蜂鳴器叫三聲 、cond 2 led亮三下
boolean x = 0;//x為旗標蜂鳴器
boolean y = 0;//y為旗標led 13 pin
void setup()
{
pinMode(13, OUTPUT);
digitalWrite(13,LOW);
Serial.begin(9600);
}
void loop()
{
if (x == 0)//因為程式是由上往下exe, 狀況1:exe beep
{
for (int i = 0; i < 3; i++)
{
tone(7, 300);
delay(100);
noTone(7);
delay(1000);
}
x = 1;
}
if (y == 0)//狀況2:exe led
{
for (int i = 0; i < 3; i++)
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
y=1;
}}
一開機beep 三聲
boolean state = 0;//先設flag為0
void setup()
{
}
void loop()
{
if (state == 0)//進來為0,跑三次
{
for (int i = 0; i < 3; i++)
{
tone(7, 500);
delay(500);
noTone(7);
delay(1000);
}
state = 1;//跑完三次後,flag設為1就不會在exe,相當開機時,exe 三次
}
}
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...