tag:blogger.com,1999:blog-68652564887291729242024-03-05T20:44:21.025+08:00MechaMotionArduino, Radio Amatur Dan Automasi.
Bersama berkongsi ilmu tentang teknologi arduino, elektronik, radio amatur dan automasi perindustrian dan domestikEawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-6865256488729172924.post-79401634131525013072021-09-22T16:43:00.001+08:002021-09-22T16:43:12.991+08:00Cara upload HEX file untuk arduino Pro MiniSalam sejahtera kepada semua pembaca. <div><br /></div><div><b>Pengenalan. </b></div><div>Terdapat banyak cara untuk upload HEX file ke arduino uno, mega dan nano. Tetapi kali ni saya ingin berkongsi cara untuk upload HEX file ke dalam ARDUINO PRO MINI melalui USB FTDI.<br /></div><div><br /></div><div><b>Langkah.</b></div><div>1. Plug arduino anda ke PC. sambungkan arduino dan FTDI converter seperti <a href="http://9w2nfe.blogspot.com/2015/12/tutorial-program-arduino-pro-mini.html" target="_blank">disini</a>.</div><div>2. Pilih board. Tool > Board > Arduino Pro or PRO Mini.</div><div>3. Pilih processor board. Tool > Processor > ATMega328p (5v,16Mhz)</div><div>4. Pilih port board. Tool > COMxx (mengikut com usb anda)</div><div>5. Tekan File > Preference - Show verbose output during - (check box) upload.</div><div>6. Upload sebarang coding kedalam arduino anda.</div><div><br /></div><div>pada bahagian bawah Arduino IDE. baris ketiga akan terdapat kenyataan begini.</div><div><br /></div><div><b>C:\Users\Eawan\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\Eawan\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -patmega328p -carduino -PCOM8 -b57600 -D -Uflash:w:<i><u>C:\Users\Eawan\AppData\Local\Temp\arduino_build_102101/Blink01.ino.hex</u></i>:i </b></div><div><br /></div><div>7. Pilih dan salin AVRDUDE command tersebut.</div><div>8. Tukar pada bahagian yang saya underline mengikut lokasi file HEX anda.</div><div>9. Salin semula AVRDUDE command tersebut dan paste pada windows COMMAND PROMPT.</div><div>10. Tekan ENTER dan tunggu sehingga process selesai.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihpe1Fzy64S8QvbQ57CZu-K2yfHoPz66GXYOyKDM43CnWHo94D2OPAByoHWXkA6fadz63B5URFOLfZUgG9sLbjWcN59-oNn3R-TQe3si6wgOoMKHj3e1L41w7PrU1L7CzIa-Rfn9EwDQI/s1921/sketch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1042" data-original-width="1921" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihpe1Fzy64S8QvbQ57CZu-K2yfHoPz66GXYOyKDM43CnWHo94D2OPAByoHWXkA6fadz63B5URFOLfZUgG9sLbjWcN59-oNn3R-TQe3si6wgOoMKHj3e1L41w7PrU1L7CzIa-Rfn9EwDQI/w640-h348/sketch.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPm06-Qpkr6GGYNig_O_0DcFxEnbqLshX5xNMlrsNpRDolPvfpui9d319IDsN2z6dXH6lk9ZEBhG56dRQFIdkD3D9UVYOTj2NU77a2Y2c3do8GglTnZxewkqrk11EJIAMFkj-ShWv5AXM/s800/bef+up.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="599" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPm06-Qpkr6GGYNig_O_0DcFxEnbqLshX5xNMlrsNpRDolPvfpui9d319IDsN2z6dXH6lk9ZEBhG56dRQFIdkD3D9UVYOTj2NU77a2Y2c3do8GglTnZxewkqrk11EJIAMFkj-ShWv5AXM/w300-h400/bef+up.png" width="300" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghdySVwdjBKWIW4eWTZODs0HQ_H3xwi9rleqM4wd5xes5IqtNgsEdyJoca_60BoNoF9RdKNKT-E8f3_aQjY1-vSGnj1bKle99wiT5yxPjeeVCWaVWeipkz4dn6CJ_src0yVruPGlipAjc/s1373/aft+up.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1373" data-original-width="600" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghdySVwdjBKWIW4eWTZODs0HQ_H3xwi9rleqM4wd5xes5IqtNgsEdyJoca_60BoNoF9RdKNKT-E8f3_aQjY1-vSGnj1bKle99wiT5yxPjeeVCWaVWeipkz4dn6CJ_src0yVruPGlipAjc/w280-h640/aft+up.png" width="280" /></a></div><div><br /></div><div><br /></div>Selesai....<div><br /></div><div><br /><div>Selamat mencuba...<br /><div><br /></div><div><br /></div><div><br /></div><div><b>PENAFIAN : EAWAN, 9W2NFE</b> sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri
Sebarang kemuskilan atau pertanyaan boleh hubungi saya. </div><div>WHATAPSS <a href="wa.me/60123678264">MAFeS</a></div></div></div>Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-60472709434860613482021-09-01T11:45:00.001+08:002021-09-01T11:52:35.785+08:00Arduino Semi Auto wire dispenserSalam sejahtera kepada semua pembaca. <div><br /></div><div><b>Pengenalan. </b></div><div>Projek ini menggunakan stepper motor untuk mengukur secara automatik kepanjangan wayar yang diperlukan apabila push button ditekan. seterusnya menambah nilai 1 kepada counter. </div><div><br /></div><div><b>Komponen yang digunakan.</b></div><div>1. Arduino Uno</div><div>2. A4988 stepper driver</div><div>3. Stepper motor</div><div>4. Push button</div><div>5. Resistor 10K</div><div>6. Jumper wire.</div><div><br /></div><div><br /></div><div><b>Penyambungan. </b></div><div><b><br /></b></div><div><b><br /></b></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1eWGA_nWTzG0-Ty9fsRFJMEjCc2__WejDvkw0NKZBj1hW_YPLvlegQoalZQcLQU3Ol8VDzDwwiUbjQRK3wYht9RMGFtaVdTxisw0le70EBkDpwQZOmzMtCuj8-5mM8GhyphenhyphencwsW1wJhw8E/s2563/stepper_bb.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1226" data-original-width="2563" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1eWGA_nWTzG0-Ty9fsRFJMEjCc2__WejDvkw0NKZBj1hW_YPLvlegQoalZQcLQU3Ol8VDzDwwiUbjQRK3wYht9RMGFtaVdTxisw0le70EBkDpwQZOmzMtCuj8-5mM8GhyphenhyphencwsW1wJhw8E/w640-h306/stepper_bb.png" width="640" /></a></div><br /><div><br /></div><div><br /></div><div><b>Coding. </b></div><div><div><br /></div><div>// Define stepper motor connections and steps per revolution:</div><div>#define dirPin 2</div><div>#define stepPin 3</div><div>#define stepsPerRevolution 400 //tuning step feeding</div><div>#define button01 7 // start button</div><div>int buttonState = 0; </div><div>int count =0; // counter</div><div><br /></div><div>void setup() {</div><div> // Declare pins as output:</div><div> pinMode(stepPin, OUTPUT);</div><div> pinMode(dirPin, OUTPUT);</div><div> pinMode(button01, INPUT);</div><div> Serial.begin(9600);</div><div>}</div><div><br /></div><div>void loop() {</div><div> buttonState = digitalRead(button01);</div><div><br /></div><div> if (buttonState == HIGH){</div><div> // Set the spinning direction clockwise:</div><div> digitalWrite(dirPin, LOW);</div><div><br /></div><div> // Spin the stepper motor 1 revolution slowly:</div><div> for (int i = 0; i < stepsPerRevolution; i++) {</div><div> // These four lines result in 1 step:</div><div> digitalWrite(stepPin, HIGH);</div><div> delayMicroseconds(2000);</div><div> digitalWrite(stepPin, LOW);</div><div> delayMicroseconds(2000);</div><div> }</div><div> count = count+1;</div><div> Serial.println(count);</div><div> delay(500);</div><div> </div><div> }</div><div><br /></div><div> else{</div><div> </div><div> }</div><div><br /></div><div>}</div></div><div><br /></div><div><a href="https://fb.watch/7KICBy1CSa/">video</a><br /></div><div><br /></div><div><br /></div><div><b>PENAFIAN : EAWAN, 9W2NFE</b> sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri
Sebarang kemuskilan atau pertanyaan boleh hubungi saya. </div><div>WHATAPSS <a href="wa.me/60123678264">MAFeS</a></div>Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-7964126439883069482021-07-14T17:35:00.011+08:002021-09-01T18:58:33.447+08:00Pengujian Jarak NRF24L01<div><div><br /></div><div><div>Salam sejahtera kepada semua pembaca. </div><div><br /></div><div><b>Pengenalan. </b></div><div>Projek ini bertujuan menilai jarak maksimum pemancaran dan penerimaan gelombang 2.4Ghz yang berkuasa rendah untuk penghantaran sesuatu data. Projek ini boleh digunakan untuk menilai Hardware Setup yang telah disediakan sebelum digunakan untuk penghantaran data sebenar mengguna hardware setup yang sama.</div><div>Transmitting dan receiving boleh ditambah baik dengan beberapa kaedah mengikut keadaan lokasi hardware berada seperti:- </div><div><b>1. Ketinggian antenna dari paras tanah.</b></div><div> - Lebih tinggi antenna dari tanah bermakna ia makin kurang halangan seperti pokok, bangunan dan sebagainya.</div><div><b>2. Jenis antenna.</b></div><div> - Terdapat beberapa jenis antenna yang boleh digunakan mengikut keperluan. Contohnya antenna Yagi, berguna apabila kita tahu arah penalaan antenna yang membolehkan penerimaan atau pemancaran pada tahap yg optimum. Antenna omni yang berguna untuk penerimaan atau pemancaran gelombang pada kawasan yang lebih luas.</div><div><b>3. Kuasa pancaran.</b></div><div> - Mempengaruhi jarak pemancaran dan penggunaan bekalan kuasa. Lebih kuat kuasa pancaran, lebih jauh capaian gelombang dan juga makin lebih penggunaan bekalan kuasa, ini bermakna bateri anda makin cepat lemah.</div><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6dqrac-o4mZlWXWkq-VDqvbiTBbOHFx-khixfBaYKNa0o-Zh31rAoOBZjY-KM-MFe7-_wJpthPDZmQMGj7uepY1Yb-2Ww0azrAhWjxowhRH1VkYJxBvyJxt6Ug322LrW9vpx6eW-4CF0/s300/biquad+omni.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="276" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6dqrac-o4mZlWXWkq-VDqvbiTBbOHFx-khixfBaYKNa0o-Zh31rAoOBZjY-KM-MFe7-_wJpthPDZmQMGj7uepY1Yb-2Ww0azrAhWjxowhRH1VkYJxBvyJxt6Ug322LrW9vpx6eW-4CF0/s0/biquad+omni.jpg" width="276" /></a></div><div class="separator" style="clear: both; text-align: center;">Biquad Omni Antenna</div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiehxyRvYiyGjh8ltk2KjHqf9ZMu_3C-VFsS-1e0Hgz7YW-xDITwBKOXS_W4iogOHhOx17gzN7Xa8GxdtdulQMXs3J_Fh7o_5tMI6Eunu-JlnNTBTxP3rJVwBVfqMaq7BfODaQtyGvUGkY/s264/omni.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="264" data-original-width="173" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiehxyRvYiyGjh8ltk2KjHqf9ZMu_3C-VFsS-1e0Hgz7YW-xDITwBKOXS_W4iogOHhOx17gzN7Xa8GxdtdulQMXs3J_Fh7o_5tMI6Eunu-JlnNTBTxP3rJVwBVfqMaq7BfODaQtyGvUGkY/s0/omni.jpg" width="173" /></a></div><div class="separator" style="clear: both; text-align: center;">Omni Antenna</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLOsiovHd794gBcAY67QKKNayc4RM2OxoY2_sY0SgCQ5S_qxXz8hpvLiO8XHzCgFgsUL38gJ97boqwh2MpRq6JeRpKvlucFA-0mlVv0v5dkAWCWSFiBQ8LUK1-YLJFSiha797MVGRIdcY/s600/parabolic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="600" data-original-width="600" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLOsiovHd794gBcAY67QKKNayc4RM2OxoY2_sY0SgCQ5S_qxXz8hpvLiO8XHzCgFgsUL38gJ97boqwh2MpRq6JeRpKvlucFA-0mlVv0v5dkAWCWSFiBQ8LUK1-YLJFSiha797MVGRIdcY/s320/parabolic.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;">Parabolic antenna</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioaHC8vnb9QlmqqwWgMQdJtLMzKvBk3LMrjTU5_BneZevEQr9E3DIdUBPi1MvuoA_e7f2MhMJ9qKr1-_SpTCsj6INNIUiEfbYlz5W7S93_RtWjnljB6yVput2Zae0vSz2Cmby4qVoRErY/s250/patch.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="250" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioaHC8vnb9QlmqqwWgMQdJtLMzKvBk3LMrjTU5_BneZevEQr9E3DIdUBPi1MvuoA_e7f2MhMJ9qKr1-_SpTCsj6INNIUiEfbYlz5W7S93_RtWjnljB6yVput2Zae0vSz2Cmby4qVoRErY/s0/patch.jpg" width="250" /></a></div><div class="separator" style="clear: both; text-align: center;">Patch antenna</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5ZGIuHs7L_Mq07ey5lIskdoCw7ni4_wXcPzQI14DRu3fSZGgEtKSryC4OHMrZt-lNPEuTZQ7rgj8uhC_HPNo1tTJuUdZ4Ku03sG4DMUmHTWguQ4jez3eiOpasPrgX1P5bfGTkXwHkVgY/s1001/yagi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1001" data-original-width="1001" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5ZGIuHs7L_Mq07ey5lIskdoCw7ni4_wXcPzQI14DRu3fSZGgEtKSryC4OHMrZt-lNPEuTZQ7rgj8uhC_HPNo1tTJuUdZ4Ku03sG4DMUmHTWguQ4jez3eiOpasPrgX1P5bfGTkXwHkVgY/s320/yagi.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;">Yagi Antenna</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><b>Contoh cara pemasangan antenna mengikut keperluan.</b></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9CY5XiuRFUD_gQiBN8QFmWpR_qwD7t-EeaAxjT0b0ltJRPsp9ByWtx_YjKQnDSMXSeWHWVuJpg87-tEvRGnXl-NvO79vsHOY-Ml86j885_K0mlIk98j4ufdkIargaybYIHK8-h4_0u3k/s800/fix+antenna.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="600" data-original-width="800" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9CY5XiuRFUD_gQiBN8QFmWpR_qwD7t-EeaAxjT0b0ltJRPsp9ByWtx_YjKQnDSMXSeWHWVuJpg87-tEvRGnXl-NvO79vsHOY-Ml86j885_K0mlIk98j4ufdkIargaybYIHK8-h4_0u3k/s320/fix+antenna.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjycox3On-hGZJhfpWE17QkOCLRED4ZrV41DXlqxTnEwUs_apHccSJ5fnRwul4kaNPDr8NllaNA-GQ5VJuyIEPCPZ5PW55nmQqzCrI5qBt3jgAbEEgjG0x6J7NOPWDYjPP-qSHEy-X3sAU/s1244/mag+mount.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="700" data-original-width="1244" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjycox3On-hGZJhfpWE17QkOCLRED4ZrV41DXlqxTnEwUs_apHccSJ5fnRwul4kaNPDr8NllaNA-GQ5VJuyIEPCPZ5PW55nmQqzCrI5qBt3jgAbEEgjG0x6J7NOPWDYjPP-qSHEy-X3sAU/s320/mag+mount.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMnHIcAFCDH9QecsE_ci3QFPN8ZV7NOiBT52SveMMY-H-6NIEsZf966F6GzoGp9NTXynfrQL9lae7cbBH7g6BAWIWrsRKRodKbafRkZwn2Jefbk8DtNnD2zAs6CSBQGTBdW4OZUzpmGD0/s400/stationary.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="400" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMnHIcAFCDH9QecsE_ci3QFPN8ZV7NOiBT52SveMMY-H-6NIEsZf966F6GzoGp9NTXynfrQL9lae7cbBH7g6BAWIWrsRKRodKbafRkZwn2Jefbk8DtNnD2zAs6CSBQGTBdW4OZUzpmGD0/s320/stationary.jpg" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div><br /></div><div><br /></div><div><b>Penyambungan</b></div></div><div><b><br /></b></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHqME2ddsEWDkLPzk5cRNtdvvYCFmhUMP9jwGyNpUt5m0qRLK5j6r-BeWFpwknnCL7rjAl5CtxtzyCH3IY9tincu6i52AKKeMkMHjVkEbgWBXhBeSTjGRvm8CNqOIxd8Iy_Ph0EWNHdLA/s2048/Untitled+Sketch+5_bb.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1084" data-original-width="2048" height="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHqME2ddsEWDkLPzk5cRNtdvvYCFmhUMP9jwGyNpUt5m0qRLK5j6r-BeWFpwknnCL7rjAl5CtxtzyCH3IY9tincu6i52AKKeMkMHjVkEbgWBXhBeSTjGRvm8CNqOIxd8Iy_Ph0EWNHdLA/w640-h338/Untitled+Sketch+5_bb.png" width="640" /></a></div><div><br /></div><div><br /></div><br /><div><p class="MsoNormal"><b>Coding</b><o:p></o:p></p>
<p class="MsoNormal"><b>Transmitter</b><o:p></o:p></p>
<div style="text-align: left;"><o:p> <br /></o:p>/*<br />Simple transmitter, just sends 12-byte packet continously<br />nRF24L01 library: https://github.com/gcopeland/RF24<br /><o:p> <br /></o:p>nRF24L01 connections<br /> 1 - GND<br /> 2 - VCC 3.3V !!!
Ideally 3.0v, definitely not 5V<br /> 3 - CE to Arduino pin
9<br /> 4 - CSN to Arduino
pin 10<br /> 5 - SCK to Arduino
pin 13<br /> 6 - MOSI to Arduino
pin 11<br /> 7 - MISO to Arduino
pin 12<br /> 8 - UNUSED<br /> <br />*/<br />#include <SPI.h><br />#include <nRF24L01.h><br />#include <RF24.h><br /><o:p> <br /></o:p>const uint64_t pipeOut =
0xE8E8F0F0E1LL;<br /><o:p> <br /></o:p>// The sizeof this struct should not exceed 32 bytes<br />struct PacketData {<br /> unsigned long hours;<br /> unsigned long
minutes;<br /> unsigned long
seconds;<br />};<br /><o:p> <br /></o:p>PacketData data;<br /><o:p> <br /></o:p>RF24 radio(9, 10);<br /><o:p> <br /></o:p>void setup() {<br /> radio.begin();<br />
radio.setAutoAck(false);<br />
radio.setDataRate(RF24_250KBPS);<br />
radio.openWritingPipe(pipeOut);<br /><o:p> <br /></o:p> data.hours = 0;<br /> data.minutes = 0;<br /> data.seconds =
0; <br />}<br /><o:p> <br /></o:p>unsigned long lastTick = 0;<br /><o:p> <br /></o:p>void loop() {<br /> unsigned long now =
millis();<br /> if ( now - lastTick
>= 1000 ) {<br /> data.seconds++;<br /> if ( data.seconds
>= 60 ) {<br /> data.seconds =
0;<br /> data.minutes++;<br /> }<br /> if ( data.minutes
>= 60 ) {<br /> data.minutes =
0;<br /> data.hours++;<br /> }<br /> lastTick = now;<br /> }<br /> <br />
radio.write(&data, sizeof(PacketData)); <br />}<br /><b><o:p><br /><br /><br /></o:p>Receiver</b><br /><o:p> <br /></o:p>/*<br />Simple receiver to display how many packets per second are
being received<br />nRF24L01 library: https://github.com/gcopeland/RF24<br />I2C OLED screen library: https://github.com/olikraus/u8glib<br /><o:p> <br /></o:p>nRF24L01 connections<br /> 1 - GND<br /> 2 - VCC 3.3V !!! Ideally
3.0v, definitely not 5V<br /> 3 - CE to Arduino pin
9<br /> 4 - CSN to Arduino
pin 10<br /> 5 - SCK to Arduino
pin 13<br /> 6 - MOSI to Arduino
pin 11<br /> 7 - MISO to Arduino
pin 12<br /> 8 - UNUSED<br /> <br />OLED connections<br /> GND - GND<br /> VCC - VCC<br /> SDA - Arduino pin A4<br /> SCL - Arduino pin A5<br /> <br />*/<br /><o:p> <br /></o:p>#include <SPI.h><br />#include "U8glib.h"<br />#include <nRF24L01.h><br />#include <RF24.h><br /><o:p> <br /></o:p>U8GLIB_SSD1306_128X64
u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI<br /><o:p> <br /></o:p>const uint64_t pipeIn =
0xE8E8F0F0E1LL;<br /><o:p> <br /></o:p>RF24 radio(9, 10);<br /><o:p> <br /></o:p>// The sizeof this struct should not exceed 32 bytes<br />struct PacketData {<br /> unsigned long hours;<br /> unsigned long
minutes;<br /> unsigned long
seconds;<br />};<br /><o:p> <br /></o:p>PacketData data;<br /><o:p> <br /></o:p>/**************************************************/<br /><o:p> <br /></o:p>int packetCounts[10];<br />int packetCountIndex = 0;<br />int packetCountTotal = 0;<br /><o:p> <br /></o:p>#define AVG_SECONDS 10<br /><o:p> <br /></o:p>int avgs[AVG_SECONDS];<br />int avgIndex = 0;<br />unsigned long avgTotal = 0;<br /><o:p> <br /></o:p>void setup()<br />{<br />
Serial.begin(115200);<br /> // Set up radio
module<br /> radio.begin();<br />
radio.setDataRate(RF24_250KBPS);<br />
radio.setAutoAck(false);<br />
radio.openReadingPipe(1,pipeIn);<br /> radio.startListening();<br /><o:p> <br /></o:p>
u8g.setColorIndex(1);<br />
u8g.setFont(u8g_font_fur11);<br /><o:p> <br /></o:p> memset(&data, 0,
sizeof(PacketData)); <br /> memset(
packetCounts, 0, sizeof(packetCounts) );<br /> memset( avgs, 0,
sizeof(avgs) );<br />}<br /><o:p> <br /></o:p>unsigned long packetsRead = 0;<br />unsigned long lastScreenUpdate = 0;<br />unsigned long lastAvgUpdate = 0;<br />unsigned long lastRecvTime = 0;<br />unsigned long drops = 0;<br /><o:p> <br /></o:p>/**************************************************/<br /><o:p> <br /></o:p>void recvData()<br />{ <br /> while (
radio.available() ) { <br />
radio.read(&data, sizeof(PacketData));<br /> packetsRead++;<br /> lastRecvTime =
millis();<br /> }<br />}<br /><o:p> <br /></o:p>/**************************************************/<br /><o:p> <br /></o:p>char ppsBuf[16];<br />char avgBuf[16];<br />char hmsBuf[16];<br /><o:p> <br /></o:p>void draw() {<br /> u8g.drawStr( 2, 24,
ppsBuf);<br /> u8g.drawStr( 2, 40,
avgBuf);<br /> u8g.drawStr( 2, 56,
hmsBuf);<br />}<br /><o:p> <br /></o:p>void updateScreen()<br />{ <br /> unsigned long now =
millis();<br /> if ( now -
lastScreenUpdate < 100 )<br /> return;<br /> <br /> // moving average
over 1 second<br /> packetCountTotal -=
packetCounts[packetCountIndex];<br />
packetCounts[packetCountIndex] = packetsRead;<br /> packetCountTotal +=
packetsRead;<br /><o:p> <br /></o:p> packetCountIndex =
(packetCountIndex + 1) % 10;<br /> packetsRead = 0;<br /> <br /> sprintf(ppsBuf,
"PPS: %d", packetCountTotal);<br /> sprintf(avgBuf,
"AVG: %ld", avgTotal / AVG_SECONDS);<br /> sprintf(hmsBuf,
"%02ld:%02ld:%02ld", data.hours, data.minutes, data.seconds);<br /><o:p> <br /></o:p> u8g.firstPage();<br /> do {<br /> draw();<br /> }<br /> while(
u8g.nextPage() );<br /> <br /> lastScreenUpdate =
millis();<br /><o:p> <br /></o:p> if ( now - lastAvgUpdate
>= 1000 ) { <br /> // moving average
of 1 second moving average<br /> avgTotal -=
avgs[avgIndex];<br /> avgs[avgIndex] =
packetCountTotal;<br /> avgTotal +=
packetCountTotal;<br /> <br /> avgIndex =
(avgIndex + 1) % AVG_SECONDS;<br /> lastAvgUpdate =
millis();<br /> }<br />}<br /><o:p> <br /></o:p>/**************************************************/<br /><o:p> <br /></o:p>void loop()<br />{<br /> recvData();<br /> updateScreen();<br />}<br /><o:p> <br /></o:p><o:p> </o:p></div>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan
bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman
blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat
tersebut. Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman
blog ini adalah diatas risiko sendiri Sebarang kemuskilan atau pertanyaan boleh
hubungi saya. <o:p></o:p></p>
<p class="MsoNormal">WHATAPPS <a href="http://www.wassap.my/60123678264">MAFeS</a><o:p></o:p></p></div><div><br /></div><div><br /></div><div><br /></div><div></div></div><div></div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-6834636660502805562020-11-29T16:30:00.001+08:002020-11-29T16:33:18.877+08:00ESP-Now menggunakan WEMOS D1 mini ProSalam sejahtera kepada semua pembaca. <div><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/d6LgAZKfNtQ" width="320" youtube-src-id="d6LgAZKfNtQ"></iframe></div><br /><div><br /><div><br /></div><div><b>Pengenalan. </b></div><div>ESP-NOW adalah sejenis protokol komunikasi Wi-Fi tanpa sambungan yang ditentukan oleh Espressif. Dalam ESP-NOW, data aplikasi dipaketkan dalam satu kerangka dan kemudian dihantar dari satu peranti Wi-Fi ke yang lain tanpa sebarang sambungan Wi-Fi router. CTR with CBC-MAC Protocol (CCMP) digunakan untuk melindungi kerangka tindakan untuk keselamatan. ESP-NOW digunakan secara meluas dalam cahaya pintar, alat kawalan jauh, sensor dan pelbagai lagi.</div><div><br /></div><div><b>Komponen yang digunakan.</b></div><div>1. WEMOS D1 mini Pro</div><div>2. Push button</div><div>3. LED</div><div>4. Jumper wire</div><div><br /></div><div><br /></div><div><b>Penyambungan. </b></div><div>Amaran: Kebanyakan ESP module hanya menggunakan 3.3V logic level. Sila pastikan penyambungan anda sebelum memasukan bekalan kuasa untuk mengelakkan kerosakan modul.</div><div><br /></div><div>Master.</div><div>1. Push button 1 - D1</div><div>2. Push button 2 - D2</div><div>3. LED 1 - D0</div><div><br /></div><div>Slave.</div><div>1. LED 1 - D1</div><div>2. LED 2 - D2</div><div><br /></div><div><b>Coding. </b></div><div><a href="<script src="https://gist.github.com/protongt/61970b1513644237504d58910c8e141c.js"></script>">CODING</a><br /></div><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/W-vmnbTvEdc" width="320" youtube-src-id="W-vmnbTvEdc"></iframe></div><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/Q7PverkarUw" width="320" youtube-src-id="Q7PverkarUw"></iframe></div><br /><div><br /></div><div><br /></div><br /><div><br /></div><div><br /></div><div><b>PENAFIAN : EAWAN, 9W2NFE</b> sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri
Sebarang kemuskilan atau pertanyaan boleh hubungi saya. </div><div>WHATAPSS <a href="wa.me/60123678264">MAFeS</a></div></div>Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-3360839344965228082020-08-30T16:14:00.004+08:002021-09-08T16:32:56.109+08:00Konsep Sink dan Source.<div><div><br /></div><div><span> </span>Semasa memilih jenis modul input atau output untuk sistem PLC anda, sangat penting untuk mempunyai pemahaman yang kuat mengenai konsep sink dan source. Penggunaan istilah ini sering berlaku dalam perbincangan mengenai litar input atau output. Tujuan posting ini adalah untuk menjadikan konsep-konsep ini mudah difahami, jadi anda dapat membuat pilihan yang tepat pada kali pertama ketika memilih jenis isyarat I / O untuk penggunaan anda. Catatan ini memberikan definisi pendek, diikuti oleh litar contoh umum.</div><div><br /></div><div><span> </span>Anda akan melihat bahawa gambar rajah di halaman ini dikaitkan dengan litar DC sahaja dan bukan AC, kerana merujuk kepada polariti (+) dan (-). Oleh itu, istilah sinking dan soucing hanya berlaku untuk rangkaian input dan output DC. Isyarat input dan output sinking atau sourcing boleh mengalirkan arus dalam satu arah sahaja. Ini bermaksud mungkin untuk menyambungkan bekalan luaran dan peranti medan ke titik I / O, dengan arus cuba mengalir ke arah yang salah, dan litar tidak akan beroperasi. Walau bagaimanapun, alat bekalan dan medan dapat disambungkan setiap kali berdasarkan pemahaman mengenai sumber dan tenggelam.</div><div><br /></div><div><span> </span>Gambarajah di bawah menunjukkan input sinking dan sourcing serta output sinking serta sourcing. Untuk menyambungkan bekalan luaran dengan betul, ia mesti disambungkan sehingga input bersambung penuh dengan bekalan common (-). Jadi, mulakan di terminal input PLC, ikuti litar isyarat input, keluar di terminal common, dan sambungkan bekalan (-) ke terminal common. Dengan menambahkan suis antara bekalan (+) dan input, litar bersambung penuh. Arus akan mengalir ke arah anak panah apabila suis ditutup.</div></div><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmuP2k5p12AOaYLuYeiIg5em0W4ULb41qt_HJC52euTJ8XIeOqX7-LVuiq7DURLQnrAjbbWorxdzcn9GTGtjJh5TzV8-JilCcv2Fb-3_3nbb7lHFRIQX7s0fzZjMoxcRNLcdgoND9SDCY/s600/Table-1-600x363.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="363" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmuP2k5p12AOaYLuYeiIg5em0W4ULb41qt_HJC52euTJ8XIeOqX7-LVuiq7DURLQnrAjbbWorxdzcn9GTGtjJh5TzV8-JilCcv2Fb-3_3nbb7lHFRIQX7s0fzZjMoxcRNLcdgoND9SDCY/s0/Table-1-600x363.jpg" /></a></div><br /><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6992zJ9DS1OjxIKZ8Lxhi8NHaorQimpwLq8vzjTYm8KCfM-5MuMrEufy4FDWvzQoswfvmxDjBBELrowCxb_YCxOgeMP62ewdbCozis57lKTuf1jxk31IEwsr-l3fKM1eOT8NtcrTVOW8/s636/NPN.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="483" data-original-width="636" height="486" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6992zJ9DS1OjxIKZ8Lxhi8NHaorQimpwLq8vzjTYm8KCfM-5MuMrEufy4FDWvzQoswfvmxDjBBELrowCxb_YCxOgeMP62ewdbCozis57lKTuf1jxk31IEwsr-l3fKM1eOT8NtcrTVOW8/w640-h486/NPN.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioNCdd5LQLX4bGGgDR76heXHlHMNaR9Ok-fdUI2mR9YOL3elIF01QAi9dXQAHYYc61qdxyGFTWkPm8yLg-oqaK_UioIWdLSE2hghfzVV5N1BmyQauffMzGzBWzO6W6kj90lwqQW8gu174/s615/PNP.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="478" data-original-width="615" height="498" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioNCdd5LQLX4bGGgDR76heXHlHMNaR9Ok-fdUI2mR9YOL3elIF01QAi9dXQAHYYc61qdxyGFTWkPm8yLg-oqaK_UioIWdLSE2hghfzVV5N1BmyQauffMzGzBWzO6W6kj90lwqQW8gu174/w640-h498/PNP.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div><br /></div><div><br /></div><div><br /></div>
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.
Whatsapp MAFeS One Stop CenterEawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-13149268902039248812020-06-03T23:36:00.003+08:002020-06-03T23:38:59.785+08:00Jam RTC Dot Matrix<div style="background-color: white; border: 0px; color: #373737; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 15px; margin-bottom: 1.625em; outline: 0px; padding: 0px; vertical-align: baseline;">
<br /></div>
Komponen yang diperlukan:<br />
<br />
<ol>
<li>Arduino. (saya guna arduino pro mini)</li>
<li>Module RTC DS1307</li>
<li>Button</li>
<li>Dot Matrix I2C</li>
</ol>
<br />
<br />
Penyambungan untuk modul DS1307:<br />
<br />
<ol>
<li>SDA ke Arduino analog pin 4</li>
<li>SCL ke Arduino analog pin 5</li>
<li>5v ke Arduino pin 5v</li>
<li>GND ke Arduino pin GND</li>
<li>Penyambungan butang kawalan</li>
</ol>
<br />
<br />
<br />
<ol>
<li>Button 1 ke Arduino digital pin 2 dan GND</li>
<li>Button 2 ke Arduino digital pin 3 dan GND</li>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilftdmQIKsp2wlaJmFUMHZWERr9Cjb4hZIt2vzYmdpoEU6o5dF_C9fgrdXXuy-U_ZC8QkHJxak7lk-8pHivgAfR41RpruFwvedAymTzgilFalUA6yrek5xYHkSpQlQ7-KDCWDeuQYGLmo/s1600/84614827_10216861622439173_5845282629649170432_o.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1600" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilftdmQIKsp2wlaJmFUMHZWERr9Cjb4hZIt2vzYmdpoEU6o5dF_C9fgrdXXuy-U_ZC8QkHJxak7lk-8pHivgAfR41RpruFwvedAymTzgilFalUA6yrek5xYHkSpQlQ7-KDCWDeuQYGLmo/s640/84614827_10216861622439173_5845282629649170432_o.jpg" width="640" /></a></div>
<br />
<br />
CODING:<br />
<br />
<button onclick="if(document.getElementById('spoiler') .style.display=='none') {document.getElementById('spoiler') .style.display=''}else{document.getElementById('spoiler') .style.display='none'}" title="Click to Show/Hide Content" type="button">Show/Hide</button>
<br />
<div id="spoiler" style="display: none;">
//include libraries:<br />
#include "LedControl.h"<br />
#include <FontLEDClock.h> // Font library<br />
#include <Wire.h> // DS1307 clock<br />
#include "RTClib.h" // DS1307 clock<br />
#include <Button.h> // Button library by Alexander Brevig<br />
<br />
<br />
// Setup LED Matrix<br />
<br />
// pin 12 is connected to the DataIn on the display<br />
// pin 11 is connected to the CLK on the display<br />
// pin 10 is connected to LOAD on the display<br />
LedControl lc = LedControl(12, 11, 10, 4); //sets the 3 pins as 12, 11 & 10 and then sets 4 displays (max is 8 displays)<br />
<br />
//global variables<br />
byte intensity = 1; // Default intensity/brightness (0-15)<br />
byte clock_mode = 0; // Default clock mode. Default = 0 (basic_mode)<br />
bool random_mode = 0; // Define random mode - changes the display type every few hours. Default = 0 (off)<br />
byte old_mode = clock_mode; // Stores the previous clock mode, so if we go to date or whatever, we know what mode to go back to after.<br />
bool ampm = 0; // Define 12 or 24 hour time. 0 = 24 hour. 1 = 12 hour<br />
byte change_mode_time = 0; // Holds hour when clock mode will next change if in random mode.<br />
unsigned long delaytime = 500; // We always wait a bit between updates of the display<br />
int rtc[7]; // Holds real time clock output<br />
<br />
<br />
<br />
char days[7][4] = {<br />
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"<br />
}; //day array - used in slide, basic_mode and jumble modes (The DS1307 outputs 1-7 values for day of week)<br />
char daysfull[7][9] = {<br />
"Sunday", "Monday", "Tuesday", "Wed", "Thursday", "Friday", "Saturday"<br />
};<br />
char suffix[4][3] = {<br />
"st", "nd", "rd", "th"<br />
}; //date suffix array, used in slide, basic_mode and jumble modes. e,g, 1st 2nd ...<br />
<br />
//define constants<br />
#define NUM_DISPLAY_MODES 3 // Number display modes (conting zero as the first mode)<br />
#define NUM_SETTINGS_MODES 4 // Number settings modes = 6 (conting zero as the first mode)<br />
#define SLIDE_DELAY 20 // The time in milliseconds for the slide effect per character in slide mode. Make this higher for a slower effect<br />
#define cls clear_display // Clear display<br />
<br />
RTC_DS1307 ds1307; // Create RTC object<br />
<br />
Button buttonA = Button(2, BUTTON_PULLUP); // Setup button A (using button library)<br />
Button buttonB = Button(3, BUTTON_PULLUP); // Setup button B (using button library)<br />
<br />
void setup() {<br />
<br />
digitalWrite(2, HIGH); // turn on pullup resistor for button on pin 2<br />
digitalWrite(3, HIGH); // turn on pullup resistor for button on pin 3<br />
digitalWrite(4, HIGH); // turn on pullup resistor for button on pin 4<br />
<br />
Serial.begin(9600); //start serial<br />
<br />
//initialize the 4 matrix panels<br />
//we have already set the number of devices when we created the LedControl<br />
int devices = lc.getDeviceCount();<br />
//we have to init all devices in a loop<br />
for (int address = 0; address < devices; address++) {<br />
/*The MAX72XX is in power-saving mode on startup*/<br />
lc.shutdown(address, false);<br />
/* Set the brightness to a medium values */<br />
lc.setIntensity(address, intensity);<br />
/* and clear the display */<br />
lc.clearDisplay(address);<br />
}<br />
<br />
//Setup DS1307 RTC<br />
#ifdef AVR<br />
Wire.begin();<br />
#else<br />
Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino<br />
#endif<br />
ds1307.begin(); //start RTC Clock<br />
<br />
if (! ds1307.isrunning()) {<br />
Serial.println("RTC is NOT running!");<br />
ds1307.adjust(DateTime(__DATE__, __TIME__)); // sets the RTC to the date & time this sketch was compiled<br />
}<br />
//Show software version & hello message<br />
printver();<br />
<br />
//enable red led<br />
digitalWrite(13, HIGH);<br />
}<br />
<br />
void loop() {<br />
<br />
//run the clock with whatever mode is set by clock_mode - the default is set at top of code.<br />
switch (clock_mode){<br />
<br />
case 0:<br />
basic_mode();<br />
break;<br />
case 1:<br />
small_mode();<br />
break;<br />
case 2:<br />
slide();<br />
break;<br />
case 3:<br />
word_clock();<br />
break;<br />
case 4:<br />
setup_menu();<br />
break;<br />
}<br />
}<br />
<br />
<br />
//plot a point on the display<br />
void plot (byte x, byte y, byte val) {<br />
<br />
//select which matrix depending on the x coord<br />
byte address;<br />
if (x >= 0 && x <= 7) {<br />
address = 0;<br />
}<br />
if (x >= 8 && x <= 15) {<br />
address = 1;<br />
x = x - 8;<br />
}<br />
if (x >= 16 && x <= 23) {<br />
address = 2;<br />
x = x - 16;<br />
}<br />
if (x >= 24 && x <= 31) {<br />
address = 3;<br />
x = x - 24;<br />
}<br />
<br />
if (val == 1) {<br />
lc.setLed(address, y, x, true);<br />
} else {<br />
lc.setLed(address, y, x, false);<br />
}<br />
}<br />
<br />
<br />
//clear screen<br />
void clear_display() {<br />
for (byte address = 0; address < 4; address++) {<br />
lc.clearDisplay(address);<br />
}<br />
}<br />
<br />
//fade screen down<br />
void fade_down() {<br />
<br />
//fade from global intensity to 1<br />
for (byte i = intensity; i > 0; i--) {<br />
for (byte address = 0; address < 4; address++) {<br />
lc.setIntensity(address, i);<br />
}<br />
delay(30); //change this to change fade down speed<br />
}<br />
<br />
clear_display(); //clear display completely (off)<br />
<br />
//reset intentsity to global val<br />
for (byte address = 0; address < 4; address++) {<br />
lc.setIntensity(address, intensity);<br />
}<br />
}<br />
<br />
<br />
<br />
//power up led test & display software version number<br />
void printver() {<br />
<br />
byte i = 0;<br />
char ver_a[9] = " 9W2NFE ";<br />
char ver_b[9] = " Hello! ";<br />
<br />
//test all leds.<br />
for (byte x = 0; x <= 31; x++) {<br />
for (byte y = 0; y <= 7; y++) {<br />
plot(x, y, 1);<br />
}<br />
}<br />
delay(500);<br />
fade_down();<br />
<br />
while (ver_a[i]) {<br />
puttinychar((i * 4), 1, ver_a[i]);<br />
delay(35);<br />
i++;<br />
}<br />
delay(700);<br />
fade_down();<br />
i = 0;<br />
while (ver_b[i]) {<br />
puttinychar((i * 4), 1, ver_b[i]);<br />
delay(35);<br />
i++;<br />
}<br />
delay(700);<br />
fade_down();<br />
}<br />
<div>
<br /></div>
<div>
<div>
void puttinychar(byte x, byte y, char c)</div>
<div>
{</div>
<div>
byte dots;</div>
<div>
if (c >= 'A' && c <= 'Z' || (c >= 'a' && c <= 'z') ) {</div>
<div>
c &= 0x1F; // A-Z maps to 1-26</div>
<div>
}</div>
<div>
else if (c >= '0' && c <= '9') {</div>
<div>
c = (c - '0') + 32;</div>
<div>
}</div>
<div>
else if (c == ' ') {</div>
<div>
c = 0; // space</div>
<div>
}</div>
<div>
else if (c == '.') {</div>
<div>
c = 27; // full stop</div>
<div>
}</div>
<div>
else if (c == ':') {</div>
<div>
c = 28; // colon</div>
<div>
}</div>
<div>
else if (c == '\'') {</div>
<div>
c = 29; // single quote mark</div>
<div>
}</div>
<div>
else if (c == '!') {</div>
<div>
c = 30; // single quote mark</div>
<div>
}</div>
<div>
else if (c == '?') {</div>
<div>
c = 31; // single quote mark</div>
<div>
}</div>
<div>
<br /></div>
<div>
for (byte col = 0; col < 3; col++) {</div>
<div>
dots = pgm_read_byte_near(&mytinyfont[c][col]);</div>
<div>
for (char row = 0; row < 5; row++) {</div>
<div>
if (dots & (16 >> row))</div>
<div>
plot(x + col, y + row, 1);</div>
<div>
else</div>
<div>
plot(x + col, y + row, 0);</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
void putnormalchar(byte x, byte y, char c)</div>
<div>
{</div>
<div>
<br /></div>
<div>
byte dots;</div>
<div>
// if (c >= 'A' && c <= 'Z' || (c >= 'a' && c <= 'z') ) {</div>
<div>
// c &= 0x1F; // A-Z maps to 1-26</div>
<div>
// }</div>
<div>
if (c >= 'A' && c <= 'Z' ) {</div>
<div>
c &= 0x1F; // A-Z maps to 1-26</div>
<div>
}</div>
<div>
else if (c >= 'a' && c <= 'z') {</div>
<div>
c = (c - 'a') + 41; // A-Z maps to 41-67</div>
<div>
}</div>
<div>
else if (c >= '0' && c <= '9') {</div>
<div>
c = (c - '0') + 31;</div>
<div>
}</div>
<div>
else if (c == ' ') {</div>
<div>
c = 0; // space</div>
<div>
}</div>
<div>
else if (c == '.') {</div>
<div>
c = 27; // full stop</div>
<div>
}</div>
<div>
else if (c == '\'') {</div>
<div>
c = 28; // single quote mark</div>
<div>
}</div>
<div>
else if (c == ':') {</div>
<div>
c = 29; // clock_mode selector arrow</div>
<div>
}</div>
<div>
else if (c == '>') {</div>
<div>
c = 30; // clock_mode selector arrow</div>
<div>
}</div>
<div>
else if (c >= -80 && c <= -67) {</div>
<div>
c *= -1;</div>
<div>
}</div>
<div>
<br /></div>
<div>
for (char col = 0; col < 5; col++) {</div>
<div>
dots = pgm_read_byte_near(&myfont[c][col]);</div>
<div>
for (char row = 0; row < 7; row++) {</div>
<div>
//check coords are on screen before trying to plot</div>
<div>
//if ((x >= 0) && (x <= 31) && (y >= 0) && (y <= 7)){</div>
<div>
<br /></div>
<div>
if (dots & (64 >> row)) { // only 7 rows.</div>
<div>
plot(x + col, y + row, 1);</div>
<div>
} else {</div>
<div>
plot(x + col, y + row, 0);</div>
<div>
}</div>
<div>
//}</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
//small_mode</div>
<div>
//show the time in small 3x5 characters with seconds display</div>
<div>
<br /></div>
<div>
void small_mode() {</div>
<div>
<br /></div>
<div>
char textchar[8]; // the 16 characters on the display</div>
<div>
byte mins = 100; //mins</div>
<div>
byte secs = rtc[0]; //seconds</div>
<div>
byte old_secs = secs; //holds old seconds value - from last time seconds were updated o display - used to check if seconds have changed</div>
<div>
</div>
<div>
cls();</div>
<div>
<br /></div>
<div>
//run clock main loop as long as run_mode returns true</div>
<div>
while (run_mode()) {</div>
<div>
<br /></div>
<div>
get_time();</div>
<div>
</div>
<div>
//check for button press</div>
<div>
if (buttonA.uniquePress()) {</div>
<div>
switch_mode();</div>
<div>
return;</div>
<div>
}</div>
<div>
if (buttonB.uniquePress()) {</div>
<div>
display_date();</div>
<div>
return;</div>
<div>
}</div>
<div>
</div>
<div>
//if secs changed then update them on the display</div>
<div>
secs = rtc[0];</div>
<div>
if (secs != old_secs) {</div>
<div>
<br /></div>
<div>
//secs</div>
<div>
char buffer[3];</div>
<div>
itoa(secs, buffer, 10);</div>
<div>
<br /></div>
<div>
//fix - as otherwise if num has leading zero, e.g. "03" secs, itoa coverts this to chars with space "3 ".</div>
<div>
if (secs < 10) {</div>
<div>
buffer[1] = buffer[0];</div>
<div>
buffer[0] = '0';</div>
<div>
}</div>
<div>
<br /></div>
<div>
puttinychar( 20, 1, ':'); //seconds colon</div>
<div>
puttinychar( 24, 1, buffer[0]); //seconds</div>
<div>
puttinychar( 28, 1, buffer[1]); //seconds</div>
<div>
old_secs = secs;</div>
<div>
}</div>
<div>
<br /></div>
<div>
//if minute changes change time</div>
<div>
if (mins != rtc[1]) {</div>
<div>
<br /></div>
<div>
//reset these for comparison next time</div>
<div>
mins = rtc[1];</div>
<div>
byte hours = rtc[2];</div>
<div>
if (hours > 12) {</div>
<div>
hours = hours - ampm * 12;</div>
<div>
}</div>
<div>
if (hours < 1) {</div>
<div>
hours = hours + ampm * 12;</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
//byte dow = rtc[3]; // the DS1307 outputs 0 - 6 where 0 = Sunday0 - 6 where 0 = Sunday.</div>
<div>
//byte date = rtc[4];</div>
<div>
<br /></div>
<div>
//set characters</div>
<div>
char buffer[3];</div>
<div>
itoa(hours, buffer, 10);</div>
<div>
<br /></div>
<div>
//fix - as otherwise if num has leading zero, e.g. "03" hours, itoa coverts this to chars with space "3 ".</div>
<div>
if (hours < 10) {</div>
<div>
buffer[1] = buffer[0];</div>
<div>
//if we are in 12 hour mode blank the leading zero.</div>
<div>
if (ampm) {</div>
<div>
buffer[0] = ' ';</div>
<div>
}</div>
<div>
else {</div>
<div>
buffer[0] = '0';</div>
<div>
}</div>
<div>
}</div>
<div>
//set hours chars</div>
<div>
textchar[0] = buffer[0];</div>
<div>
textchar[1] = buffer[1];</div>
<div>
textchar[2] = ':';</div>
<div>
<br /></div>
<div>
itoa (mins, buffer, 10);</div>
<div>
if (mins < 10) {</div>
<div>
buffer[1] = buffer[0];</div>
<div>
buffer[0] = '0';</div>
<div>
}</div>
<div>
//set mins characters</div>
<div>
textchar[3] = buffer[0];</div>
<div>
textchar[4] = buffer[1];</div>
<div>
<br /></div>
<div>
//do seconds</div>
<div>
textchar[5] = ':';</div>
<div>
buffer[3];</div>
<div>
secs = rtc[0];</div>
<div>
itoa(secs, buffer, 10);</div>
<div>
<br /></div>
<div>
//fix - as otherwise if num has leading zero, e.g. "03" secs, itoa coverts this to chars with space "3 ".</div>
<div>
if (secs < 10) {</div>
<div>
buffer[1] = buffer[0];</div>
<div>
buffer[0] = '0';</div>
<div>
}</div>
<div>
//set seconds</div>
<div>
textchar[6] = buffer[0];</div>
<div>
textchar[7] = buffer[1];</div>
<div>
<br /></div>
<div>
byte x = 0;</div>
<div>
byte y = 0;</div>
<div>
<br /></div>
<div>
//print each char</div>
<div>
for (byte x = 0; x < 6 ; x++) {</div>
<div>
puttinychar( x * 4, 1, textchar[x]);</div>
<div>
}</div>
<div>
}</div>
<div>
delay(50);</div>
<div>
}</div>
<div>
fade_down();</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
// basic_mode()</div>
<div>
// show the time in 5x7 characters</div>
<div>
void basic_mode()</div>
<div>
{</div>
<div>
cls();</div>
<div>
<br /></div>
<div>
char buffer[3]; //for int to char conversion to turn rtc values into chars we can print on screen</div>
<div>
byte offset = 0; //used to offset the x postition of the digits and centre the display when we are in 12 hour mode and the clock shows only 3 digits. e.g. 3:21</div>
<div>
byte x, y; //used to draw a clear box over the left hand "1" of the display when we roll from 12:59 -> 1:00am in 12 hour mode.</div>
<div>
<br /></div>
<div>
//do 12/24 hour conversion if ampm set to 1</div>
<div>
byte hours = rtc[2];</div>
<div>
<br /></div>
<div>
if (hours > 12) {</div>
<div>
hours = hours - ampm * 12;</div>
<div>
}</div>
<div>
if (hours < 1) {</div>
<div>
hours = hours + ampm * 12;</div>
<div>
}</div>
<div>
<br /></div>
<div>
//do offset conversion</div>
<div>
if (ampm && hours < 10) {</div>
<div>
offset = 2;</div>
<div>
}</div>
<div>
</div>
<div>
//set the next minute we show the date at</div>
<div>
//set_next_date();</div>
<div>
</div>
<div>
// initially set mins to value 100 - so it wll never equal rtc[1] on the first loop of the clock, meaning we draw the clock display when we enter the function</div>
<div>
byte secs = 100;</div>
<div>
byte mins = 100;</div>
<div>
int count = 0;</div>
<div>
</div>
<div>
//run clock main loop as long as run_mode returns true</div>
<div>
while (run_mode()) {</div>
<div>
<br /></div>
<div>
//get the time from the clock chip</div>
<div>
get_time();</div>
<div>
</div>
<div>
//check for button press</div>
<div>
if (buttonA.uniquePress()) {</div>
<div>
switch_mode();</div>
<div>
return;</div>
<div>
}</div>
<div>
if (buttonB.uniquePress()) {</div>
<div>
display_date();</div>
<div>
return;</div>
<div>
}</div>
<div>
<br /></div>
<div>
//check whether it's time to automatically display the date</div>
<div>
//check_show_date();</div>
<div>
<br /></div>
<div>
//draw the flashing : as on if the secs have changed.</div>
<div>
if (secs != rtc[0]) {</div>
<div>
<br /></div>
<div>
//update secs with new value</div>
<div>
secs = rtc[0];</div>
<div>
<br /></div>
<div>
//draw :</div>
<div>
plot (15 - offset, 2, 1); //top point</div>
<div>
plot (15 - offset, 5, 1); //bottom point</div>
<div>
count = 400;</div>
<div>
}</div>
<div>
<br /></div>
<div>
//if count has run out, turn off the :</div>
<div>
if (count == 0) {</div>
<div>
plot (15 - offset, 2, 0); //top point</div>
<div>
plot (15 - offset, 5, 0); //bottom point</div>
<div>
}</div>
<div>
else {</div>
<div>
count--;</div>
<div>
}</div>
<div>
<br /></div>
<div>
//re draw the display if button pressed or if mins != rtc[1] i.e. if the time has changed from what we had stored in mins, (also trigggered on first entering function when mins is 100)</div>
<div>
if (mins != rtc[1]) {</div>
<div>
<br /></div>
<div>
//update mins and hours with the new values</div>
<div>
mins = rtc[1];</div>
<div>
hours = rtc[2];</div>
<div>
<br /></div>
<div>
//adjust hours of ampm set to 12 hour mode</div>
<div>
if (hours > 12) {</div>
<div>
hours = hours - ampm * 12;</div>
<div>
}</div>
<div>
if (hours < 1) {</div>
<div>
hours = hours + ampm * 12;</div>
<div>
}</div>
<div>
<br /></div>
<div>
itoa(hours, buffer, 10);</div>
<div>
<br /></div>
<div>
//if hours < 10 the num e.g. "3" hours, itoa coverts this to chars with space "3 " which we dont want</div>
<div>
if (hours < 10) {</div>
<div>
buffer[1] = buffer[0];</div>
<div>
buffer[0] = '0';</div>
<div>
}</div>
<div>
<br /></div>
<div>
//print hours</div>
<div>
//if we in 12 hour mode and hours < 10, then don't print the leading zero, and set the offset so we centre the display with 3 digits.</div>
<div>
if (ampm && hours < 10) {</div>
<div>
offset = 2;</div>
<div>
<br /></div>
<div>
//if the time is 1:00am clear the entire display as the offset changes at this time and we need to blank out the old 12:59</div>
<div>
if ((hours == 1 && mins == 0) ) {</div>
<div>
cls();</div>
<div>
}</div>
<div>
}</div>
<div>
else {</div>
<div>
//else no offset and print hours tens digit</div>
<div>
offset = 0;</div>
<div>
<br /></div>
<div>
//if the time is 10:00am clear the entire display as the offset changes at this time and we need to blank out the old 9:59</div>
<div>
if (hours == 10 && mins == 0) {</div>
<div>
cls();</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
putnormalchar(1, 0, buffer[0]);</div>
<div>
}</div>
<div>
//print hours ones digit</div>
<div>
putnormalchar(7 - offset, 0, buffer[1]);</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
//print mins</div>
<div>
//add leading zero if mins < 10</div>
<div>
itoa (mins, buffer, 10);</div>
<div>
if (mins < 10) {</div>
<div>
buffer[1] = buffer[0];</div>
<div>
buffer[0] = '0';</div>
<div>
}</div>
<div>
//print mins tens and ones digits</div>
<div>
putnormalchar(19 - offset, 0, buffer[0]);</div>
<div>
putnormalchar(25 - offset, 0, buffer[1]);</div>
<div>
}</div>
<div>
}</div>
<div>
fade_down();</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
void slide() {</div>
<div>
<br /></div>
<div>
byte digits_old[4] = {99, 99, 99, 99}; </div>
<div>
byte digits_new[4]; //new digits time will slide to reveal</div>
<div>
byte digits_x_pos[4] = {25, 19, 7, 1}; //x pos for which to draw each digit at</div>
<div>
<br /></div>
<div>
char old_char[2]; //used when we use itoa to transpose the current digit (type byte) into a char to pass to the animation function</div>
<div>
char new_char[2]; </div>
<div>
<br /></div>
<div>
cls();</div>
<div>
putnormalchar( 13, 0, ':');</div>
<div>
<br /></div>
<div>
byte old_secs = rtc[0]; </div>
<div>
<br /></div>
<div>
while (run_mode()) {</div>
<div>
<br /></div>
<div>
get_time();</div>
<div>
</div>
<div>
//check for button press</div>
<div>
if (buttonA.uniquePress()) {</div>
<div>
switch_mode();</div>
<div>
return;</div>
<div>
}</div>
<div>
if (buttonB.uniquePress()) {</div>
<div>
display_date();</div>
<div>
return;</div>
<div>
}</div>
<div>
<br /></div>
<div>
//if secs have changed then update the display</div>
<div>
if (rtc[0] != old_secs) {</div>
<div>
old_secs = rtc[0];</div>
<div>
<br /></div>
<div>
//do 12/24 hour conversion if ampm set to 1</div>
<div>
byte hours = rtc[2];</div>
<div>
if (hours > 12) {</div>
<div>
hours = hours - ampm * 12;</div>
<div>
}</div>
<div>
if (hours < 1) {</div>
<div>
hours = hours + ampm * 12;</div>
<div>
}</div>
</div>
<br />
for (byte i = 0; i <= 3; i++) {<br />
//see if digit has changed...<br />
if (digits_old[i] != digits_new[i]) {<br />
<br />
//run 9 step animation sequence for each in turn<br />
for (byte seq = 0; seq <= 8 ; seq++) {<br />
<br />
//convert digit to string<br />
itoa(digits_old[i], old_char, 10);<br />
itoa(digits_new[i], new_char, 10);<br />
<br />
//if set to 12 hour mode and we're on digit 2 (hours tens mode) then check to see if this is a zero. If it is, blank it instead so we get 2.00pm not 02.00pm<br />
if (ampm && i == 3) {<br />
if (digits_new[3] == 0) {<br />
new_char[0] = ' ';<br />
}<br />
if (digits_old[3] == 0) {<br />
old_char[0] = ' ';<br />
}<br />
}<br />
//draw the animation frame for each digit<br />
slideanim(digits_x_pos[i], 0, seq, old_char[0], new_char[0]);<br />
delay(SLIDE_DELAY);<br />
}<br />
}<br />
}<br />
<br />
for (byte i = 0; i <= 3; i++) {<br />
digits_old[i] = digits_new[i];<br />
}<br />
}//secs/oldsecs<br />
}//while loop<br />
fade_down();<br />
}<br />
<div>
<br /></div>
<div>
<div>
void slideanim(byte x, byte y, byte sequence, char current_c, char new_c) {</div>
<div>
if (sequence < 7) {</div>
<div>
byte dots;</div>
<div>
if (current_c >= 'A' && current_c <= 'Z' ) {</div>
<div>
current_c &= 0x1F; // A-Z maps to 1-26</div>
<div>
}</div>
<div>
else if (current_c >= 'a' && current_c <= 'z') {</div>
<div>
current_c = (current_c - 'a') + 41; // A-Z maps to 41-67</div>
<div>
}</div>
<div>
else if (current_c >= '0' && current_c <= '9') {</div>
<div>
current_c = (current_c - '0') + 31;</div>
<div>
}</div>
<div>
else if (current_c == ' ') {</div>
<div>
current_c = 0; // space</div>
<div>
}</div>
<div>
else if (current_c == '.') {</div>
<div>
current_c = 27; // full stop</div>
<div>
}</div>
<div>
else if (current_c == '\'') {</div>
<div>
current_c = 28; // single quote mark</div>
<div>
}</div>
<div>
else if (current_c == ':') {</div>
<div>
current_c = 29; //colon</div>
<div>
}</div>
<div>
else if (current_c == '>') {</div>
<div>
current_c = 30; // clock_mode selector arrow</div>
<div>
}</div>
<div>
<br /></div>
<div>
byte curr_char_row_max = 7 - sequence; </div>
<div>
byte start_y = sequence; </div>
<div>
</div>
<div>
for (byte curr_char_row = 0; curr_char_row <= curr_char_row_max; curr_char_row++) {</div>
<div>
for (byte col = 0; col < 5; col++) {</div>
<div>
dots = pgm_read_byte_near(&myfont[current_c][col]);</div>
<div>
if (dots & (64 >> curr_char_row))</div>
<div>
plot(x + col, y + start_y, 1); //plot led on</div>
<div>
else</div>
<div>
plot(x + col, y + start_y, 0); //else plot led off</div>
<div>
}</div>
<div>
start_y++;//add one to y so we draw next row one down</div>
<div>
}</div>
<div>
}</div>
<div>
</div>
<div>
if (sequence >= 1 && sequence <= 8) {</div>
<div>
for (byte col = 0; col < 5; col++) {</div>
<div>
plot(x + col, y + (sequence - 1), 0);</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
</div>
<div>
if (sequence >= 2) {</div>
<div>
byte dots;</div>
<div>
if (new_c >= 'A' && new_c <= 'Z' ) {</div>
<div>
new_c &= 0x1F; // A-Z maps to 1-26</div>
<div>
}</div>
<div>
else if (new_c >= 'a' && new_c <= 'z') {</div>
<div>
new_c = (new_c - 'a') + 41; // A-Z maps to 41-67</div>
<div>
}</div>
<div>
else if (new_c >= '0' && new_c <= '9') {</div>
<div>
new_c = (new_c - '0') + 31;</div>
<div>
}</div>
<div>
else if (new_c == ' ') {</div>
<div>
new_c = 0; // space</div>
<div>
}</div>
<div>
else if (new_c == '.') {</div>
<div>
new_c = 27; // full stop</div>
<div>
}</div>
<div>
else if (new_c == '\'') {</div>
<div>
new_c = 28; // single quote mark</div>
<div>
}</div>
<div>
else if (new_c == ':') {</div>
<div>
new_c = 29; // clock_mode selector arrow</div>
<div>
}</div>
<div>
else if (new_c == '>') {</div>
<div>
new_c = 30; // clock_mode selector arrow</div>
<div>
}</div>
<div>
<br /></div>
<div>
byte newcharrowmin = 6 - (sequence - 2); </div>
<div>
byte start_y = 0;</div>
<div>
for (byte newcharrow = newcharrowmin; newcharrow <= 6; newcharrow++) {</div>
<div>
for (byte col = 0; col < 5; col++) {</div>
<div>
dots = pgm_read_byte_near(&myfont[new_c][col]);</div>
<div>
if (dots & (64 >> newcharrow))</div>
<div>
plot(x + col, y + start_y, 1);</div>
<div>
else</div>
<div>
plot(x + col, y + start_y, 0);</div>
<div>
}</div>
<div>
start_y++;</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<br />
<div>
void word_clock() {</div>
<div>
cls();</div>
<div>
char numbers[19][10] = {</div>
<div>
"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",</div>
<div>
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"</div>
<div>
};</div>
<div>
char numberstens[5][7] = {</div>
<div>
"ten", "twenty", "thirty", "forty", "fifty"</div>
<div>
};</div>
<div>
</div>
<div>
char str_a[8];</div>
<div>
char str_b[8];</div>
<div>
char str_c[8];</div>
<div>
<br /></div>
<div>
byte hours = rtc[2];</div>
<div>
if (hours > 12) {</div>
<div>
hours = hours - ampm * 12;</div>
<div>
}</div>
<div>
if (hours < 1) {</div>
<div>
hours = hours + ampm * 12;</div>
<div>
}</div>
<div>
<br /></div>
<div>
get_time(); </div>
<div>
byte old_mins = 100; </div>
<div>
byte mins;</div>
<div>
while (run_mode()) {</div>
<div>
if (buttonA.uniquePress()) {</div>
<div>
switch_mode();</div>
<div>
return;</div>
<div>
}</div>
<div>
if (buttonB.uniquePress()) {</div>
<div>
display_date();</div>
<div>
}</div>
<div>
<br /></div>
<div>
get_time(); </div>
<div>
mins = rtc[1]; //get mins</div>
<div>
if (mins != old_mins) {</div>
<div>
old_mins = mins;</div>
<div>
mins = rtc[1];</div>
<div>
hours = rtc[2];</div>
<div>
if (hours > 12) {</div>
<div>
hours = hours - 12;</div>
<div>
}</div>
<div>
if (hours == 0) {</div>
<div>
hours = 12;</div>
<div>
}</div>
<div>
int minsdigit = rtc[1] % 10;</div>
<div>
byte minsdigitten = (rtc[1] / 10) % 10;</div>
<div>
<br /></div>
<div>
if (mins < 10) {</div>
<div>
strcpy (str_a, numbers[minsdigit - 1]);</div>
<div>
strcpy (str_b, "PAST");</div>
<div>
strcpy (str_c, numbers[hours - 1]);</div>
<div>
}</div>
<div>
<br /></div>
<div>
if (mins == 10) {</div>
<div>
strcpy (str_a, numbers[9]);</div>
<div>
strcpy (str_b, " PAST");</div>
<div>
strcpy (str_c, numbers[hours - 1]);</div>
<div>
}</div>
<div>
<br /></div>
<div>
else if (minsdigitten != 0 && minsdigit != 0 ) {</div>
<div>
<br /></div>
<div>
strcpy (str_a, numbers[hours - 1]);</div>
<div>
<br /></div>
<div>
if (mins <= 19) {</div>
<div>
strcpy (str_b, numbers[mins - 1]);</div>
<div>
}</div>
<div>
else {</div>
<div>
strcpy (str_b, numberstens[minsdigitten - 1]);</div>
<div>
<br /></div>
<div>
strcpy (str_c, numbers[minsdigit - 1]);</div>
<div>
}</div>
<div>
}</div>
<div>
else if (minsdigitten != 0 && minsdigit == 0 ) {</div>
<div>
strcpy (str_a, numbers[hours - 1]);</div>
<div>
strcpy (str_b, numberstens[minsdigitten - 1]);</div>
<div>
strcpy (str_c, "");</div>
<div>
}</div>
<div>
<br /></div>
<div>
else if (minsdigitten == 0 && minsdigit == 0 ) {</div>
<div>
strcpy (str_a, numbers[hours - 1]);</div>
<div>
strcpy (str_b, "O'CLOCK");</div>
<div>
strcpy (str_c, "");</div>
<div>
}</div>
<div>
<br /></div>
<div>
}</div>
<div>
</div>
<div>
byte len = 0;</div>
<div>
while (str_a[len]) {</div>
<div>
len++;</div>
<div>
};</div>
<div>
byte offset_top = (31 - ((len - 1) * 4)) / 2; //</div>
<div>
byte i = 0;</div>
<div>
while (str_a[i]) {</div>
<div>
puttinychar((i * 4) + offset_top, 1, str_a[i]);</div>
<div>
i++;</div>
<div>
}</div>
<div>
</div>
<div>
</div>
<div>
int counter = 1000;</div>
<div>
while (counter > 0){</div>
<div>
if (buttonA.uniquePress()) {</div>
<div>
switch_mode();</div>
<div>
return;</div>
<div>
}</div>
<div>
if (buttonB.uniquePress()) {</div>
<div>
display_date();</div>
<div>
}</div>
<div>
delay(1);</div>
<div>
counter--;</div>
<div>
}</div>
<div>
fade_down();</div>
<div>
<br /></div>
<div>
</div>
<div>
len = 0;</div>
<div>
while (str_b[len]) {</div>
<div>
len++;</div>
<div>
}; </div>
<div>
offset_top = (31 - ((len - 1) * 4)) / 2; </div>
<div>
<br /></div>
<div>
i = 0;</div>
<div>
while (str_b[i]) {</div>
<div>
puttinychar((i * 4) + offset_top, 1, str_b[i]);</div>
<div>
i++;</div>
<div>
}</div>
<div>
<br /></div>
<div>
</div>
<div>
counter = 1000;</div>
<div>
while (counter > 0){</div>
<div>
if (buttonA.uniquePress()) {</div>
<div>
switch_mode();</div>
<div>
return;</div>
<div>
}</div>
<div>
if (buttonB.uniquePress()) {</div>
<div>
display_date();</div>
<div>
}</div>
<div>
delay(1);</div>
<div>
counter--;</div>
<div>
}</div>
<div>
fade_down();</div>
<div>
<br /></div>
<div>
</div>
<div>
len = 0;</div>
<div>
while (str_c[len]) {</div>
<div>
len++;</div>
<div>
};</div>
<div>
offset_top = (31 - ((len - 1) * 4)) / 2; </div>
<div>
<br /></div>
<div>
i = 0;</div>
<div>
while (str_c[i]) {</div>
<div>
puttinychar((i * 4) + offset_top, 1, str_c[i]);</div>
<div>
i++;</div>
<div>
}</div>
<div>
counter = 1000;</div>
<div>
while (counter > 0){</div>
<div>
//check for button press</div>
<div>
if (buttonA.uniquePress()) {</div>
<div>
switch_mode();</div>
<div>
return;</div>
<div>
}</div>
<div>
if (buttonB.uniquePress()) {</div>
<div>
display_date();</div>
<div>
} </div>
<div>
delay(1);</div>
<div>
counter--;</div>
<div>
}</div>
<div>
fade_down();</div>
<div>
</div>
<div>
counter = 1000;</div>
<div>
while (counter > 0){</div>
<div>
if (buttonA.uniquePress()) {</div>
<div>
switch_mode();</div>
<div>
return;</div>
<div>
}</div>
<div>
if (buttonB.uniquePress()) {</div>
<div>
display_date();</div>
<div>
} </div>
<div>
delay(1);</div>
<div>
counter--;</div>
<div>
}</div>
<div>
}</div>
<div>
fade_down();</div>
<div>
}</div>
<div>
<br /></div>
<div>
<div>
void scroll() {</div>
<div>
<br /></div>
<div>
char message[] = {"9W2NFE"};</div>
<div>
<br /></div>
<div>
cls();</div>
<div>
byte p = 6; //current pos in string</div>
<div>
byte chara[] = {0, 1, 2, 3, 4, 5}; //chars from string</div>
<div>
int x[] = {0, 6, 12, 18, 24, 30}; //xpos for each char</div>
<div>
byte y = 0; //y pos</div>
<div>
while (message[p] != '\0') {</div>
<div>
for (byte c = 0; c < 6; c++) {</div>
<div>
putnormalchar(x[c],y,message[ chara[c] ]);</div>
<div>
for (byte yy = 0 ; yy < 8; yy ++) {</div>
<div>
plot(x[c] + 5, yy, 0);</div>
<div>
}</div>
<div>
x[c] = x[c] - 1;</div>
<div>
}</div>
<div>
for (byte i = 0; i <= 5; i++) {</div>
<div>
if (x[i] < -5 ) {</div>
<div>
x[i] = 31;</div>
<div>
chara[i] = p;</div>
<div>
p++;</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
void display_date()</div>
<div>
{</div>
<div>
cls();</div>
<div>
byte dow = rtc[3]; // day of week 0 = Sunday</div>
<div>
byte date = rtc[4];</div>
<div>
byte month = rtc[5] - 1;</div>
<div>
char monthnames[12][9] = {</div>
<div>
"January", "February", "March", "April", "May", "June", "July", "August", "Sept", "October", "November", "December"</div>
<div>
};</div>
<div>
<br /></div>
<div>
byte len = 0;</div>
<div>
while(daysfull[dow][len]) { </div>
<div>
len++; </div>
<div>
}; </div>
<div>
byte offset = (31 - ((len-1)*4)) / 2; </div>
<div>
</div>
<div>
int i = 0;</div>
<div>
while(daysfull[dow][i])</div>
<div>
{</div>
<div>
puttinychar((i*4) + offset , 1, daysfull[dow][i]); </div>
<div>
i++;</div>
<div>
}</div>
<div>
delay(1000);</div>
<div>
fade_down();</div>
<div>
cls();</div>
<div>
</div>
<div>
</div>
<div>
char buffer[3];</div>
<div>
itoa(date,buffer,10);</div>
<div>
offset = 10; </div>
<div>
byte s = 3; </div>
<div>
if(date == 1 || date == 21 || date == 31) {</div>
<div>
s = 0;</div>
<div>
} </div>
<div>
else if (date == 2 || date == 22) {</div>
<div>
s = 1;</div>
<div>
} </div>
<div>
else if (date == 3 || date == 23) {</div>
<div>
s = 2;</div>
<div>
} </div>
<div>
puttinychar(0+offset, 1, buffer[0]);</div>
<div>
byte suffixposx = 4;</div>
<div>
if (date > 9){</div>
<div>
suffixposx = 8;</div>
<div>
puttinychar(4+offset, 1, buffer[1]);</div>
<div>
offset = 8; //offset to centre text if 4 chars</div>
<div>
}</div>
<div>
<br /></div>
<div>
puttinychar(suffixposx+offset, 1, suffix[s][0]); </div>
<div>
puttinychar(suffixposx+4+offset, 1, suffix[s][1]); </div>
<div>
</div>
<div>
delay(1000);</div>
<div>
fade_down();</div>
<div>
</div>
<div>
pixels b2 and using that as an offset</div>
<div>
len = 0;</div>
<div>
while(monthnames[month][len]) { </div>
<div>
len++; </div>
<div>
}; </div>
<div>
offset = (31 - ((len-1)*4)) / 2; </div>
<div>
i = 0;</div>
<div>
while(monthnames[month][i])</div>
<div>
{ </div>
<div>
puttinychar((i*4) +offset, 1, monthnames[month][i]); </div>
<div>
i++; </div>
<div>
}</div>
<div>
</div>
<div>
delay(1000);</div>
<div>
fade_down();</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
void switch_mode() {</div>
<div>
old_mode = clock_mode;</div>
<div>
char* modes[] = {</div>
<div>
"Basic", "Small", "Slide", "Words", "Setup"</div>
<div>
};</div>
<div>
<br /></div>
<div>
byte next_clock_mode;</div>
<div>
byte firstrun = 1;</div>
<div>
for (int count = 0; count < 35 ; count++) {</div>
<div>
if (buttonA.uniquePress() || firstrun == 1) {</div>
<div>
count = 0;</div>
<div>
cls();</div>
<div>
if (firstrun == 0) {</div>
<div>
clock_mode++;</div>
<div>
}</div>
<div>
if (clock_mode > NUM_DISPLAY_MODES + 1 ) {</div>
<div>
clock_mode = 0;</div>
<div>
}</div>
<div>
char str_top[9];</div>
<div>
strcpy (str_top, modes[clock_mode]);</div>
<div>
next_clock_mode = clock_mode + 1;</div>
<div>
if (next_clock_mode > NUM_DISPLAY_MODES + 1 ) {</div>
<div>
next_clock_mode = 0;</div>
<div>
}</div>
<div>
byte i = 0;</div>
<div>
while (str_top[i]) {</div>
<div>
putnormalchar(i * 6, 0, str_top[i]);</div>
<div>
i++;</div>
<div>
}</div>
<div>
firstrun = 0;</div>
<div>
}</div>
<div>
delay(50);</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
byte run_mode() {</div>
<div>
.</div>
<div>
if (random_mode) {</div>
<div>
if (change_mode_time == rtc[2]) {</div>
<div>
set_next_random();</div>
<div>
return 0;</div>
<div>
}</div>
<div>
}</div>
<div>
return 1;</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
void set_next_random() {</div>
<div>
get_time();</div>
<div>
change_mode_time = rtc[2] + random (1, 5);</div>
<div>
if (change_mode_time > 23) {</div>
<div>
change_mode_time = random (1, 4);</div>
<div>
}</div>
<div>
clock_mode = random(0, NUM_DISPLAY_MODES + 1); </div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
void setup_menu() {</div>
<div>
char* set_modes[] = {</div>
<div>
"Rndom", "24 Hr","Set", "Brght", "Exit"}; </div>
<div>
if (ampm == 0) { </div>
<div>
set_modes[1] = ("12 Hr"); </div>
<div>
}</div>
<div>
byte setting_mode = 0;</div>
<div>
byte next_setting_mode;</div>
<div>
byte firstrun = 1;</div>
<div>
for(int count=0; count < 35 ; count++) {</div>
<div>
if(buttonA.uniquePress() || firstrun == 1){</div>
<div>
count = 0;</div>
<div>
cls();</div>
<div>
if (firstrun == 0) { </div>
<div>
setting_mode++; </div>
<div>
} </div>
<div>
if (setting_mode > NUM_SETTINGS_MODES) { </div>
<div>
setting_mode = 0; </div>
<div>
}</div>
<div>
char str_top[9];</div>
<div>
strcpy (str_top, set_modes[setting_mode]);</div>
<div>
next_setting_mode = setting_mode + 1;</div>
<div>
if (next_setting_mode > NUM_SETTINGS_MODES) { </div>
<div>
next_setting_mode = 0; </div>
<div>
}</div>
<div>
</div>
<div>
byte i = 0;</div>
<div>
while(str_top[i]) {</div>
<div>
putnormalchar(i*6, 0, str_top[i]); </div>
<div>
i++;</div>
<div>
}</div>
<div>
<br /></div>
<div>
firstrun = 0;</div>
<div>
}</div>
<div>
delay(50); </div>
<div>
}</div>
<div>
</div>
<div>
</div>
<div>
switch(setting_mode){</div>
<div>
case 0: </div>
<div>
set_random(); </div>
<div>
break;</div>
<div>
case 1: </div>
<div>
set_ampm(); </div>
<div>
break;</div>
<div>
case 2: </div>
<div>
set_time(); </div>
<div>
break;</div>
<div>
case 3: </div>
<div>
set_intensity(); </div>
<div>
break;</div>
<div>
case 4: </div>
<div>
break;</div>
<div>
}</div>
<div>
clock_mode=old_mode;</div>
<div>
}</div>
<div>
<br /></div>
<div>
void set_random(){</div>
<div>
cls();</div>
<div>
char text_a[9] = "Off";</div>
<div>
char text_b[9] = "On";</div>
<div>
byte i = 0;</div>
<div>
if (random_mode){</div>
<div>
random_mode = 0;</div>
<div>
while(text_a[i]) {</div>
<div>
putnormalchar((i*6), 0, text_a[i]);</div>
<div>
i++;</div>
<div>
}</div>
<div>
} else {</div>
<div>
random_mode = 1;</div>
<div>
set_next_random();</div>
<div>
while(text_b[i]) {</div>
<div>
putnormalchar((i*6), 0, text_b[i]);</div>
<div>
i++;</div>
<div>
} </div>
<div>
} </div>
<div>
delay(1500); //leave the message up for a second or so</div>
<div>
}</div>
<div>
<br /></div>
<div>
void set_ampm() {</div>
<div>
ampm = (ampm ^ 1);</div>
<div>
cls();</div>
<div>
}</div>
<div>
<br /></div>
<div>
void set_intensity() {</div>
<div>
cls();</div>
<div>
byte i = 0;</div>
<div>
char text[7] = "Bright";</div>
<div>
while(text[i]) {</div>
<div>
puttinychar((i*4)+4, 0, text[i]);</div>
<div>
i++;</div>
<div>
}</div>
<div>
<br /></div>
<div>
while (!buttonA.uniquePress()) {</div>
<div>
<br /></div>
<div>
levelbar (0,6,(intensity*2)+2,2); </div>
<div>
while (buttonB.isPressed()) {</div>
<div>
if(intensity == 15) { </div>
<div>
intensity = 0;</div>
<div>
cls (); </div>
<div>
} </div>
<div>
else {</div>
<div>
intensity++; </div>
<div>
}</div>
<div>
i = 0;</div>
<div>
while(text[i]) {</div>
<div>
puttinychar((i*4)+4, 0, text[i]);</div>
<div>
i++;</div>
<div>
}</div>
<div>
</div>
<div>
</div>
<div>
levelbar (0,6,(intensity*2)+2,2); </div>
<div>
</div>
<div>
</div>
<div>
for (byte address = 0; address < 4; address++) {</div>
<div>
lc.setIntensity(address, intensity);</div>
<div>
}</div>
<div>
delay(150);</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
void levelbar (byte xpos, byte ypos, byte xbar, byte ybar) {</div>
<div>
for (byte x = 0; x < xbar; x++) {</div>
<div>
for (byte y = 0; y <= ybar; y++) {</div>
<div>
plot(x+xpos, y+ypos, 1);</div>
<div>
}</div>
<div>
}</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
void set_time() {</div>
<div>
<br /></div>
<div>
cls();</div>
<div>
<br /></div>
<div>
</div>
<div>
get_time();</div>
<div>
byte set_min = rtc[1];</div>
<div>
byte set_hr = rtc[2];</div>
<div>
byte set_date = rtc[4];</div>
<div>
byte set_mnth = rtc[5];</div>
<div>
int set_yr = rtc[6]; </div>
<div>
<br /></div>
<div>
</div>
<div>
set_date = set_value(2, set_date, 1, 31);</div>
<div>
set_mnth = set_value(3, set_mnth, 1, 12);</div>
<div>
set_yr = set_value(4, set_yr, 2013, 2099);</div>
<div>
set_hr = set_value(1, set_hr, 0, 23);</div>
<div>
set_min = set_value(0, set_min, 0, 59);</div>
<div>
<br /></div>
<div>
ds1307.adjust(DateTime(set_yr, set_mnth, set_date, set_hr, set_min));</div>
<div>
</div>
<div>
cls();</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
int set_value(byte message, int current_value, int reset_value, int rollover_limit){</div>
<div>
cls();</div>
<div>
char messages[6][17] = {</div>
<div>
"Set Mins", "Set Hour", "Set Day", "Set Mnth", "Set Year"};</div>
<div>
byte i = 0;</div>
<div>
while(messages[message][i])</div>
<div>
{</div>
<div>
puttinychar(i*4 , 1, messages[message][i]); </div>
<div>
i++;</div>
<div>
}</div>
<div>
<br /></div>
<div>
delay(2000);</div>
<div>
cls();</div>
<div>
char buffer[5] = " ";</div>
<div>
itoa(current_value,buffer,10);</div>
<div>
puttinychar(0 , 1, buffer[0]); </div>
<div>
puttinychar(4 , 1, buffer[1]); </div>
<div>
puttinychar(8 , 1, buffer[2]); </div>
<div>
puttinychar(12, 1, buffer[3]); </div>
<div>
<br /></div>
<div>
delay(300);</div>
<div>
while (!buttonA.uniquePress()) {</div>
<div>
while (buttonB.isPressed()){</div>
<div>
if(current_value < rollover_limit) { </div>
<div>
current_value++;</div>
<div>
} </div>
<div>
else {</div>
<div>
current_value = reset_value;</div>
<div>
}</div>
<div>
//print the new value</div>
<div>
itoa(current_value, buffer ,10);</div>
<div>
puttinychar(0 , 1, buffer[0]); </div>
<div>
puttinychar(4 , 1, buffer[1]); </div>
<div>
puttinychar(8 , 1, buffer[2]); </div>
<div>
puttinychar(12, 1, buffer[3]); </div>
<div>
delay(150);</div>
<div>
}</div>
<div>
}</div>
<div>
return current_value;</div>
<div>
}</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
void get_time()</div>
<div>
{</div>
<div>
DateTime now = ds1307.now();</div>
<div>
rtc[6] = now.year();</div>
<div>
rtc[5] = now.month();</div>
<div>
rtc[4] = now.day();</div>
<div>
rtc[3] = now.dayOfWeek(); //returns 0-6 where 0 = Sunday</div>
<div>
rtc[2] = now.hour();</div>
<div>
rtc[1] = now.minute();</div>
<div>
rtc[0] = now.second();</div>
<div>
}</div>
</div>
<div>
<br /></div>
</div>
</div>
<div>
<br /></div>
</div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-79543714683258120782020-05-29T14:07:00.003+08:002020-05-29T14:11:24.891+08:00Paparan LCD custom character untuk Arduino<br />
<br />
Mungkin kita perlukan custom character ( aksara khas) untuk memberi lebih daya tarikan kepada paparan LCD projek.<br />
<br />
Disini saya tunjukkan bagaimana anda boleh berbuat demikian.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAqME8WqfTf4f3faZlzVg0Lc8GQRyRuAOsMqAyVf4_mFLM5zGPXcOqfqmDexpBnlZeSMrYsW1YUtwS9-10BBtLQxzW9v-NiHZZ2Q28U1HZUihT0mNdLoPzEQYeBFyToxVA4mMX6wfSshA/s1600/2.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="474" data-original-width="324" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAqME8WqfTf4f3faZlzVg0Lc8GQRyRuAOsMqAyVf4_mFLM5zGPXcOqfqmDexpBnlZeSMrYsW1YUtwS9-10BBtLQxzW9v-NiHZZ2Q28U1HZUihT0mNdLoPzEQYeBFyToxVA4mMX6wfSshA/s200/2.jpg" width="136" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYpMXr8-elkcWltzzdZrf8nuEwhj4L8ul3SYDldCj5S3AeWVd1j0nWb25PkDZeaqVmKZzxJMfcMo9n4Nb7MylRPqNoMm9Mo2nw2i75yBcJAU5LhQcyYHvXLLbX-pF4pfoSmF8278trRRc/s1600/1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="482" data-original-width="332" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYpMXr8-elkcWltzzdZrf8nuEwhj4L8ul3SYDldCj5S3AeWVd1j0nWb25PkDZeaqVmKZzxJMfcMo9n4Nb7MylRPqNoMm9Mo2nw2i75yBcJAU5LhQcyYHvXLLbX-pF4pfoSmF8278trRRc/s200/1.jpg" width="137" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYgF9GHCxZUeEtyMm3jOdKeJIaQUALydneRts28QNPCqMOHdnlZn8Jd2__h5rJlAGfzu0IOYMf7-8Q-zLNFrqE_762H9q1mSQxfLyWxKRL6v8KaNcho22orAn1KTJB8kVq36_iZ9eS6Sk/s1600/3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="471" data-original-width="318" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYgF9GHCxZUeEtyMm3jOdKeJIaQUALydneRts28QNPCqMOHdnlZn8Jd2__h5rJlAGfzu0IOYMf7-8Q-zLNFrqE_762H9q1mSQxfLyWxKRL6v8KaNcho22orAn1KTJB8kVq36_iZ9eS6Sk/s200/3.jpg" width="135" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9tptMPP04tr6huVJBxerP9N0dC_NBLfIAw4iYK_Fq2DqGcK02hEunkYmiyfccImNaq8jTkYw9YGAgl_IickAQQVxZx054zBSz3doZ8_4CZ3ggUFXHgrAWH_Jx_qPzlYFT8ZkDdGP6x4s/s1600/4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="476" data-original-width="323" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9tptMPP04tr6huVJBxerP9N0dC_NBLfIAw4iYK_Fq2DqGcK02hEunkYmiyfccImNaq8jTkYw9YGAgl_IickAQQVxZx054zBSz3doZ8_4CZ3ggUFXHgrAWH_Jx_qPzlYFT8ZkDdGP6x4s/s200/4.jpg" width="135" /></a></div>
<br />
<br />
<br />
Paparan LCD terdiri dari blok-blok yang disusun, yang pada asasnya 5 titik melintang dan 8 titik menegak, yang dinyalakan sesuai dengan kod atau aksara yang telah ditentukan di dalam IC pengawal LCD , terdapat 32 blok seperti itu dalam ukuran 16 x 2 paparan LCD.<br />
<br />
<br />
<br />
<br />
<br />
Contoh penghasilan aksara<br />
1.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgcly8KwoqKIMzFV_Rse1tI0mRxTrV-jVOLBT2JnP0E9xDVNjOVk9b0p016tCYVWcqltsI5PwRVQks5-eExEVS1J5mrML1rNSeVeYMOX2zZGPTyIXScoH_K1896Mv_Xo7Aqv9unHUd860/s1600/5.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="284" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgcly8KwoqKIMzFV_Rse1tI0mRxTrV-jVOLBT2JnP0E9xDVNjOVk9b0p016tCYVWcqltsI5PwRVQks5-eExEVS1J5mrML1rNSeVeYMOX2zZGPTyIXScoH_K1896Mv_Xo7Aqv9unHUd860/s200/5.jpg" width="138" /></a></div>
B00000,<br />
B01110,<br />
B10001,<br />
B11011,<br />
B10101,<br />
B10001,<br />
B01110,<br />
B00000<br />
<br />
<br />
<br />
<br />
2.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnjzllbEwUjySMk1SU7M3RlHfwOV9OmtRiwKhcvgkwR4iCNSR2yflXgiFCLyheZLzq_plpdoLXekMLxdS0W2jQ4YQPShnvoCHx6YA51UHoNgrlIo039vUv8B1zRBcJgWh5bBiClsFrEhQ/s1600/6.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="284" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnjzllbEwUjySMk1SU7M3RlHfwOV9OmtRiwKhcvgkwR4iCNSR2yflXgiFCLyheZLzq_plpdoLXekMLxdS0W2jQ4YQPShnvoCHx6YA51UHoNgrlIo039vUv8B1zRBcJgWh5bBiClsFrEhQ/s200/6.jpg" width="138" /></a></div>
<br />
B00000,<br />
B01110,<br />
B10001,<br />
B10001,<br />
B10001,<br />
B01110,<br />
B01100,<br />
B01000<br />
<br />
<br />
<br />
<br />
3.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeAkbuiPpB2k5K-hJ53ekAYKfuofKjFH2ivzb0SkG55JY60c2inmi_F-Xby6loRcrCboLGpS8kJg_pHxhzO_5k83uXcID8_9i751HC7lrCC1krcOHLsuKJmdQzo5GVCmEWA6nPPyJpIpc/s1600/7.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="296" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeAkbuiPpB2k5K-hJ53ekAYKfuofKjFH2ivzb0SkG55JY60c2inmi_F-Xby6loRcrCboLGpS8kJg_pHxhzO_5k83uXcID8_9i751HC7lrCC1krcOHLsuKJmdQzo5GVCmEWA6nPPyJpIpc/s200/7.jpg" width="145" /></a></div>
<br />
B00000,<br />
B01100,<br />
B01010,<br />
B01010,<br />
B11111,<br />
B01010,<br />
B01010,<br />
B01100<br />
<br />
<br />
<br />
Anda dapat lihat corak nombor 1 dan 0 yang disusun mengikut DOT yang perlu dan yang tidak diperlukan.<br />
<br />
<br />
Contoh coding:<br />
<br />
<br />
#include <LiquidCrystal.h><br />
<br />
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS, E, D4, D5, D6, D7<br />
<br />
byte customChar[] =<br />
{<br />
B00000,<br />
B01110,<br />
B10001,<br />
B11011,<br />
B10101,<br />
B10001,<br />
B01110,<br />
B00000<br />
};<br />
<br />
void setup()<br />
{<br />
lcd.begin(16, 2);<br />
lcd.createChar(0, customChar);<br />
}<br />
<br />
void loop()<br />
{<br />
lcd.setCursor (0, 0);<br />
lcd.print (customChar);<br />
}<br />
<br />
<br />
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-69122318532764088152020-03-27T16:09:00.000+08:002020-05-29T14:11:13.274+08:00IOT Analisa penggunaan kuasa elektrik<div>
Salam semua.</div>
<div>
Kali ini kita mencuba teknologi IOT (Internet Of Thing) untuk menganalisa penggunaan tenaga elektrik kita dirumah.</div>
<div>
Mungkin data ini kita boleh gunakan untuk menganalisa corak penggunaan tenaga kita atau mencari tenaga alternatif untuk mengurangkan bil penggunaan elektrik kita.</div>
<div>
<br /></div>
<div>
Disini saya akan menggunakan server THINGSPEAK sebagai penyimpan data.</div>
<div>
www.thingspeak.com</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil2OzDlhV3C0tzPsz52cHX_mDTcUvMB1HexcFd1tSFB92CNWbYARVgEQyH_qJNtjR_htllhaKkLwc28xkodC3x3evAaRqJOIz84zDqPS73Lud-CJmxkdc6-7dfVCkc-6wEc3Y9YREES4I/s1600/1585293674192685-0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil2OzDlhV3C0tzPsz52cHX_mDTcUvMB1HexcFd1tSFB92CNWbYARVgEQyH_qJNtjR_htllhaKkLwc28xkodC3x3evAaRqJOIz84zDqPS73Lud-CJmxkdc6-7dfVCkc-6wEc3Y9YREES4I/s1600/1585293674192685-0.png" width="400" />
</a>
</div>
<div style="text-align: center;">
Contoh data yang diterima dari client.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
</div>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHaDN_K8UYfUaaezTsF5R13eCvkqgaIbYjyuS3ocLLZso51tOyAGLzmT0UoYC6haL1T2gewf7A_tS8Ikr1pYZhzNgPUGXIfBlozbkVSPK8yDHaKDT-8Wnjx-TALvN0iymqyTWMq3kQxP0/s1600/1585293667813166-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHaDN_K8UYfUaaezTsF5R13eCvkqgaIbYjyuS3ocLLZso51tOyAGLzmT0UoYC6haL1T2gewf7A_tS8Ikr1pYZhzNgPUGXIfBlozbkVSPK8yDHaKDT-8Wnjx-TALvN0iymqyTWMq3kQxP0/s1600/1585293667813166-1.png" width="400" />
</a>
</div>
<div style="text-align: center;">
Client device yang dipasang pada punca utama bekalan kuasa.</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLuSEFGFGkx3R4yqS8zfL_yamI2Ow9mkfB90B6UBklMtX9gkC9CMxfDlz0GNxpEZSMQ_igGY2iAGqNOW25_ipLA-qyCVsrdNTtgCChswvWgue0R21cpsKnkBFliIcpBRkcQKGTIzqYkAg/s1600/1422743993.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1566" data-original-width="1444" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLuSEFGFGkx3R4yqS8zfL_yamI2Ow9mkfB90B6UBklMtX9gkC9CMxfDlz0GNxpEZSMQ_igGY2iAGqNOW25_ipLA-qyCVsrdNTtgCChswvWgue0R21cpsKnkBFliIcpBRkcQKGTIzqYkAg/s400/1422743993.jpg" width="368" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
Litar Arduino dan ESP8266</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgsdn-hU6qzUWGChQU3FrzjnDCYo_FxkS6ePEp2jGzEoY_piRgyEpO-ERXzvrZqUCaE8Yj6KUiV3GRDTem3BaJN_8Ov_xszvpQ5aPeIjn3vgQuBpIwaZkx2jD3TkLvq5cZ162-OuxFjh0/s1600/httpsstatics3.seeedstudio.comimagesproduct101990028201.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="525" data-original-width="700" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgsdn-hU6qzUWGChQU3FrzjnDCYo_FxkS6ePEp2jGzEoY_piRgyEpO-ERXzvrZqUCaE8Yj6KUiV3GRDTem3BaJN_8Ov_xszvpQ5aPeIjn3vgQuBpIwaZkx2jD3TkLvq5cZ162-OuxFjh0/s320/httpsstatics3.seeedstudio.comimagesproduct101990028201.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
Current sensor yang digunakan. Non-invasive AC Current Sensor (30A max)</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Coding : <a href="https://www.blogger.com/%3Cscript%20src=%22https://gist.github.com/protongt/fad70e5d65bbc340e30d3fd94f33eac0.js%22%3E%3C/script%3E" style="background-color: white; font-family: Georgia, "Times New Roman", serif; font-size: small;" target="_blank">GitHub</a></div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuT4IOFaziTlREJT8hOi9CK7MYRnJ5KUDNKJtnpnjBVDI3FpfnBk9MrDa3X6EChE1OfoGh2NtpQyVAvAQe9KNyJNjgjQXcIkUrBQ5CaEdTorpK54Ng3zk7Q5fAiqNk2taqcrse-rA9Pcg/s1600/data.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="673" data-original-width="1600" height="268" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuT4IOFaziTlREJT8hOi9CK7MYRnJ5KUDNKJtnpnjBVDI3FpfnBk9MrDa3X6EChE1OfoGh2NtpQyVAvAQe9KNyJNjgjQXcIkUrBQ5CaEdTorpK54Ng3zk7Q5fAiqNk2taqcrse-rA9Pcg/s640/data.png" width="640" /></a></div>
<br /></div>
<div>
<div style="text-align: center;">
Contoh data csv file yang diambil dari server.</div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
</div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-36957323569084812052018-11-21T19:56:00.000+08:002020-05-29T14:08:57.341+08:00Arduino LCD pin assigning and programming declaration<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPAs-nudHGSloIqgGm7MpGNGABFGTwzgPJ6lUnaivEzA23VomauVsVsV4HenHSMyzmmxWtjQf0B_xKWKn4XNJL_CAiWG3p2GoxfSPhIaiJ02hDRC3HjpNo7AIChP9kV1RatMAQcS8leqU/s1600/10854287_10204099651757882_5023622413220534067_o.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="679" data-original-width="1175" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPAs-nudHGSloIqgGm7MpGNGABFGTwzgPJ6lUnaivEzA23VomauVsVsV4HenHSMyzmmxWtjQf0B_xKWKn4XNJL_CAiWG3p2GoxfSPhIaiJ02hDRC3HjpNo7AIChP9kV1RatMAQcS8leqU/s640/10854287_10204099651757882_5023622413220534067_o.jpg" width="640" /></a></div>
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgruBjKMP75vrYTZVt96aewixzx4-9U5NumFTZWaglJ7ikd1O55d22U8mp6ZL8f5DbKMbIs-7RccHO1vEEJ4Jopz7V_xHcDWetDsVfDeotnZ3hDRHRgQ14Ps-WHEOooy4mWZNEMKOGOIRg/s1600/LCD_schem.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1054" data-original-width="1342" height="502" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgruBjKMP75vrYTZVt96aewixzx4-9U5NumFTZWaglJ7ikd1O55d22U8mp6ZL8f5DbKMbIs-7RccHO1vEEJ4Jopz7V_xHcDWetDsVfDeotnZ3hDRHRgQ14Ps-WHEOooy4mWZNEMKOGOIRg/s640/LCD_schem.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
Programming declaration<br />
<br />
LiquidCrystal (RS, EN, D4, D5, D6, D7)<br />
<br />
<br />
Example :<br />
LiquidCrystal ( 12, 11, 5, 4, 3, 2 )<br />
<br />
<br />
<br />
SKETCH HELLO WORLD<br />
<br />
/*<br />
LiquidCrystal Library - Hello World<br />
<br />
Demonstrates the use a 16x2 LCD display. The LiquidCrystal<br />
library works with all LCD displays that are compatible with the<br />
Hitachi HD44780 driver. There are many of them out there, and you<br />
can usually tell them by the 16-pin interface.<br />
<br />
This sketch prints "Hello World!" to the LCD<br />
and shows the time.<br />
<br />
The circuit:<br />
* LCD RS pin to digital pin 12<br />
* LCD Enable pin to digital pin 11<br />
* LCD D4 pin to digital pin 5<br />
* LCD D5 pin to digital pin 4<br />
* LCD D6 pin to digital pin 3<br />
* LCD D7 pin to digital pin 2<br />
* LCD R/W pin to ground<br />
* LCD VSS pin to ground<br />
* LCD VCC pin to 5V<br />
* 10K resistor:<br />
* ends to +5V and ground<br />
* wiper to LCD VO pin (pin 3)<br />
<br />
Library originally added 18 Apr 2008<br />
by David A. Mellis<br />
library modified 5 Jul 2009<br />
by Limor Fried (http://www.ladyada.net)<br />
example added 9 Jul 2009<br />
by Tom Igoe<br />
modified 22 Nov 2010<br />
by Tom Igoe<br />
modified 7 Nov 2016<br />
by Arturo Guadalupi<br />
<br />
This example code is in the public domain.<br />
<br />
http://www.arduino.cc/en/Tutorial/LiquidCrystalHelloWorld<br />
<br />
*/<br />
<br />
// include the library code:<br />
#include <LiquidCrystal.h><br />
<br />
// initialize the library by associating any needed LCD interface pin<br />
// with the arduino pin number it is connected to<br />
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;<br />
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);<br />
<br />
void setup() {<br />
// set up the LCD's number of columns and rows:<br />
lcd.begin(16, 2);<br />
// Print a message to the LCD.<br />
lcd.print("hello, world!");<br />
}<br />
<br />
void loop() {<br />
// set the cursor to column 0, line 1<br />
// (note: line 1 is the second row, since counting begins with 0):<br />
lcd.setCursor(0, 1);<br />
// print the number of seconds since reset:<br />
lcd.print(millis() / 1000);<br />
}<br />
<div>
<br /></div>
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
<br />Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-27728638609230711082018-11-14T23:42:00.000+08:002020-05-29T14:09:40.572+08:00Arduino Projek servo pan dan tilt<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/yUbTSSPYkLw/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/yUbTSSPYkLw?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-59751986040000202282017-02-09T13:44:00.002+08:002020-05-29T12:52:06.518+08:00Morse Code Trainer Kit (CW Oscillator)Circuit diagram<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga4N68LC1d7I7F8FcAKvdRl1WDYIdJFafBys_izKVqOWlwzr21vN8yPZjgwuiShJuGcjUk-rFtr_iR9f_ZXPzc2kcjhY99Bv4XvROhnQR_sJdGws0gcn6LoNIb0KEf6i10KenJ21lEr5k/s1600/cw+osc.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga4N68LC1d7I7F8FcAKvdRl1WDYIdJFafBys_izKVqOWlwzr21vN8yPZjgwuiShJuGcjUk-rFtr_iR9f_ZXPzc2kcjhY99Bv4XvROhnQR_sJdGws0gcn6LoNIb0KEf6i10KenJ21lEr5k/s400/cw+osc.JPG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
Komponen : <br />
<br />
<ol><ol><ol><ol><ol>
<li>Bateri 9 volt.</li>
<li>IC timer 555.</li>
<li>Speaker 8 Ohm, 5 Watt.</li>
</ol>
</ol>
</ol>
</ol>
</ol>
<br />
<br />
PCB circuit<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvD1Wdu6DRYsvgGROEOD6PRZpFJzoCuZ6WqNrlFHYXNdiHwjJLDCN4QqaVkn3EcIb82ZeETuYDA4R-d_pQGY6bLHXFlbgJmbx8IG8TbPAWcrl6aX6QvXMF03FRNg1LBx3EjBOQmgrBRb0/s1600/cw+osc+2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvD1Wdu6DRYsvgGROEOD6PRZpFJzoCuZ6WqNrlFHYXNdiHwjJLDCN4QqaVkn3EcIb82ZeETuYDA4R-d_pQGY6bLHXFlbgJmbx8IG8TbPAWcrl6aX6QvXMF03FRNg1LBx3EjBOQmgrBRb0/s400/cw+osc+2.JPG" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
PCB component arrangement.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiQnoxYp4TlOedoeeNPAXU0vraygQWd1efGNAe9cTVuVT4sLBmLzw-EEXWmRhddInvouQPY0m7Huv8B25RtTu7kflbJ7XdECN2toNguOMf579lm9Q8Q3bg-L_REe1UwtjqOUtnNPQlYsA/s1600/cw+osc+3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiQnoxYp4TlOedoeeNPAXU0vraygQWd1efGNAe9cTVuVT4sLBmLzw-EEXWmRhddInvouQPY0m7Huv8B25RtTu7kflbJ7XdECN2toNguOMf579lm9Q8Q3bg-L_REe1UwtjqOUtnNPQlYsA/s400/cw+osc+3.JPG" width="400" /></a></div>
<br />
<br />
Dah siap..........<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHyY6WjzpJ2LGnMguOfo7JTKSXQ9VEH6LtACA6qvcGKGXrE4iz-DlwGAN_AAz_jbX6uaYs9eBHEumknOC-Udtbj4e5r1tRH14H32unQYubdaoGNq5Z8cxybXJAf2-0ZezH_Sb1UDp8ae4/s1600/cw+osc42.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHyY6WjzpJ2LGnMguOfo7JTKSXQ9VEH6LtACA6qvcGKGXrE4iz-DlwGAN_AAz_jbX6uaYs9eBHEumknOC-Udtbj4e5r1tRH14H32unQYubdaoGNq5Z8cxybXJAf2-0ZezH_Sb1UDp8ae4/s400/cw+osc42.JPG" width="400" /></a></div>
<br />
<br />
<br />
Tone speaker boleh diubah dengan melaraskan trimmer.<br />
Volume speaker pula boleh dilaras pada potentiometer.<br />
<br />
<br />
<div style="text-align: center;">
<iframe allowfullscreen="true" allowtransparency="true" frameborder="0" height="315" scrolling="no" src="https://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fprotongt%2Fvideos%2F10210815071759185%2F&show_text=0&width=560" style="border: none; overflow: hidden;" width="560"></iframe>
</div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-28689533458362491452017-01-25T11:52:00.000+08:002017-02-04T16:02:04.849+08:00Basic PLC Programming 1<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: "courier new" , "courier" , monospace;">Pada asasnya, untuk memulakan sesuatu program PLC, terdapat 3 simbol yang paling penting dalam sesuatu program.</span></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ol>
<li><span style="font-family: "courier new" , "courier" , monospace;">Normally Open contact.<br />- Contact ini merupakan suis yang dalam keadaan normalnya OFF jika tidak medapat sebarang isyarat INPUT.</span></li>
<li><span style="font-family: "courier new" , "courier" , monospace;">Normally Close contact<br />- Contact ini adalah vice versa kepada contact normally open. Dalam keadaan normalnya, ia akan ON jika tidak mendapat sebarang isyarat INPUT </span></li>
<li><span style="font-family: "courier new" , "courier" , monospace;">Output relay.<br />- Ia merupakan hasil dari keadaan kawalan isyarat INPUT. Kebiasaannya ia berada disebelah kanan setiap program.</span></li>
</ol>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghgPH3mqBivy3X65wPhYRiTnENi06GS11aJRNkkaFBKRVGLKdvfJ2uFxl-imlFOiLW4pvdPtiFidplu42O9VbfrDb48mL8CGwUQ508f2XzoxFHc7cnh0070qTfTwfIf3bwjYlXm2E-AI0/s1600/PLC1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghgPH3mqBivy3X65wPhYRiTnENi06GS11aJRNkkaFBKRVGLKdvfJ2uFxl-imlFOiLW4pvdPtiFidplu42O9VbfrDb48mL8CGwUQ508f2XzoxFHc7cnh0070qTfTwfIf3bwjYlXm2E-AI0/s320/PLC1.JPG" width="320" /></a></div>
<br />
<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">STRUKTUR PROGRAM</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> Program biasanya dibahagikan kepada 2 bahagian iaitu:</span><br />
<br />
<ol>
<li><span style="font-family: "courier new" , "courier" , monospace;">Litar KAWALAN<br />- Litar ini merupakan segala proses yang diperlukan untuk mengawal keadaan OUTPUT yang diperlukan sebelum isyarat dihantar untuk menghasilkan kerja.</span></li>
<li><span style="font-family: "courier new" , "courier" , monospace;">Litar KUASA<br />- Litar ini adalah hasil daripada isyarat INPUT yang diproses dan mengeluarkan isyarat OUTPUT bagi mesin atau peralatan untuk melakukan kerja yang ditetapkan. </span></li>
</ol>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2WULOGuy5eVZ8Y8ZNFgKXca17FIaO41S7wI17KoQdnkCRUiLL0j9YqNdpku_IK0Ac5rx9SZhMXfEi4w1MNK5n7_DJAYqckZPMw5iTUYUyAm8E5De62sDbD1mlstPp-A4YIDFpVwNP7YY/s1600/PLC2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2WULOGuy5eVZ8Y8ZNFgKXca17FIaO41S7wI17KoQdnkCRUiLL0j9YqNdpku_IK0Ac5rx9SZhMXfEi4w1MNK5n7_DJAYqckZPMw5iTUYUyAm8E5De62sDbD1mlstPp-A4YIDFpVwNP7YY/s320/PLC2.JPG" width="320" /></a></div>
<br />
<br />
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya. </div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-52242644037037166222017-01-17T12:12:00.000+08:002017-02-04T16:01:56.296+08:00Basic PLC Programming 3Berikut menunjukkan bagaimana isyarat INPUT boleh diolah untuk mengawal isyarat OUTPUT.<br />
<div>
1. OR Gate</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDhJXLdj2ZUPK0XtIT2rcrTwZ7z3ekJhD3L8X_tLX78hwYhPce-2XachHnnRRsAAX9urrjbQZhVUnRQAgzREIFFNJeF7CUDVpHyb4x5315J7XKpO4iu9ARoE7EhFW9DZty8kNkYH_6Yq0/s1600/20170117115621.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDhJXLdj2ZUPK0XtIT2rcrTwZ7z3ekJhD3L8X_tLX78hwYhPce-2XachHnnRRsAAX9urrjbQZhVUnRQAgzREIFFNJeF7CUDVpHyb4x5315J7XKpO4iu9ARoE7EhFW9DZty8kNkYH_6Yq0/s320/20170117115621.gif" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
OR Gate adalah isyarat INPUT yang disusun secara selari dimana salah satu isyarat INPUT boleh mengawal isyarat OUTPUT.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
2. AND Gate</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0RMUPUlcTfUh8_2tjr6O82o8NRyKmIv60nxpChIXfiY7JG2Aud7zAwZz8f9YJRk_gh09ZR6hochYchfkit6NKcoqmJdw7ouVS1VaXpUEO2mnaQ0_0bta2WD_y8sSTVaLv7gkB93LBOD4/s1600/20170117115552.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0RMUPUlcTfUh8_2tjr6O82o8NRyKmIv60nxpChIXfiY7JG2Aud7zAwZz8f9YJRk_gh09ZR6hochYchfkit6NKcoqmJdw7ouVS1VaXpUEO2mnaQ0_0bta2WD_y8sSTVaLv7gkB93LBOD4/s320/20170117115552.gif" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: left;">
AND Gate adalah isyarat INPUT yang disusun secara sesiri dimana kedua-dua atau semua(jika lebih dari dua) isyarat INPUT perlu ON untuk menhasilkan isyarat OUTPUT dalam keadaan ON.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
3. NOT Gate</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRBHJCbW68fgGjEozTlt1i3uBIUOndRWO-sH6bJPd9QeOqrSDjXSqP4EeeGn4hM5TJwGsiA9Z1xa2DlBr4BbC4MLoRmURbY1lbdXrVGVL1xep-EPIZi6Rksri6hcEFf-paSsK9Cf_xras/s1600/20170117115903.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRBHJCbW68fgGjEozTlt1i3uBIUOndRWO-sH6bJPd9QeOqrSDjXSqP4EeeGn4hM5TJwGsiA9Z1xa2DlBr4BbC4MLoRmURbY1lbdXrVGVL1xep-EPIZi6Rksri6hcEFf-paSsK9Cf_xras/s320/20170117115903.gif" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>NOT Gate adalah isyarat INPUT yang menghasilkan isyarat OUTPUT yang berlawanan dengan status INPUT.</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div>
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya. </div>
</div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-54684840079233436462017-01-16T13:04:00.006+08:002017-02-04T16:01:47.070+08:00Basic PLC programming 2<div class="separator" style="clear: both; text-align: left;">
Untuk membuat program plc, berikut adalah litar kawalan asas yang biasa digunakan.</div>
<div class="separator" style="clear: both; text-align: center;">
1. Direct control</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisOck985IuNzwjFGZVHbCeVPpSPwc6Yr1HhZME0M4JAYj_5OmQyHms4DDEPoN5RxkNjCfb3cLdGSRjoYmptprgHECRzE1Kfg3PCuWbGfVDqPOORxgnCnh7_acAeVkn2zS-LXyU0jmPz-0/s1600/20170115171215.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisOck985IuNzwjFGZVHbCeVPpSPwc6Yr1HhZME0M4JAYj_5OmQyHms4DDEPoN5RxkNjCfb3cLdGSRjoYmptprgHECRzE1Kfg3PCuWbGfVDqPOORxgnCnh7_acAeVkn2zS-LXyU0jmPz-0/s320/20170115171215.gif" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Litar ini biasa digunakan untuk mengawal isyarat output secara terus dari isyarat input.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
2. Indirect control</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOg3RfF1_DVHnxwOjvqOlf5o1F93BXBHIODCMf0Z-SA9_gDReHGvqbVbnbiji1dty4joubnqUavdivORPK5VRkXYXPazBmk7t-oZ2eey9ipipbhEEzyTWBioOF2nrfsLquWjn3NgsYkzU/s1600/20170115171304.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOg3RfF1_DVHnxwOjvqOlf5o1F93BXBHIODCMf0Z-SA9_gDReHGvqbVbnbiji1dty4joubnqUavdivORPK5VRkXYXPazBmk7t-oZ2eey9ipipbhEEzyTWBioOF2nrfsLquWjn3NgsYkzU/s320/20170115171304.gif" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Litar ini biasa digunakan untuk mengawal isyarat output menggunakan internal relay dari isyarat input</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
3. Timer control</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH0SSfiGIFEnRoyBHq0yYwvCNMTOjgzNPsQN5msH9pmq2tH1BCIrWbZ2kZGUca3qix-mRMl9ip8B7vHIvQ8iLkivTUoZBoo6BwBpcj7PWj0ju9CzCKaP-A_uXMzUkGFGLEuhfgFmsWIEQ/s1600/20170116110603.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH0SSfiGIFEnRoyBHq0yYwvCNMTOjgzNPsQN5msH9pmq2tH1BCIrWbZ2kZGUca3qix-mRMl9ip8B7vHIvQ8iLkivTUoZBoo6BwBpcj7PWj0ju9CzCKaP-A_uXMzUkGFGLEuhfgFmsWIEQ/s320/20170116110603.gif" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Litar ini biasa digunakan untuk mengawal isyarat output yang mempunyai pemasa(timer) yang telah ditetapkan dari isyarat input. Isyarat output akan ON setelah pemasa mencapai masa yang telah ditetapkan apabila isyarat input ON.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
4. Latch control</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgymXylLLkyzjWw4mt_1pDnXYp36pf9_Vmy51RIsgmJ5C0Ni8f_eYpcUsTyxlPx6KatWXE7LaUymCk7NAmJUX07qVkFUE36Eeb8DaYd_vEBd59Rqn1XCvLC60rgeAQHu9PzaQ31KuLz5cs/s1600/20170116111201.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgymXylLLkyzjWw4mt_1pDnXYp36pf9_Vmy51RIsgmJ5C0Ni8f_eYpcUsTyxlPx6KatWXE7LaUymCk7NAmJUX07qVkFUE36Eeb8DaYd_vEBd59Rqn1XCvLC60rgeAQHu9PzaQ31KuLz5cs/s320/20170116111201.gif" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Litar ini biasa digunakan untuk mengawal isyarat output secara terus dari isyarat input dan terus ON walaupun isyarat input telah OFF.</div>
<br />
<br />
<br />
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya. </div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-86602743911645955012017-01-13T18:03:00.000+08:002020-05-29T12:55:45.089+08:00Litar Power Driver LED<div class="separator" style="clear: both; text-align: left;">
Schematic:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeK65WcCYgQwX__7fuqgXU_0HuhUv0SV1pFVtrQqEbPHLp8uIXkzF1dj15SyqrASCutr1VVa9TJTFjqu5zCuFZcLNawnf9WpDigpDxb8ITMInuKVk-h8f189HLi1v1Y_bo5nZ7APooum0/s1600/LED+dRIVER.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeK65WcCYgQwX__7fuqgXU_0HuhUv0SV1pFVtrQqEbPHLp8uIXkzF1dj15SyqrASCutr1VVa9TJTFjqu5zCuFZcLNawnf9WpDigpDxb8ITMInuKVk-h8f189HLi1v1Y_bo5nZ7APooum0/s320/LED+dRIVER.jpg" width="247" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<br />
credit: Carlos Asumo<br />
<div>
<br />
<br />
<br />
<br />
<br />
<div style="text-align: center;">
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
</div>
</div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-52324370921610752942016-06-05T22:16:00.001+08:002020-05-29T13:34:09.123+08:00PS2 Keyboard Kod Morse Encoder<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/tUfbt3MycbE/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/tUfbt3MycbE?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUTVJk60tqLlr7I5141UbjbsT0Y8V1DI7Y1rKpyh59-Vm9fafi_DhuIpQRwvEXfJKqo4R4i7TjIHnHFFuGgD4gqXxwgV7yw2_O3TpIsL6acakGMzOKox2-B3E71ohe7RoXCeX4YxRQp7U/s1600/20160602_131646.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUTVJk60tqLlr7I5141UbjbsT0Y8V1DI7Y1rKpyh59-Vm9fafi_DhuIpQRwvEXfJKqo4R4i7TjIHnHFFuGgD4gqXxwgV7yw2_O3TpIsL6acakGMzOKox2-B3E71ohe7RoXCeX4YxRQp7U/s400/20160602_131646.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDm-5H2jIR9FvNsrgfCx8D769hO1nSj5z7MBpgx6UMCYA-2XIFPy9-iia6Wg2nIsEZk70FELPjUdlSvQU2ZNNjn-y0_00ViHbemAte84OP3Xe0kkI5TAY_s_GoBsNyN70wHbYFonw9Fow/s1600/20160602_131619.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDm-5H2jIR9FvNsrgfCx8D769hO1nSj5z7MBpgx6UMCYA-2XIFPy9-iia6Wg2nIsEZk70FELPjUdlSvQU2ZNNjn-y0_00ViHbemAte84OP3Xe0kkI5TAY_s_GoBsNyN70wHbYFonw9Fow/s400/20160602_131619.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv1ueANJphQO2Uttu_x1SouVhfLm6pwGDUq8irAIlJ1kwXkAKTKWNxzlgInjfBNZw1SXdGY0B-VWLXMw4AqMOe6AidSp87jrUPyeyYJitiy1SEpcAYJg4w1PEliCUi0f8YqbOg4tUN4hk/s1600/20160602_131632.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv1ueANJphQO2Uttu_x1SouVhfLm6pwGDUq8irAIlJ1kwXkAKTKWNxzlgInjfBNZw1SXdGY0B-VWLXMw4AqMOe6AidSp87jrUPyeyYJitiy1SEpcAYJg4w1PEliCUi0f8YqbOg4tUN4hk/s400/20160602_131632.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<br />
<br />
<br />
<br />
Schematic:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzg2HbOIjJsagBdJCvhAyB6HxQ3npk1EFK3aUZGCKGQ8pXp3DKqwN12BhrS2NWhtT1e7wCJXHi_ELQac4yTJNon1w1rJZLQZKq17wsOjXUUa2mk0exzqhZ4sWESoY3dlfev6zfGKF3xN4/s1600/ps2+kb.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzg2HbOIjJsagBdJCvhAyB6HxQ3npk1EFK3aUZGCKGQ8pXp3DKqwN12BhrS2NWhtT1e7wCJXHi_ELQac4yTJNon1w1rJZLQZKq17wsOjXUUa2mk0exzqhZ4sWESoY3dlfev6zfGKF3xN4/s400/ps2+kb.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Cara penggunaan :</div>
<div class="separator" style="clear: both; text-align: left;">
1. Butang anak panah ke atas = Increase WPM</div>
<div class="separator" style="clear: both; text-align: left;">
2. Butang anak panah kebawah = Decrease WPM</div>
<div class="separator" style="clear: both; text-align: left;">
3. Butang anak panah kekiri = LCD backlight OFF</div>
<div class="separator" style="clear: both; text-align: left;">
4. Butang anak panah kekanan = LCD backlight ON</div>
<div class="separator" style="clear: both; text-align: left;">
5. Butang F11 = Beep Mode</div>
<div class="separator" style="clear: both; text-align: left;">
6. Butang F12 = Keyer Mode</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Macro Function</div>
<div class="separator" style="clear: both; text-align: left;">
Berfungsi untuk menyimpan sebarang frasa untuk digunakan secara cepat.</div>
<div class="separator" style="clear: both; text-align: left;">
1. Tekan butang INSERT</div>
<div class="separator" style="clear: both; text-align: left;">
2. Pilih shortcut key (F1 hingga F5)</div>
<div class="separator" style="clear: both; text-align: left;">
3. Taip frasa yang hendak disimpan.</div>
<div class="separator" style="clear: both; text-align: left;">
4. Tekan butang END</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Untuk playback frasa, tekan shortcut key (F1, F2, F3, F4 atau F5).</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<br />
<br />
Credit To : KW5GP<br />
<br />
<div style="text-align: center;">
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com7tag:blogger.com,1999:blog-6865256488729172924.post-23546470117346083332016-03-07T10:16:00.002+08:002020-05-29T12:59:36.425+08:00Homebrew Rig Programming CableDengan mudah dan murahnya, kita boleh membuat programming cable dengan kos serendah RM30.<br />
<br />
Komponen utama:<br />
1. USB-UART Converter<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi_FGtEd0-ZhBc3XYmDk4XHi3Lg8P35-1erRArtuuU6kgJqN0Z8DhyphenhyphendPbhfTT5z6q0T7oRjaFs6_A7ayJ6dmBb8FX0gVuW9MEvP1eGnt4_rlUMjrJ0w8M4VOviU02XohFe5xxFZFNOMOw/s1600/PL2303-USB-to-UART-600x570.jpg" imageanchor="1"><img border="0" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi_FGtEd0-ZhBc3XYmDk4XHi3Lg8P35-1erRArtuuU6kgJqN0Z8DhyphenhyphendPbhfTT5z6q0T7oRjaFs6_A7ayJ6dmBb8FX0gVuW9MEvP1eGnt4_rlUMjrJ0w8M4VOviU02XohFe5xxFZFNOMOw/s320/PL2303-USB-to-UART-600x570.jpg" width="320" /></a><br />
<br />
<a href="http://www.cytron.com.my/p-uc00b" target="_blank">usb-uart converter</a><br />
<br />
2. 3.5 Stereo Jack Plug<br />
<br />
3. 2.5 Stereo Jack Plug<br />
<br />
4. 3.5 4 pole jack plug<br />
<br />
<br />
Type 1<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhieHh-qAKH3h-yfiSfEvX1BKY5cuHth9-_t2TWdVqSbK46gew2o-JwTCEQpyTpqx5_RrEcKIHJQQJjwiXy80tlRZbCzgqbzTrORaU4zTRK4SRSt_FfT-TcKlJv_kyW5XxFFAd854DuSQE/s1600/usb+uart+1.jpg" imageanchor="1"><img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhieHh-qAKH3h-yfiSfEvX1BKY5cuHth9-_t2TWdVqSbK46gew2o-JwTCEQpyTpqx5_RrEcKIHJQQJjwiXy80tlRZbCzgqbzTrORaU4zTRK4SRSt_FfT-TcKlJv_kyW5XxFFAd854DuSQE/s400/usb+uart+1.jpg" width="400" /></a><br />
<br />
<br />
Type 2<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0k66gTw2NFAQINZlSOV2s4LmdA-4DavopGw3TcO669IctTcUdeH-ZQT4v1ZKKnJwGoyiEoplp_7GjquzyLn2l_pZrPIzhW3fId5xnWHn3EXlGL6KWbf6ME8Vh8GaUsGylZTyDWQJoziY/s1600/usb+uart+2.jpg" imageanchor="1"><img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0k66gTw2NFAQINZlSOV2s4LmdA-4DavopGw3TcO669IctTcUdeH-ZQT4v1ZKKnJwGoyiEoplp_7GjquzyLn2l_pZrPIzhW3fId5xnWHn3EXlGL6KWbf6ME8Vh8GaUsGylZTyDWQJoziY/s400/usb+uart+2.jpg" width="400" /></a><br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-74747904407352194362016-02-14T23:01:00.002+08:002020-05-29T12:59:48.581+08:00Mengubahsuai PC Power Supply menjadi Work Bench Power Supply.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvKw3LmdUnz0XHoz-oE6-6d068O0C6CpC_i0IdJlkLWVbIa285hiq_ENXkD45XlV4cvk_wONAtfpquRmFAdGsxiX6a5ef7l8QVZcg57fNqMnRnatwTwgzkjGMBlB3eodHu5eh1Pbc5pd8/s1600/20160213_144251.jpg" imageanchor="1"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvKw3LmdUnz0XHoz-oE6-6d068O0C6CpC_i0IdJlkLWVbIa285hiq_ENXkD45XlV4cvk_wONAtfpquRmFAdGsxiX6a5ef7l8QVZcg57fNqMnRnatwTwgzkjGMBlB3eodHu5eh1Pbc5pd8/s400/20160213_144251.jpg" width="300" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-nUd9ujaQA3j7AJGYXHb6yG0M4PLCwbe4bCkaksiA2st-Yy5rgweOK5cwkIndweQZs243vxjnOw188rWPQKFw8T_6WcewJQbRC8oy6Mdx6qURZ974A2KUrwgGJiG9IQJT6Afs3Ix0Tsw/s1600/psu.jpg" imageanchor="1"><img border="0" height="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-nUd9ujaQA3j7AJGYXHb6yG0M4PLCwbe4bCkaksiA2st-Yy5rgweOK5cwkIndweQZs243vxjnOw188rWPQKFw8T_6WcewJQbRC8oy6Mdx6qURZ974A2KUrwgGJiG9IQJT6Afs3Ix0Tsw/s320/psu.jpg" width="320" /></a><br />
<br />
Langkah-langkah pengubahsuaian.<br />
<br />
<ol>
<li>Uji PC power supply yang mahu di ubahsuai. ON plug 240VAC dan buat wayar jumper soket PSU pada wayar HIJAU dan HITAM. Kipas penyejuk PSU akan berpusing. Periksa volt pada wayar berwarna KUNING dan HITAM menggunakan multimeter, pastikan bacaan berada pada 12VDC. OFF semula dan buka semua bekalan kuasa.</li>
<li>Buka casing PSU. Potong semua soket yang digunakan untuk PC. Asingkan semua wayar mengikut warna. Kod warna adalah berdasarkan gambarajah diatas.</li>
<li>Sambungkan wayar HIJAU dan HITAM pada satu ROCKER SWITCH. Ini berfungsi sebagai suis PSU anda nanti.</li>
<li>Satukan semua wayar mengikut warna dan sambungkan pada terminal wayar mengikut volt masing-masing.</li>
<li>Finalize PSU anda mengikut kreativiti masing-masing. SIAP!!</li>
</ol>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
</div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-85832969620399673012016-01-14T12:08:00.003+08:002020-05-29T13:00:01.860+08:00RE PROGRAMMING TYT UVF1 HANDY<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNoLAXJob6Vn8Oe0DMeSEmoBv6o_TbnCI4lhUKiQaVrLXVxVcxf_kpu_fGA3gtMxCkiSkpCyamCmPNkkI1bnzBzxxQ6wT_5kA72u385tzMU0AP3hkJmiG1-h5xc66Uam6BPfmpvemvoeU/s1600/TH-UVF1_2+TONE.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNoLAXJob6Vn8Oe0DMeSEmoBv6o_TbnCI4lhUKiQaVrLXVxVcxf_kpu_fGA3gtMxCkiSkpCyamCmPNkkI1bnzBzxxQ6wT_5kA72u385tzMU0AP3hkJmiG1-h5xc66Uam6BPfmpvemvoeU/s200/TH-UVF1_2+TONE.jpg" width="175" /></a></div>
<br />
<br />
<br />
<br />
Re-program TYT UVF1.<br />
<br />
1. 'Off'kan handy tekan menu sambil ON.<br />
2. Keluar RESET? pada screen,tekan MENU, tekan down arrow sampai keluar BAND, tekan menu.<br />
3. Masuk password 5858.<br />
4. kat band 1,masuk range VHF.<br />
5. kat band 2, masuk range UHF.<br />
6. Band 3 dgn 4 tidak perlu ubah.<br />
Begitulah seadanya, haa..mcm tu... copy tak?hehe..<br />
<br />
<br />
Reset semua setting ke default<br />
1. 'Off'kan handy, tekan menu sambil ON.<br />
2. Keluar RESET? pada screen, tekan MENU, tekan down arrow sampai keluar VFO, tekan menu.<br />
3. Masuk password 5858.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiAuxdHigxzV-tUoY70gWrxxcn4aj7eZwGszCMqYsyew3HkjD7FNgUNaOEwI1_25saLYxqF_Pxk5AN5vQwUVWkWA6nIOuWNOngd1YaBwAHmQaYrrx2Qtfz24dz6TTZ7Y76kg8rn22gCrs/s1600/cheap+handheld+two+way+radio+TYT+TH-F8+walkie+talkie.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiAuxdHigxzV-tUoY70gWrxxcn4aj7eZwGszCMqYsyew3HkjD7FNgUNaOEwI1_25saLYxqF_Pxk5AN5vQwUVWkWA6nIOuWNOngd1YaBwAHmQaYrrx2Qtfz24dz6TTZ7Y76kg8rn22gCrs/s320/cheap+handheld+two+way+radio+TYT+TH-F8+walkie+talkie.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-20755771419577045962016-01-03T01:30:00.001+08:002020-05-29T13:00:15.789+08:00Projek kawalan servo menggunakan Cuteduino<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/xxWLL9Sn7ow/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/xxWLL9Sn7ow?feature=player_embedded" width="320"></iframe></div>
<br />
Schematic:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOUVRXHDH5zuDkvm22FjSbnVm4qnS3NRUV3Z4mfM_yK2dTVQbcRx8GC-rQPTftOXqc4XWII21gTi0bqKQsv8lSChEuc13qvhSPhnX3kJlRZPx4CqKKyaYhQHRowRPgW40082P2YRN4q-c/s1600/Cuteduino+servo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOUVRXHDH5zuDkvm22FjSbnVm4qnS3NRUV3Z4mfM_yK2dTVQbcRx8GC-rQPTftOXqc4XWII21gTi0bqKQsv8lSChEuc13qvhSPhnX3kJlRZPx4CqKKyaYhQHRowRPgW40082P2YRN4q-c/s400/Cuteduino+servo.jpg" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
Coding:<br />
<span style="color: red;"><a href="https://gist.github.com/protongt/a266731f8c2b8d0dfdca" target="_blank">GitHub</a></span><br />
<br />
<br />
<br />
<div style="text-align: center;">
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
</div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com2tag:blogger.com,1999:blog-6865256488729172924.post-72330652947777059302015-12-31T00:48:00.000+08:002017-02-04T16:01:09.024+08:00Projek strobe light menggunakan cuteduino<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/VOsU-Pk4OxM/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/VOsU-Pk4OxM?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
Schematic :<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA_8JnFeECpNtvPisIFy1y7tVQvUj2aGtDL6P8s-Z2psLAkPZ_2485s37Tc8dVeukraIDcsmCzlmjX9KcJE3i2CMOhmgePaLPktd5x4iVzvW3cHBtkZLzqQ5s6sY2WhyphenhyphenS41Q9JE4cUWkc/s1600/strobe+cuteduino.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA_8JnFeECpNtvPisIFy1y7tVQvUj2aGtDL6P8s-Z2psLAkPZ_2485s37Tc8dVeukraIDcsmCzlmjX9KcJE3i2CMOhmgePaLPktd5x4iVzvW3cHBtkZLzqQ5s6sY2WhyphenhyphenS41Q9JE4cUWkc/s400/strobe+cuteduino.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Coding :</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://gist.github.com/protongt/703633bd53788fb3c3a1" target="_blank">Git Hub</a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya. </div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-14457316597857494082015-12-20T20:47:00.004+08:002020-05-29T13:18:04.663+08:00YOUTUBE.COM ChannelSila subscribe channel youtube saya untuk memudahkan anda mengikuti projek dan tutorial terkini dari saya.<br />
<div>
<br /></div>
<div>
<div style="text-align: center;">
<span style="font-size: large;"><a href="https://www.youtube.com/user/protongt?sub_confirmation=1" target="_blank">9W2NFE Youtube Channel</a></span></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUUtixzv6hOGvoO2D2agMZg6HLFIlt_jqCdBm8kAyky0e2w103VsmVC3njlW58CV1Itg5uK2lEeEiYYFNL5jhL6rnzm_Tn9WQBzL_yCLuu4u88qVnDJlSuIKcLNHEMCQWd8UnedP9BNVg/s1600/Black+and+Yellow+Edgy+Maximalism+Fitness+Collection+YouTube+Channel+Art+%25281%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUUtixzv6hOGvoO2D2agMZg6HLFIlt_jqCdBm8kAyky0e2w103VsmVC3njlW58CV1Itg5uK2lEeEiYYFNL5jhL6rnzm_Tn9WQBzL_yCLuu4u88qVnDJlSuIKcLNHEMCQWd8UnedP9BNVg/s640/Black+and+Yellow+Edgy+Maximalism+Fitness+Collection+YouTube+Channel+Art+%25281%2529.png" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya.<br />
<span style="text-align: start;">Whatsapp </span><a href="http://mafes.wassap.my/" target="_blank">MAFeS One Stop Center</a></div>
</div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-9016484419677569632015-12-13T15:18:00.001+08:002020-05-13T16:31:53.159+08:00Tutorial program Arduino Pro Mini menggunakan FTDI USB to Serial Converter<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2ZZYHEjtEsp7HqHLs9YeBQrAvfiUH33vu87DAph2-l4UjVd0JAu2Bc0f-VASOISnAhDE66jRH8F0sdpj6mxHrLvy-V6n7zyOiJYIycMt4J-Xg_9xzYtSDQysg1BejIw5w9eK1Y9qCHVY/s1600/20151212_220627.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2ZZYHEjtEsp7HqHLs9YeBQrAvfiUH33vu87DAph2-l4UjVd0JAu2Bc0f-VASOISnAhDE66jRH8F0sdpj6mxHrLvy-V6n7zyOiJYIycMt4J-Xg_9xzYtSDQysg1BejIw5w9eK1Y9qCHVY/s400/20151212_220627.jpg" width="400" /></a></div>
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhtXws3L8mJMxgGKvc3DU1aj8vRBcH4jtsX7pwFGmryAAk83LPVkskhxE222v8DzvHqwFuRoUav6YUQUcRcOPkiKDcEmi0kqjU10Jn7u7FIccTYL5GsHTOC55fxAPsu4lm-m24zsoQmQw/s1600/ftdi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhtXws3L8mJMxgGKvc3DU1aj8vRBcH4jtsX7pwFGmryAAk83LPVkskhxE222v8DzvHqwFuRoUav6YUQUcRcOPkiKDcEmi0kqjU10Jn7u7FIccTYL5GsHTOC55fxAPsu4lm-m24zsoQmQw/s400/ftdi.jpg" width="400" /></a></div>
<br />
Rajah penyambungan port.<br />
<br />
| VCC - VCC (4) |<br />
| GND - GND (5) |<br />
FTDI | TXD - RX (3) | PRO-MINI<br />
| RXD - TX (2) |<br />
| DTR - GRN (1) |<br />
| - BLK (6) | NO USE<br />
<br />
<br />
Langkah download coding kedalam Arduino Pro Mini.<br />
1. Buka Arduino IDE.<br />
2. Pilih COM Port FTDI anda.<br />
3. Pilih AVR ISP pada Programmer.<br />
4. Pilih jenis board Arduino Pro Mini.<br />
5. Pilih jenis processor Arduino Pro Mini (Kebanyakan menggunakan ATmega328P, 5V 16MHz)<br />
5. Tekan UPLOAD.<br />
<br />
Selesai.<br />
<br />
<br />
<br />
<br />
<div style="text-align: center;">
PENAFIAN : EAWAN, 9W2NFE sama sekali tidak akan bertanggungjawab diatas sebarang ketidaktepatan maklumat yang didapati dilaman blog ini dan segala kemungkinan yang timbul disebabkan ketidaktepatan maklumat tersebut.</div>
<div style="text-align: center;">
Segala pengambilan maklumat dan ujikaji yang dilakukan melalui laman blog ini adalah diatas risiko sendiri</div>
<div style="text-align: center;">
Sebarang kemuskilan atau pertanyaan boleh hubungi saya. </div>
Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com1tag:blogger.com,1999:blog-6865256488729172924.post-80205766400525201062015-12-11T00:37:00.001+08:002015-12-13T15:23:53.367+08:00Pemberitahuan.<br />
Kebanyakkan isi kandungan blog ini masih dalam draf. Harap bersabar. In Sha Allah saya akan kongsikan apa yg saya tahu...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpG2Lap4rTvC1n6fsjEf9tnWyczdV9_r0vlE-tKGwo-37uPJm94BpS5i-XabwH_vZKm255ib6rs0JafXXOpzy-690fxhyxyCH5PCDRhPH2WNx1jfVK7hq5Xj4JkvwVGDxwKDsZcaAmO1c/s1600/WorkInProgress.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpG2Lap4rTvC1n6fsjEf9tnWyczdV9_r0vlE-tKGwo-37uPJm94BpS5i-XabwH_vZKm255ib6rs0JafXXOpzy-690fxhyxyCH5PCDRhPH2WNx1jfVK7hq5Xj4JkvwVGDxwKDsZcaAmO1c/s400/WorkInProgress.jpg" width="400" /></a></div>
<br />Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0tag:blogger.com,1999:blog-6865256488729172924.post-28349182695854843222015-12-03T13:33:00.002+08:002015-12-03T13:33:41.307+08:00Salam PerkenalanSalam perkenalan buat pembaca semua. Saya Eawan memegang callsign 9W2NFE, base di Serendah, Selangor.<br />
Semoga dengan adanya blog ini dapat kita berkongsi serba sedikit ilmu teknologi yang saya ada.<br />
In Sha Allah dengan adanya blog ini, dapat saya mendokumentasikan projek-projek yang telah dan akan saya siapkan.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3dYgTkugwKQqKTzsDFEmStyXDTL9Vtxo-KyX86FhEL_-t6bg2lKIzZdcQX0Llawfog1A9RxaIhPV_MiqYmD72fu2XTEqB8WqD8WZmq4V7sA5DIoI02qA-N4nnV45GXaNEij_UdIN8crw/s1600/Arduino-uno-perspective-transparent.png" imageanchor="1"><img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3dYgTkugwKQqKTzsDFEmStyXDTL9Vtxo-KyX86FhEL_-t6bg2lKIzZdcQX0Llawfog1A9RxaIhPV_MiqYmD72fu2XTEqB8WqD8WZmq4V7sA5DIoI02qA-N4nnV45GXaNEij_UdIN8crw/s200/Arduino-uno-perspective-transparent.png" width="200" /></a><br />
Arduino : Micro Controller yang mudah dipelajari oleh semua orang.<br />
<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPskBJO5CPoCCzRtjIxHAG-t_hkLiAIc2tD7czqtz3-JnOBiJ75jWfjOp-bpB_kDJogA67eP7P2AFjCrNbjeNwuv6U1TZRjKsqhTeXbe_T3nKDGpOIBFxXhdgjQZujnKA2MIid3IXt0fM/s1600/Q-PLC.jpg" imageanchor="1"><img border="0" height="110" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPskBJO5CPoCCzRtjIxHAG-t_hkLiAIc2tD7czqtz3-JnOBiJ75jWfjOp-bpB_kDJogA67eP7P2AFjCrNbjeNwuv6U1TZRjKsqhTeXbe_T3nKDGpOIBFxXhdgjQZujnKA2MIid3IXt0fM/s200/Q-PLC.jpg" width="200" /></a><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc_wIOu_T6CnDQ43vrKCugaRsA9pj41Va1A8AzRhMebPezRqXF19n3jPrfIpmz0F2Swu-o66KTXcoDxPG7Z9GJis0PzJwaWCqRod59zY8YBth4dRkby9IEd-V6FzTgZOj-pWnHARixjXA/s1600/lineup2.jpg" imageanchor="1"><img border="0" height="85" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc_wIOu_T6CnDQ43vrKCugaRsA9pj41Va1A8AzRhMebPezRqXF19n3jPrfIpmz0F2Swu-o66KTXcoDxPG7Z9GJis0PzJwaWCqRod59zY8YBth4dRkby9IEd-V6FzTgZOj-pWnHARixjXA/s200/lineup2.jpg" width="200" /></a><br />
<br />
PLC dan Graphic Operation Terminal<br />
- Pengawalatur mesin automasi yang biasa digunakan didalam industri<br />
<br />
<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ6jXRjOc3bJgWmEsvT7hyMg92_XrXjCn23eq1fbgcC8xsb87LbYcb_xlqgSE8e6cnlp5cnl31h2_wiAHWD_VF7S2DEkpRp2Uf3O39xAMnBIR2fqWadWS8JTtos-XZAsEq34lctbGZvDQ/s1600/cheap+handheld+two+way+radio+TYT+TH-F8+walkie+talkie.jpg" imageanchor="1"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ6jXRjOc3bJgWmEsvT7hyMg92_XrXjCn23eq1fbgcC8xsb87LbYcb_xlqgSE8e6cnlp5cnl31h2_wiAHWD_VF7S2DEkpRp2Uf3O39xAMnBIR2fqWadWS8JTtos-XZAsEq34lctbGZvDQ/s200/cheap+handheld+two+way+radio+TYT+TH-F8+walkie+talkie.jpg" width="200" /></a><br />
Radio Amatur : Perhubungan dua hala yang menggalakkan penggunanya melakukan aktiviti kajian dan penambahbaikkan.Eawanhttp://www.blogger.com/profile/03272633019896887792noreply@blogger.com0