iT邦幫忙

2

請問讓燈的顏色順時針轉動的寫法??

  • 分享至 

  • xImage

請問讓燈的顏色順時針轉動的寫法??

請問想讓圓盤上的燈號(紅橙黃綠藍錠紫白白白白白十二種顏色,如附件圖片!)
依照順時針方向轉動,
請問應該如何寫迴圈呢??
(怎麼讓"燈號"部分跑迴圈,遇到12後,由重新由燈號1,開始跑迴圈?)

感謝您

https://ithelp.ithome.com.tw/upload/images/20200917/2005850330RQnSUcI8.png

https://ithelp.ithome.com.tw/upload/images/20200917/20058503cI1vq6jZuD.jpg

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
4
japhenchen
iT邦超人 1 級 ‧ 2020-09-17 09:21:33
最佳解答

這次我用HTML5 + Pure javascript寫

完整範例在jsfiddle (會動,完全自己寫的,無參照,用上了一堆Math.sin / cos / PI )

https://jsfiddle.net/gxeLz7ct/5/

HTML部份

<canvas id="canvas" width="200" height="200">
</canvas>

javascript部份

var colorArr = ["white","white","white","white","white","purple","darkblue","lightblue","green","yellow","orange","red"];
var Q = 0;
drawClock();

function drawClock(){
	var c = document.getElementById("canvas");
  var pi = Math.PI;
  var h = pi*2/12;
  var startArc = -0.5*pi;
  var endArc = 1.5*pi;
  var r = 150 ;
  var rWord = 120;
  var cX = 150;
  var cY = 150;
  var lenColor = colorArr.length;
  c.width = 500;
  c.height = 500;
  var ctx = c.getContext("2d");
  ctx.font= "1.5em Verdana";
  ctx.beginPath();
  ctx.fillStyle="Yellow";
  ctx.arc(r,r,r,startArc,endArc);
  ctx.stroke();
  var x = 0 ;
  var y = 0 ;
  for(i = Q ; i<=Q+12 ; i++){
    var xi =i%12==0 ? 12 : i %12;
  	var metrics = ctx.measureText(xi);
    var aW =metrics.width;
	  var fontHeight = metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent;
		var aH = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;

		ctx.beginPath();
  	x = Math.cos(startArc+h*i)*rWord+cX; 
    y = Math.sin(startArc+h*i)*rWord+cY; 
    ctx.fillStyle = colorArr[(i-1-Q)%12];
    ctx.arc(x,y,20,startArc,endArc);
    ctx.fill();
    ctx.stroke();
    ctx.fillStyle="black";
    ctx.fillText(xi,x-aW/2,y+aH/2);
  }  
  Q=Q<11?Q+1:0;
  setTimeout(drawClock,1000);
};

看更多先前的回應...收起先前的回應...

SORRY我發現忘了把時間的數字改掉了

myubuntu iT邦新手 4 級 ‧ 2020-09-17 09:24:38 檢舉

超牛,請問住地球嗎?

javascript的部份修正....不然會出現走鐘狀況

jsfiddle最後版次....
https://jsfiddle.net/gxeLz7ct/5/

myubuntu
金星

教直接用 canvas 會不會太快了。

我選canvas已經是最簡單的寫法了,用C#還得搬Graphics出來,而且還不好DEMO

是該把註解加上去,不然一定會有人看到霧剎剎

麻煩是在畫圖跟小時數字那一段,動用到三角函數,還好國中數學沒忘掉,不然就鬧笑話了

題目根本沒寫要用在哪個平台上,或是用8051/arduino/raspberry的IoT控制RGB LED燈........

myubuntu iT邦新手 4 級 ‧ 2020-09-17 15:09:47 檢舉

是mblock的halocode

那簡單多了,就把我用到ColorArr色陣列拿去用,然後你用一個變數指示當前的時間變數1到12不斷累加1,超過12則回到1這樣處置

我手邊沒有mBlock,家裡有Arduino但只有黃綠紅LED可用,數量不足以湊足12*3=36個..也沒法實作給你看了...

小魚 iT邦大師 1 級 ‧ 2020-09-17 16:54:01 檢舉

人才啊

小魚 iT邦大師 1 級 ‧ 2020-09-17 17:03:56 檢舉

剛剛有跑過,
確實是可以用的.
/images/emoticon/emoticon32.gif

myubuntu iT邦新手 4 級 ‧ 2020-09-17 18:08:37 檢舉

請問小魚,您是如何跑的?

myubuntu iT邦新手 4 級 ‧ 2020-09-17 19:04:28 檢舉

大大請教您
現在遇到,第一個燈與第二個燈都會跑紅色的??

小湯 iT邦好手 1 級 ‧ 2020-09-18 13:23:20 檢舉

厲害,高手!

myubuntu debug一下色彩陣列的索引值是不是給錯了?

myubuntu iT邦新手 4 級 ‧ 2020-09-19 07:26:35 檢舉

初步解決了,感謝金星人協助地球人

1
小魚
iT邦大師 1 級 ‧ 2020-09-17 07:47:49

用Timer吧,
其實所謂跑馬燈就是前面那個暗了,
後面那個亮了,
看起來就像是往旁邊跑了,
可是其實就是控制燈的明跟暗而已.

看更多先前的回應...收起先前的回應...
myubuntu iT邦新手 4 級 ‧ 2020-09-17 08:12:57 檢舉

請問應該如何使用?

小魚 iT邦大師 1 級 ‧ 2020-09-17 08:24:24 檢舉

這是作業還是別人請你做的?
所以你目前進行到哪個部分呢?

myubuntu iT邦新手 4 級 ‧ 2020-09-17 08:26:16 檢舉

這是自己在學校教學上的範例研究。

目前的想法是:可以讓"燈號"部分跑迴圈,遇到12後,由重新由燈號1,開始跑迴圈????

小魚 iT邦大師 1 級 ‧ 2020-09-17 08:30:23 檢舉

想那麼多沒有用,
可以先試試看,
有問題再查資料,
查不到資料再上來問.

myubuntu iT邦新手 4 級 ‧ 2020-09-17 08:31:32 檢舉

已經搜尋過,但是無解

小魚 iT邦大師 1 級 ‧ 2020-09-17 08:36:17 檢舉

所以問題是卡在哪裡?
我也沒有LED可以實測,
只能說一些概念而已.

myubuntu iT邦新手 4 級 ‧ 2020-09-17 08:44:21 檢舉

請問迴圈的語法可以寫成這樣嗎?

1、2、3、4、5、6、7、8、9、10、11、12
2、3、4、5、6、7、8、9、10、11、12、1
3、4、5、6、7、8、9、10、11、12、1、2
4、5、6、7、8、9、10、11、12、1、2、3
5、6、7、8、9、10、11、12、1、2、3、4
6、7、8、9、10、11、12、1、2、3、4、5
……………………….
…………………………
11、12、1、2、3、4、5、6、7、8、9、10
12、1、2、3、4、5、6、7、8、9、10、11
1、2、3、4、5、6、7、8、9、10、11、12
2、3、4、5、6、7、8、9、10、11、12、1
…………………………………………………………………..
…………………………………………………………………….

1
ch_lute
iT邦新手 5 級 ‧ 2020-09-17 09:07:03

你想要的迴圈效果就是讓他跑無窮迴圈
取i除以12的餘數代表12個燈
剩下自己想
這邏輯一般人是小學~高1都有可能會的

myubuntu iT邦新手 4 級 ‧ 2020-09-17 09:20:38 檢舉

謝謝您提供的線索

0

1.設定一個time,每秒跑一次
2.抓當前的秒數 用目前秒數除於5。取其正整數做key。
3.將12的值當0的key。
4.點亮計算出來key燈號。
5.解決!!

以上只給你另一種觀念。當然這是依秒數,不一定是你要的。另一種寫法是
也是得將12當0key用

s = 啟始值 0~11;
foreach(i=1;i<=12;i++){
    keyAdd = s+i;
    key = keyAdd%12;//取其餘數當key
    全滅燈();
    亮燈(key);
}

都給你觀念了,自已寫看看吧。至於燈的顏色可事先定義好。

myubuntu iT邦新手 4 級 ‧ 2020-09-17 09:31:09 檢舉

您的提示,深入淺出,我試試看

myubuntu iT邦新手 4 級 ‧ 2020-09-18 07:18:48 檢舉

大大請教您
現在遇到,第一個燈與第二個燈都會跑紅色的??

我要發表回答

立即登入回答