TOPPERSコンテスト受賞作品紹介(8)第四回(2014)アプリケーション開発部門 銀賞Arduino on TOPPERS プロトタイプ環境 石岡之也（個人） 

TOPPERS「活用アイデア」・「アプリケーション開発」コンテスト
は、2011年から毎年実施されています。
https://www.toppers.jp/contest.html

「アプケーション開発」は、ソースコードの公開を前提としています。
「活用アイデア」でも、その後実現したソースコードなどもある。探しながら紹介。

なお、この記事は、TOPPERSプロジェクトの公式見解ではなく、
小川清　の　技術者個人の考えに基づいています。

# 目的(purpose)
TOPPERS開発アイデア・アプリケーション開発コンテスト受賞作品には、良質な算譜、技術的に崇高な志向、目的を達成するための意思などが感じられる。広く、source codeを表示して紹介し、次の応募作品を促す。
# 成果(outcome)
応募作品の算譜を眺めると、その技術者の得意分野や技法を感じることができる。応募作品のソースコードを使ってみようという気になる。ソースコードを一度コンパイルしたくなる。自分も良い作品を作ろうという気になる。

# TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介(8)第四回(2014)アプリケーション開発部門 銀賞
## Arduino on TOPPERS プロトタイプ環境 石岡之也（個人） 
 
## 応募資料(application material)等
 コンテスト応募資料 
https://www.toppers.jp/docs/contest/2014/ishioka.pdf

### Download
ソースコード 
https://www.toppers.jp/docs/contest/2014/src_ishioka.zip

開発で対象としたグラフィックLCDのピン配置 http://www.aitendo.com/product/9482

キャラクタLCDは、下記の「Arduino はやみ表」内の「キャラクタ液晶ディスプレイ」 に記載されている配線を利用。 
http://k-tai.impress.co.jp/img/ktw/docs/369/056/html/STPblog2010-05-24_IT1.jpg.html
回路図は別紙 FM3_BF618T_topopers.pdf を参照ください。

FM3 ボードを使用。Interface 誌 2012 年 7 月号付録 DVD に収録されて いる松浦商事・松浦さんが作成したパッチ適用
 asp_cqbbel_mp3.zip

Arduino IDE のプログラムは以下からダウンロード。
http://downloads.arduino.cc/arduino-1.5.2-windows.zip

「マンデルブロ集合の表示プログラムは佐伯英子技術士事務所のサンプルプログラムを参考に作成しています。」
http://saeki-ce.xsrv.jp/C_src/mandelbrot01.html
「グラフィックLCDの制御ライブラリに同梱しているフォントデータの権利などは以下の通りです。」
//2014 written by mituhiromatuura
//pattern data generated from Shinonome-font-12-kanjic BITMAP (Public Domain) http://openlab.ring.gr.jp/efont/shinonome/
「ツール類のダウンロード元」
・STBEE(Strawberry Linux)簡易パッケージ https://www.toppers.jp/download.cgi/asp_stbee_gcc-20120310.tar.gz
「Toppers/ASP 用 Linux クロスコンパイラ」 http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

「ダウンロードする版数は、Arduino IDE に同梱されている 2010q1-188 for ARM EABI。 ・Arduino IDE プログラム」
http://downloads.arduino.cc/arduino-1.5.2-windows.zip
「グラフィックLCD用ライブラリ」
https://github.com/Seeed-Studio/TFT_Touch_Shield_V2/

# 算譜(source code)

```c:arduino_toppers1.cpp
#line 1 "Arduino_Toppers1.ino"
#include <Toppers.h>
#include "Arduino.h"
void  cyc_handler( void );
void  sub_task( void );
void setup();
void loop();
#line 2
Toppers rtos;

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

/* Blink without Delay
 
 Turns on and off a light emitting diode(LED) connected to a digital  
 pin, without using the delay() function.  This means that other code
 can run at the same time without being interrupted by the LED code.
 
 The circuit:
 * LED attached from pin 13 to ground.
 * Note: on most Arduinos, there is already an LED on the board
 that's attached to pin 13, so no hardware is needed for this example.
 
 
 created 2005
 by David A. Mellis
 modified 8 Feb 2010
 by Paul Stoffregen
 
 This example code is in the public domain.

 
 http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
 */

// constants won't change. Used here to 
// set pin numbers:
const int ledPinOnboard =  13;      // the number of the LED pin
const int swPinOnboard  =  16;      // the number of the Push button pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated

long switch_counter = 0 ;

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 500;           // interval at which to blink (milliseconds)

int  cyc_flag ;
char  cyc_char ;

void  cyc_handler( void )
{
    if( cyc_flag == 0 ) {
        cyc_flag = 1 ;
        cyc_char = '#' ;
    } else {
        cyc_flag = 0 ;
        cyc_char = ' ' ;
    }
}


void  sub_task( void )
{
    while( 1 ) {
        lcd.setCursor( 15, 0 ) ;
        lcd.print( &cyc_char );
        delay( 200 ) ;
    }
}

void setup() {

  // set the digital pin as output:
  // pinMode(ledPinOnboard, OUTPUT);
  pinMode(swPinOnboard, INPUT ) ;

    lcd.begin(16, 2);
    lcd.setCursor( 3, 0 ) ;
    lcd.print("Hello");
    lcd.setCursor( 4, 1 ) ;
    lcd.print("Arduino!");

    cyc_flag = 0 ;
    cyc_char = ' ' ;
    rtos.sta_tsk( (void *)sub_task ) ;
    rtos.sta_cyc( (void *)cyc_handler ) ;
}


void loop()
{
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the 
  // difference between the current time and last time you blinked 
  // the LED is bigger than the interval at which you want to 
  // blink the LED.
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // digitalWrite(ledPinOnboard, (switch_counter>>0)&0x01);
    if( (switch_counter & 0x01) != 0 ) {
      lcd.setCursor( 14, 0 ) ;
      lcd.print("*");
    } else {
      lcd.setCursor( 14, 0 ) ;
      lcd.print(" ");
    }
    switch_counter++ ;
  }
}


```

# 参考資料(reference)
「TOPPERS活用アイデア・アプリケーション開発コンテスト受賞作品紹介」まとめ
https://qiita.com/kaizen_nagoya/items/72b882d96b2841f25faf

TOPPERS活用アイデア・アプリケーション開発コンテストを振り返る
https://researchmap.jp/joxkbxlck-1778110/
「応募すると何が嬉しい」TOPPERS活用アイデア・ アプリケーション開発コンテスト
https://www.slideshare.net/kaizenjapan/ss-78528931

「TOPPERS活用アイデア・アプリケーション開発コンテスト」への道
https://researchmap.jp/jovr40j3b-1778110/?block_id=1778110&active_action=journal_view_main_detail&post_id=38687&comment_flag=1

# 文書履歴(document history)
ver. 0.10 初稿 20180623
ver. 0.11 誤植訂正 20200720
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.