2022年7月24日 星期日

3個7Segment的計數器

3個7Segment的計數器


接線:

1.請使用單一個 7-segment  的接線圖

2.新增兩個 7-segment,把 abcdefg 七條線並聯

3.重點--藍色線: arduino的pin 9,10,11 分別接到三顆七段顯示器的共陽(pin3),pin9接最左邊(最高位數)

工作原理:

一、抓出數字的百位數,十位數,個位數

    if(dig==0)   { x=cnt%10; }   // 個位數

    if(dig==1)   { x=(cnt/10)%10;}   // 十位數

    if(dig==2)   { x=cnt/100; }   // 百位數

二、三顆七段顯示器其實是個別顯示的,利用視覺暫留的原理,看起來是同時顯示的。

  for(int kk=0;kk<10;kk++)  <-------重複顯示10次
  {
    for(int dig=0;dig<3;dig++) 
    {
        ****設定哪一顆顯示器可使用(enable)****
        **** digitalWrite(11,HIGH); <----  HIGH 就是啟用
    
         for(int k=0;k<8;k++)    <----------送出資料,其實是同時送給三顆
         {      digitalWrite(seg7P[k],bitRead(segCode[x],k));           } 

          delay(10) ;  <----讓這一個數字顯示10ms
 
        } // for dig
     } //  for kk 持續一段時間  

   **** 每一組三位數數字實際顯示的時間是  10ms x 10 = 100ms

三、殘影---怎麼解決?


四、程式


2022年7月19日 星期二

七段顯示器、二進位編碼、 計時器

七段顯示器、二進位編碼、 計時器
參考書: 超圖解Arduino互動設計,旗標出版社,趙英傑著
 
七段顯示器( 7-Segment ) 接腳圖
7 segment 接線:




2.數字編碼



3. 共陽極 vs 共陰極



4. 共陽極腳位編碼轉成16進位 : 0x01,0x4f,0x12,0x06,0x4C,0x24,0x20,0x0f,0x00,0x04
     A-10 , B-11, C-12, D-13, E-14 , F-15

5. 程式執行概念




6.程式碼
( 轉到 html 編碼 script ---> Gist.github.com )


7.一個位元的計數器
( 轉到 html 編碼 script ---> Gist.github.com )

2022年7月18日 星期一

Tinkercad Circuits:LED 模擬走馬燈

 二、Tinkercad Circuits:LED 模擬走馬燈




  1. Arduino UNO R3 x 1
  2. Small Breadboard x 10
  3. 220 ohm Resistor x 10
  4. LED x 10




程式1: 用for迴圈控制,讓全部LED同時閃爍 程式2: 用for迴圈控制,讓LED輪流閃爍 程式3: 用for迴圈控制,讓LED流動

TinkerCAD 01 第一個電路 LED

 TinkerCAD 01 第一個電路 LED 

TinkerCAD 第一個電路測試: 連接LED正負極,測試LED的反應: 亮/不亮/燒毀 ?


https://www.ledinside.com.tw/knowledge/20121022-23498.html
LED的電流:LED的正向極限(IF)電流多在20MA
LED的電壓:通常所說的LED是正向電壓,就是說LED的正極接電源正極,負極接電源負極。電壓與顏色有關係
紅、黃、黃綠的電壓是1.8—2.4v之間
白、藍、翠綠的電壓是3.0—3.6v之間

1.不使用電組,LED電壓是多少?

2.使用電組
  電阻值怎麼看? 


1,.歐姆定律 E=IR, R=E/I = 1.5V / 20mA = 75歐姆(最小)
    請試用不同大小的電阻,試試看LED的亮度如何
2. 麵包板的並聯




2022年4月20日 星期三

list + for

 python list + for 串列與for綜合運用

#a生8科成績,計算總和及平均
a=[45,67,89,56,34,56,77,88]
print(a)

#印出每一科成績
for i in rangelen(a)):   #range(10)=0~9 ,  0~n-1
   print("科目" , i , "=" , a[i] )

print("----------------------")
#列印每一科成績跟60分的差距
# 科目0= -15
# 科目1= 7 
for i in rangelen(a)):
  print("科目" , i , "跟60分的差距=" , a[i]-60 )


#列印每一科成績是不是及格
print("----------------------")
for i in rangelen(a)):
  print("科目" , i , "=" , a[i] ,end="")
  if(a[i]>=60) : 
    print("及格")  
  else:
    print("不及格")

sum=0
for i in rangelen(a)):
   sum = sum + a[i]
print("總和=",sum)
print("平均=",sum/8)

------------------------------------------------------

#用亂數產生a生8科成績,計算總和及平均
import random
a=[]
for i in range(8): 
  a.append(random.randint(1,100))

sum=0
for i in rangelen(a)):
   sum = sum + a[i]
print(a)
print("總和=",sum)
print("平均=",sum/8)

------------------------------------

#用亂數產生10個學生8科成績,計算總和及平均
import random
tmp=[];
a=[]
for j in range(10):
 tmp=[] 
 for i in range(8): 
   tmp.append( random.randint(1,100))  # tmp=[82, 11, 80, 11, 86, 98, 2, 7]--->8筆成績
 a.append( tmp )   
print(a)

for i in range(10):
   sum=0
   for j in range(8):
    sum = sum + a[i][j];
   print("總和=",sum)
   print("平均=",sum/8)

------------------------------------

#用亂數產生a,b,c三個學生每個人8科成績,計算各科總和(subject_sum[])及個人總和(sum_a,sum_b,sum_c)
import random
a=[]; b=[] ; c=[]
for i in range(8): 
  a.append(random.randint(1,100))
  b.append(random.randint(1,100))
  c.append(random.randint(1,100))

sum_a=0 ; sum_b=0 ; sum_c=0
for i in range(8):
  sum_a += a[i]
  sum_b += b[i]
  sum_c += c[i]
print(a,sum_a) ; print(b,sum_b) ; print(c,sum_c)

#各科總和
subject_sum=[]
for i in range(8): subject_sum.append(0)  # sum起始值
for i in range(8):
  subject_sum[i]=a[i]+b[i]+c[i]
print(subject_sum)

--------------------------------

# for迴圈與字串操作----大數運算
a="88888888888888888999"   #20位數
b="22222222222222222456"
c=[]
for i in range(21): c.append(0)  #21位數

# 加法
carry=0   #進位
for i in range(19,-1,-1):
  x=int(a[i])+ int(b[i])+ carry
  if( x>=10 ):
    c[i+1]=x-10   # c 多一位數
    carry=1
  else:
    c[i+1]=x
    carry=0 
c[i]=carry   # 第0位=進位
print(c)



for loop

 # 印出1-10, 兩種印法

for i in range(10):   # 0~9
  print(i+1 ,  ","  , end="")

for i in range(10):
  print(i+1)

-------------------------------

# 請印出 1~100 3 的倍數,不斷行
for i in range(100):
  if( i%3 ==0) : 
    print(i,",",end="")

# 請印出 1~100 3and5 的倍數,不斷行
# A and B ---> A,B同時成立 , A or B --> A或B 其中一個成立  ,not A --> A不成立
print()
print("印出 1~100 3and5 的倍數--->",end="")
for i in range(100):
 if( i%3==0 and i%5==0): 
   print(i,",",end="")

-------------------------------

# 印出 100 個星星,不斷行
for i in range(100): print("*",end="")
print()

# 印出 10x10 的星星方塊
for i in range(10):
  print(i,end="")
  for j in range(10):
    print("* ",end="")
  print()  

for i in range(10):
  print(i,end="")
  for j in range(10):
    print(j," ",end="")
  print() 

----------------------------

# 巢狀迴圈
for i in range(1,6):
  for j in range(1,6):
    print(i,",",j)

---------------------------

# 印出三角形
for i  in range(10):
  for j in range(i): print("*",end="")
  print()

for i  in range(10,0,-1):
  for j in range(i): print("*",end="")
  print()

# python特有的寫法
for i  in range(10): print(" "*(12-i) + "*"*i )

-----------------------------------

# 印聖誕樹