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宣告錯了吧?
應該用中括號, 不是小括號
三個地方改一下
  1. isin[100]
  2. isin[ i] = int(  50. * ( sinf(3...
  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