Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 3522|回復: 7
打印 上一主題 下一主題

使用電晶體控制電源開關

[複製鏈接]
跳轉到指定樓層
1#
發表於 2016-10-6 19:33:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位前輩好

請問一下

最近剛接觸程式語言以及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++ );
  }
}
2#
發表於 2016-10-6 20:16:51 | 只看該作者
本帖最後由 croma 於 2016-10-6 20:17 編輯

回覆 1# king15119

你用什麼方法觀測結果的呢? 看那兩個迴圈只跑了不到 2000 個循環~
3#
發表於 2016-10-7 08:45:24 | 只看該作者
本帖最後由 超新手 於 2016-10-7 09:05 編輯

矩陣isin宣告錯了吧?
應該用中括號, 不是小括號
三個地方改一下
  1. isin[100]
  2. isin[ i] = int(  50. * ( sinf(3...
  3. isin100 = 100 - isin[ i];
複製代碼
4#
發表於 2016-10-7 12:20:23 | 只看該作者
回覆 3# 超新手

這樣編譯器還能過啊 @@? 我還以為是 arduino 的宣告特色 orz

這麼說來 arduino 到底使用甚麼程式語言
5#
 樓主| 發表於 2016-10-9 13:39:34 | 只看該作者
回復 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++ );
  }
}
6#
 樓主| 發表於 2016-10-9 13:40:53 | 只看該作者
回復 4# croma

我們是以C為基礎下去打的^^"

但也不確定對或不對
希望有大大能幫忙解惑
7#
 樓主| 發表於 2016-10-9 13:43:11 | 只看該作者
回復 2# croma

感謝大大的幫忙
想請問一下

迴圈不到兩千次的意思是?

先前因為連程式都無法燒入,所以就停工了^^"
8#
發表於 2016-10-9 16:46:57 | 只看該作者
本帖最後由 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 上下吧,這遠低於肉眼的反應速度
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-21 21:27 , Processed in 0.157232 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表