Robofun 機器人論壇
標題:
使用電晶體控制電源開關
[打印本頁]
作者:
king15119
時間:
2016-10-6 19:33
標題:
使用電晶體控制電源開關
各位前輩好
請問一下
最近剛接觸程式語言以及arduino開發版
想做一個簡易的電源開關控制
以下是我的程式碼
但當我輸入進去後
卻發現無法使電晶體作用
請問這板子的腳位都有特殊用途嗎?
還是小弟的程式碼出錯?
請各路大大求救
include <math.h>
int i, j, k;
int kmax=20; // 用kmax來調整頻率,值越大頻率越低
int iout=5; // 指定輸出腳位
int isin100, isin(100);
void setup()
{
float theta=0.0;
for( i=0 ; i<100 ; i++ )
{
isin(i) = int( 50. * ( sinf(3.1415926535898*theta/180.) + 1.0 ) ) ; // 依sine函數變化,產生0到100的結果
theta = theta + 3.6;
}
}
void loop()
{
for( i=0 ; i<100 ; i++ )
{
digitalWrite( iout , HIGH ); // 開
for( k=0 ; k<kmax ; k++ ) // 兩層空迴圈,延遲時間用
for( j=0 ; j<isin(i) ; j++ );
isin100 = 100 - isin(i); // 取100的補數
digitalWrite( iout , LOW ); // 關
for( k=0 ; k<kmax ; k++ ) // 兩層空迴圈,延遲時間用
for( j=0 ; j<isin100 ; j++ );
}
}
作者:
croma
時間:
2016-10-6 20:16
本帖最後由 croma 於 2016-10-6 20:17 編輯
回覆
1#
king15119
你用什麼方法觀測結果的呢? 看那兩個迴圈只跑了不到 2000 個循環~
作者:
超新手
時間:
2016-10-7 08:45
本帖最後由 超新手 於 2016-10-7 09:05 編輯
矩陣isin宣告錯了吧?
應該用中括號, 不是小括號
三個地方改一下
isin[100]
isin[ i] = int( 50. * ( sinf(3...
isin100 = 100 - isin[ i];
複製代碼
作者:
croma
時間:
2016-10-7 12:20
回覆
3#
超新手
這樣編譯器還能過啊 @@? 我還以為是 arduino 的宣告特色 orz
這麼說來 arduino 到底使用甚麼程式語言
作者:
king15119
時間:
2016-10-9 13:39
回復
3#
超新手
感謝大大的回覆
以下是我們更改後的程式碼
我們會再租借視波器回來測波型
十分感謝各路大大!!!!
#include <math.h>
int i, j, k;
int kmax = 20; // 用kmax來調整頻率,值越大頻率越低
int iout = 5; // 指定輸出腳位
int isin100, isin[100];
void setup()
{
float theta = 0.0;
for ( i = 0 ; i < 100 ; i++ )
{
isin
= int( 50 * ( sinf(3.1415926535898 * theta / 180.) + 1.0 ) ) ; // 依sine函數變化,產生0到100的結果
theta = theta + 3.6;
}
}
void loop()
{
for ( i = 0 ; i < 100 ; i++ )
{
digitalWrite( iout , HIGH ); // 開
for ( k = 0 ; k < kmax ; k++ ) // 兩層空迴圈,延遲時間用
for ( j = 0 ; j < isin
; j++ );
isin100 = 100 - isin
; // 取100的補數
digitalWrite( iout , LOW ); // 關
for ( k = 0 ; k < kmax ; k++ ) // 兩層空迴圈,延遲時間用
for ( j = 0 ; j < isin100 ; j++ );
}
}
作者:
king15119
時間:
2016-10-9 13:40
回復
4#
croma
我們是以C為基礎下去打的^^"
但也不確定對或不對
希望有大大能幫忙解惑
作者:
king15119
時間:
2016-10-9 13:43
回復
2#
croma
感謝大大的幫忙
想請問一下
迴圈不到兩千次的意思是?
先前因為連程式都無法燒入,所以就停工了^^"
作者:
croma
時間:
2016-10-9 16:46
本帖最後由 croma 於 2016-10-9 16:49 編輯
回覆
7#
king15119
>int kmax=20;
>isin(i) = int( 50. * ( sinf(3.1415926535898*theta/180.) + 1.0 ) ) ; // 依sine函數變化,產生0到100的結果
> for( k=0 ; k<kmax ; k++ ) // 兩層空迴圈,延遲時間用
> for( j=0 ; j<isin(i) ; j++ );
所以你這兩個空迴圈最多執行 20 * 100 次,以現在的單晶片的執行速度一個指令是 10 的 -6 次方 這最多 執行
((比較 x 1 + 加法 x 1) * isin(i) + 加法 x1 ) * kmax 個指令
(sin(i) 不到 100) * (kmax = 20) 那最多就兩千個循環 間隔應該在 10 ms 上下吧,這遠低於肉眼的反應速度
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2