プログラムを貼ってみる実験したけど、もうどうにもならない。どうすればいいの???(失敗

#include <Time.h>
#include <TimeLib.h>

 

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>

// bit set / clear
#ifndef cbi
#define cbi(PORT, BIT) (_SFR_BYTE(PORT) &= ~_BV(BIT))
#endif
#ifndef sbi
#define sbi(PORT, BIT) (_SFR_BYTE(PORT) |= _BV(BIT))
#endif


// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

unsigned int localPort = 8888; // local port to listen for UDP packets

char timeServer = "time.nist.gov"; // time.nist.gov NTP server

const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message

byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets

// A UDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

byte timecode[60];
unsigned long lastNTPTime = 0;

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

// start Ethernet and UDP
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
for (;;)
;
}
Udp.begin(localPort);
NTPSetTime();
setupTimeCode();
}


void loop()
{
int wait_start = second();
while (wait_start == second()); // wait until time is corrected
unsigned long startTime = millis();

// generate 40khz from 3 pin using PWM
pinMode(3, OUTPUT);
digitalWrite(3, LOW);
TCCR2A = _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS20);
OCR2A = F_CPU / 2 / 40000/*hz*/;
OCR2B = OCR2A / 2; /* 50% duty */
sbi(TCCR2A,COM2B1);

// calc signal duration (ms)
int ms = calcTimeCodeDuration();

// wait ms and stop PWM
while (millis() - startTime < ms);
cbi(TCCR2A,COM2B1);

if (millis() - lastNTPTime > 60*60*1000L) {
NTPSetTime();
setupTimeCode();
lastNTPTime = millis();
}
}

// send an NTP request to the time server at the given address
void sendNTPpacket(char* address) {
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
// (see URL above for details on the packets)
packetBuffer[ 0] = 0b11100011; // LI, Version, Mode
packetBuffer[ 1] = 0; // Stratum, or type of clock
packetBuffer[ 2] = 6; // Polling Interval
packetBuffer[ 3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay & Root Dispersion
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;

// all NTP fields have been given values, now
// you can send a packet requesting a timestamp:
Udp.beginPacket(address, 123); //NTP requests are to port 123
Udp.write(packetBuffer, NTP_PACKET_SIZE);
Udp.endPacket();
}

//=========================== NTP ===========================
void NTPSetTime()
{
int packetSize;
do{
sendNTPpacket(timeServer);
Serial.println("Waiting NTP response ...");
delay(1000*5);
packetSize = Udp.parsePacket();
Serial.print("Received packet of size ");
Serial.println(packetSize);
}
while(!packetSize);
Udp.available();
// バッファに受信データを読み込む
Udp.read(packetBuffer, NTP_PACKET_SIZE);

// 時刻情報はパケットの40バイト目からはじまる4バイトのデータ
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);

// NTPタイムスタンプは64ビットの符号無し固定小数点数(整数部32ビット、小数部32ビット)
// 1900年1月1日0時との相対的な差を秒単位で表している
// 小数部は切り捨てて、秒を求めている
unsigned long secsSince1900 = highWord << 16 | lowWord;
Serial.print("Seconds since Jan 1 1900 = " );
Serial.println(secsSince1900);

// NTPタイムスタンプをUNIXタイムに変換する
// UNITタイムは1970年1月1日0時からはじまる
// 1900年から1970年の70年を秒で表すと2208988800秒になる
const unsigned long seventyYears = 2208988800UL;
// NTPタイムスタンプから70年分の秒を引くとUNIXタイムが得られる
unsigned long epoch = secsSince1900 - seventyYears;
Serial.print("Unix time = ");
Serial.println(epoch);

// Timeライブラリに時間を設定(UNIXタイム)
// 日本標準時にあわせるために+9時間しておく
setTime(epoch + (9 * 60 * 60));

Serial.print("JST is ");
Serial.print(year());
Serial.print('/');
Serial.print(month());
Serial.print('/');
Serial.print(day());
Serial.print(' ');
Serial.print(hour());
Serial.print(':');
Serial.print(minute());
Serial.print(':');
Serial.println(second());
Serial.println();

Serial.print("localtime = ");
Serial.println(epoch);
}

//=========================== JJY ===========================

unsigned int calcTimeCodeDuration()
{
int s = second();
if (s == 0)
setupTimeCode();
return timecode[s] * 100;
}

void setupTimeCode()
{
int i;
memset(timecode, 8, sizeof(timecode));

setupTimeCode100(minute(), 0);
timecode[0] = 2;

setupTimeCode100(hour(), 10);

int d = dayOfYear();
setupTimeCode100(d/10, 20);
setupTimeCode100(d%10*10, 30);

int parity1 = 0, parity2 = 0;
for (i = 12; i < 20; i++) parity1 ^= timecode[i] == 5;
for (i = 1; i < 10; i++) parity2 ^= timecode[i] == 5;
timecode[36] = parity1 ? 5 : 8;
timecode[37] = parity2 ? 5 : 8;

setupTimeCode100(year()%100, 40);
for (i = 44; i > 40; i--)
timecode[i] = timecode[i-1];
timecode[40] = 8;

int w = weekday() - 1;
timecode[50] = (w & 4) ? 5 : 8;
timecode[51] = (w & 2) ? 5 : 8;
timecode[52] = (w & 1) ? 5 : 8;
timecode[59] = 2;

/* dump */
for (i = 0; i < 60; i++) {
Serial.print(timecode[i], DEC);
Serial.print(i % 10 == 9 ? "\r\n" : " ");
}
Serial.println();
}

void setupTimeCode100(int m, int i)
{
timecode[i+0] = *1};
time_t t = makeTime(tm);
return (now() - t) / SECS_PER_DAY + 1;
}

*1:m/10) & 8) ? 5 : 8;
timecode[i+1] = ((m/10) & 4) ? 5 : 8;
timecode[i+2] = ((m/10) & 2) ? 5 : 8;
timecode[i+3] = ((m/10) & 1) ? 5 : 8;
timecode[i+4] = 8;
timecode[i+5] = ((m%10) & 8) ? 5 : 8;
timecode[i+6] = ((m%10) & 4) ? 5 : 8;
timecode[i+7] = ((m%10) & 2) ? 5 : 8;
timecode[i+8] = ((m%10) & 1) ? 5 : 8;
timecode[i+9] = 2;
}

int dayOfYear()
{
tmElements_t tm = {0, 0, 0, 0, 1, 1, CalendarYrToTm(year(

GEORGIAのジャパンクラフトマン

 

ブラックコーヒー

本来好きじゃない

いままでずーーっと味が合わないって思ってた

眠気覚ましと太るの気にして、ブラックを選んでいた

でも、この ジャパンクラフトマン は違う

一口飲むだけで、違いが判る

このスッキリした飲み口のブラック

香りがすごく立っていて、とても美味しい!

dentsu-ho.com 

初めて 美味しい って感じたブラックコーヒー

今、このタイミングで新発見するなんて、まだまだ探索不足だって感じた

500mlのソフトペットボトルで¥140円くらい

諦めちゃダメ

諦めないで継続し続ける事が重要だなって感じた

でも新商品が多いから、実際試しきれずに、商品の入れ替えに至っている

仮に気に入っても、出荷量が少ないといつの間にか消滅する商品もあったり

難しいな

Arduinoは超かんたんって感じた(電波リピータのアンテナ編

 

アンテナの作り方を検索

効率の良いアンテナを作る

NTP電波時計リピータ製品

https://www.amazon.co.jp/%E6%97%A5%E6%9C%AC%E3%82%A2%E3%83%B3%E3%83%86%E3%83%8A-%E9%9B%BB%E6%B3%A2%E6%99%82%E8%A8%88%E7%94%A8NTP%E3%83%AA%E3%83%94%E3%83%BC%E3%82%BF%E3%83%BC/dp/B077V7PBJG 

f:id:devmakot:20180805080639p:plain

筐体に収まるくらい、アンテナは小さい?

40kHzのアンテナ(西日本は60kHz)

アンテナの仕組み

www.circuitdesign.jp

f:id:devmakot:20180805081033p:plain

λ(ラムダ)を計算する必要があるらしい

波動 ■わかりやすい高校物理の部屋■

f:id:devmakot:20180805123448p:plain

f:id:devmakot:20180805123502p:plain

波長 - Wikipedia

f:id:devmakot:20180805123834p:plain

λ=300M(m/s)/40k(Hz)=7,500(m)

え!?7.5km?波長が!?(w

じゃあ無理(w

1/4波長って言っても8kmを4で割っても2kmでしょう?

そんなアンテナ作れないし(w

他の方法探そう・・・

アンテナの知識

www.fbnews.jp 

波長の計算

detail.chiebukuro.yahoo.co.jp 

 一辺30cmのアンテナ自作

じぇじぇわい

f:id:devmakot:20180805081901p:plain 

フェライトロッドでバーアンテナ

mizuho-lab.com 

f:id:devmakot:20180805082220j:plain

 

細かく計算している

40kHz受信機を作ろう計画

f:id:devmakot:20180805082736j:plain

既製品電波時計を兼リピータへ改造

www.geocities.jp

f:id:devmakot:20180805083124j:plain 

ビニール線5~10m位で3mも飛ぶアンテナ

JJYシミュレータ

f:id:devmakot:20180805083928j:plain 

既製品 P18-NTP のアンテナ

blogs.yahoo.co.jp

f:id:devmakot:20180805085459j:plain

小さいよ(w

バーアンテナ

https://電子うさぎ.com/archives/1731

ROHMの情報

micro.rohm.com

アンテナの特性

http://www.oit.ac.jp/elc/~kumamoto/radio/03.pdf

総括

なるほど、長い線を使えば良さそう

Arduinoは超かんたんって感じた(検証編

 

アルデュイーノの動作検証

PCと繋いでいる時は、自動的に電力が供給されて動作する

更に、シリアルモニタを起動すれば、動作していると解る

今回買ったアルデュイーノはLANケーブルを差し込むと派手にLEDが点滅するから動作しているだろうなーって解る

最後にアンテナを付けた時にLEDが点滅するから、動作していることが解る

周波数はさすがに解らないから

https://www.amazon.co.jp/gp/product/B077D3XWHX/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1

f:id:devmakot:20180805014123p:plain

これを使えば、周波数は確認できる

アンテナが難しい

SEIKOの電波時計4台で電波受信検証

40kHzの周波数では3台は成功

60kHzの周波数では1台しか成功していない

アンテナの作りが悪いのでは?と感じた

www.seiko-clock.co.jp

f:id:devmakot:20180805121850p:plain

DAシリーズのラインナップ

私のはDA203Wで電波受信機能の状態が非常に悪く、一度も受信しない

他の情報として

https://www.amazon.co.jp/%E7%9B%AE%E8%A6%9A%E3%81%BE%E3%81%97%E6%99%82%E8%A8%88-%E3%83%90%E3%82%A4%E3%83%AA%E3%83%B3%E3%82%AC%E3%83%AB%E5%88%87%E6%9B%BF%E5%BC%8F%E9%9F%B3%E5%A3%B0%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%A0-POCKETTALK-%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88%E3%83%88%E3%83%BC%E3%82%AF-DA208K/dp/B01JNSXJMU

DA206W DA208K も絶望的にダメらしい

TALK LINERシリーズは全部ダメらしい

元からの設計がダメらしい

これにはとてもビックリ

電波受信した時の動作

針のあるアナログ時計は、秒針が止まるから直ぐ判る

秒針がシンクロして回っている時計達をみると、不思議な感じがする

同じメーカの物なのに、作りが違うのは何故?

1台は見た目電波時計だけど、一度も電波を受信できない。壊れているんじゃない?

電界強度を見てみた

https://www.amazon.co.jp/gp/product/B07CSTKDWR/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1

f:id:devmakot:20180805013246p:plain

これでアンテナの効果範囲を探ってみた

結構飛ばない

1mも離れると、電界強度計のLEDが消灯する

やっぱりアンテナの作りが悪いんだって解る

でも、近くなら絶対受信出来ている筈

つまり、SEIKOのTALK LINERは壊れているっぽい?それか製品クオリティが元から低いか

受信メータの振れ具合はとても良いのに

アルデュイーノの電源

アルデュイーノの電源ソケットにはACアダプタが接続できる

センタープラスタイプのACアダプタ

7V~12Vと言われている

6VのセンタープラスACアダプタを繋いだところ、動作している

後はアルデュイーノを箱に収めて、ACアダプタを接続すれば、電波リピーターの完成

総括

 

LEDが点滅を開始しないと電波は飛んでいない証拠

LANケーブルがきちんと刺さっているか確認

また、DHCPIPアドレスを取得するようになっているので、DHCPサーバ機能がルータその他で機能しているか確認が必要

DHCPが使えない場合、固定IPアドレスを設定する必要がある

電圧不足の懸念を払拭したいなら7V以上のACアダプタを用意する

センタープラスのACアダプタでなければならない

アルデュイーノ本体は回路むき出しだから、ショートの懸念があり、注意するべき事柄

あとはアンテナ次第。それでも適当なアンテナでも10cm以内なら電波でアジャスト可能

ケースに収めて部屋中の電波時計に適応させたいなら
devmakot.hateblo.jp

電波リピータアンテナ編を参考にする

Arduinoは超かんたんって感じた(動作編

 

これまでのあらまし

準備編:準備

導入編:アルデュイーノの入り口

試行編:元となるプログラムから好みの動作プログラムを追加・変更

動作編:前編で動作がおかしかったプログラムを見直して動作する様に変更した

 

動作編

前編で動作がおかしかったプログラムを見直した

詳しくは前編を参照(元になったプログラムへのリンクも)

devmakot.hateblo.jp

ちゃんと動作するプログラムに進化させるために、Arduinoオフィシャルサイトへ行って、ちょっと資料を読んでプログラムを改変した

結果、動作するようになった

可能な限りプログラムは書きたくない(書き換えたくない)から最小変更で済むように変更した

実践

元になった記事

neocat.hatenablog.com

の様に、Arduino3ピンにLEDを取り付けて、ワニ口の線をくるくる巻いて、GNDへつないで、電波時計の受信自動調整を試した

セイコーの時計4台中3台は受信した。残りの1台は何かおかしい。製品としておかしいのでは?

中華電波時計(全く同一2台)は電波を一切受信してくれない

プログラム

元となったプログラムへの追加や変更の仕方は前編を参照

NTPプログラムの動作から初めて

元となったプログラムを部分的に貼り付けて動作を確認しながら進めた

ここには最終結果を貼り付け

#include <Time.h>
#include <TimeLib.h>

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>

// bit set / clear
#ifndef cbi
#define cbi(PORT, BIT) (_SFR_BYTE(PORT) &= ~_BV(BIT))
#endif
#ifndef sbi
#define sbi(PORT, BIT) (_SFR_BYTE(PORT) |= _BV(BIT))
#endif


// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

unsigned int localPort = 8888; // local port to listen for UDP packets

char timeServer = "time.nist.gov"; // time.nist.gov NTP server

const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message

byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets

// A UDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

byte timecode[60];
unsigned long lastNTPTime = 0;

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

// start Ethernet and UDP
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
for (;;)
;
}
Udp.begin(localPort);
NTPSetTime();
setupTimeCode();
}


void loop(){
int wait_start = second();
while (wait_start == second()); // wait until time is corrected
unsigned long startTime = millis();

// generate 40khz from 3 pin using PWM
pinMode(3, OUTPUT);
digitalWrite(3, LOW);
TCCR2A = _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS20);
OCR2A = F_CPU / 2 / 40000/*hz*/;
OCR2B = OCR2A / 2; /* 50% duty */
sbi(TCCR2A,COM2B1);

// calc signal duration (ms)
int ms = calcTimeCodeDuration();

// wait ms and stop PWM
while (millis() - startTime < ms);
cbi(TCCR2A,COM2B1);

if (millis() - lastNTPTime > 60*60*1000L) {
NTPSetTime();
setupTimeCode();
lastNTPTime = millis();
}
}

// send an NTP request to the time server at the given address
void sendNTPpacket(char* address) {
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
// (see URL above for details on the packets)
packetBuffer[ 0] = 0b11100011; // LI, Version, Mode
packetBuffer[ 1] = 0; // Stratum, or type of clock
packetBuffer[ 2] = 6; // Polling Interval
packetBuffer[ 3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay & Root Dispersion
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;

// all NTP fields have been given values, now
// you can send a packet requesting a timestamp:
Udp.beginPacket(address, 123); //NTP requests are to port 123
Udp.write(packetBuffer, NTP_PACKET_SIZE);
Udp.endPacket();
}

//=========================== NTP ===========================
void NTPSetTime(){
int packetSize;
do{
sendNTPpacket(timeServer);
Serial.println("Waiting NTP response ...");
delay(1000*5);
packetSize = Udp.parsePacket();
Serial.print("Received packet of size ");
Serial.println(packetSize);
}
while(!packetSize);
Udp.available();
// バッファに受信データを読み込む
Udp.read(packetBuffer, NTP_PACKET_SIZE);

// 時刻情報はパケットの40バイト目からはじまる4バイトのデータ
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);

// NTPタイムスタンプは64ビットの符号無し固定小数点数(整数部32ビット、小数部32ビット)
// 1900年1月1日0時との相対的な差を秒単位で表している
// 小数部は切り捨てて、秒を求めている
unsigned long secsSince1900 = highWord << 16 | lowWord;
Serial.print("Seconds since Jan 1 1900 = " );
Serial.println(secsSince1900);

// NTPタイムスタンプをUNIXタイムに変換する
// UNITタイムは1970年1月1日0時からはじまる
// 1900年から1970年の70年を秒で表すと2208988800秒になる
const unsigned long seventyYears = 2208988800UL;
// NTPタイムスタンプから70年分の秒を引くとUNIXタイムが得られる
unsigned long epoch = secsSince1900 - seventyYears;
Serial.print("Unix time = ");
Serial.println(epoch);

// Timeライブラリに時間を設定(UNIXタイム)
// 日本標準時にあわせるために+9時間しておく
setTime(epoch + (9 * 60 * 60));

Serial.print("JST is ");
Serial.print(year());
Serial.print('/');
Serial.print(month());
Serial.print('/');
Serial.print(day());
Serial.print(' ');
Serial.print(hour());
Serial.print(':');
Serial.print(minute());
Serial.print(':');
Serial.println(second());
Serial.println();

Serial.print("localtime = ");
Serial.println(epoch);
}

//=========================== JJY ===========================

unsigned int calcTimeCodeDuration(){
int s = second();
if (s == 0)
setupTimeCode();
return timecode[s] * 100;
}

void setupTimeCode(){
int i;
memset(timecode, 8, sizeof(timecode));

setupTimeCode100(minute(), 0);
timecode[0] = 2;

setupTimeCode100(hour(), 10);

int d = dayOfYear();
setupTimeCode100(d/10, 20);
setupTimeCode100(d%10*10, 30);

int parity1 = 0, parity2 = 0;
for (i = 12; i < 20; i++) parity1 ^= timecode[i] == 5;
for (i = 1; i < 10; i++) parity2 ^= timecode[i] == 5;
timecode[36] = parity1 ? 5 : 8;
timecode[37] = parity2 ? 5 : 8;

setupTimeCode100(year()%100, 40);
for (i = 44; i > 40; i--)
timecode[i] = timecode[i-1];
timecode[40] = 8;

int w = weekday() - 1;
timecode[50] = (w & 4) ? 5 : 8;
timecode[51] = (w & 2) ? 5 : 8;
timecode[52] = (w & 1) ? 5 : 8;
timecode[59] = 2;

/* dump */
for (i = 0; i < 60; i++) {
Serial.print(timecode[i], DEC);
Serial.print(i % 10 == 9 ? "\r\n" : " ");
}
Serial.println();
}

void setupTimeCode100(int m, int i)
{
timecode[i+0] = *1};
time_t t = makeTime(tm);
return (now() - t) / SECS_PER_DAY + 1;
}

何故か最後が途切れる

何なの?このブログ。プログラム貼っただけなのに、変な切れ方するの止めて!!!

こんな所、苦労する所じゃないのに!???

信じられない!

因みに、この行が最後の行なのに、この行以降に文字が表示されるのは何故???

*1:m/10) & 8) ? 5 : 8;
timecode[i+1] = ((m/10) & 4) ? 5 : 8;
timecode[i+2] = ((m/10) & 2) ? 5 : 8;
timecode[i+3] = ((m/10) & 1) ? 5 : 8;
timecode[i+4] = 8;
timecode[i+5] = ((m%10) & 8) ? 5 : 8;
timecode[i+6] = ((m%10) & 4) ? 5 : 8;
timecode[i+7] = ((m%10) & 2) ? 5 : 8;
timecode[i+8] = ((m%10) & 1) ? 5 : 8;
timecode[i+9] = 2;
}

int dayOfYear(){
tmElements_t tm = {0, 0, 0, 0, 1, 1, CalendarYrToTm(year(

Arduinoは超かんたんって感じた(試行編

 

動かしたかったプログラム

devmakot.hateblo.jp

で部屋中の電波時計がずれてる問題を解消したくて

neocat.hatenablog.com 

こちらのプログラムを動かして、部屋の電波時計の時間を揃えたい

Arduinoは簡単

情報が溢れてる

何かを持ってきて(コピー)

どこかに貼り付ける(ペースト)

するだけで、プログラムが動く

プログラム知らなくても、試行錯誤でいけそうな気がする

ネットワークから時間を取得するところまでは出来てる

devmakot.hateblo.jp

あとは

  • 取得した時間を電波時計にわかるように変えて
  • 電波にして出す

だけ

参考プログラムを眺める

//=======NTP========

と書かれている部分以降が必要っぽいから、コピーして、プログラムの一番最後に追加して貼り付ける

例によって

☑を押してみる

f:id:devmakot:20180804120628p:plain

怒られた

timecode[]がないって言われた

f:id:devmakot:20180804120812p:plain

オリジナルコードの

f:id:devmakot:20180804120834p:plain

これを、コピーして、プログラムの上の方に貼り付ける

同じ様な位置に入れれば良さそうだから

f:id:devmakot:20180804121002p:plain

☑を押してみる。通った

追加したプログラムは、ただ追加しただけ

もう少し、追加が必要

f:id:devmakot:20180804121241p:plain

この calcTimeCodeDuration() を呼んでいる部分をオリジナルの方で探す

f:id:devmakot:20180804121536p:plain

この loop() の部分が殆ど必要そう

だから、元あった loop(){}を全部消して、この部分に入れ替えてみて、☑を押す

f:id:devmakot:20180804121909p:plain

sbiがないって怒られた

f:id:devmakot:20180804122059p:plain

これが必要そうだから

f:id:devmakot:20180804122141p:plain

同じ様な位置に追加してみた

また怒られた

lastNTPTimeが無いって

f:id:devmakot:20180804122340p:plain

これを同じ様な位置に入れて

f:id:devmakot:20180804122407p:plain

☑を押す

Udp~で怒られた

Udp.readPacket は Udp.read に変更が必要そう

Arduinoリファレンス(EthernetUDP::read())

変わったんだね~

だから

Packet

って文字だけ削除

同様に

Udp.sendPacket も Udp.write に変更が必要そう

Arduinoリファレンス(EthernetUDP::write())

だから、ここでは

sendPacket を write に書き換える

f:id:devmakot:20180804123547p:plain

時間がおかしくなっちゃったけど、動いている

f:id:devmakot:20180804124038p:plain

void setup() の

f:id:devmakot:20180804124104p:plain

この2行が必要そう

f:id:devmakot:20180804124154p:plain

☑を押して⇒を押す

f:id:devmakot:20180804124311p:plain

時間がとんでもないことになっちゃった(w

 

Arduinoは超かんたんって感じた(導入編

 

ちょっと動かす編

ちょっと動かして、様子を見る

Arduinoのウィンドウが表示されている

f:id:devmakot:20180804105656p:plain

 ☑を押す(一番左のボタン):検証:ミスを調べる

⇒を押す(左から2番目のボタン):プログラムをArduinoへ送る

f:id:devmakot:20180804110700p:plain

シリアルモニタ:動作させて、結果を得る

f:id:devmakot:20180804110805p:plain

何も表示されない(からわからない)

操作してみる

プログラムは組まない

どこからか持ってきて(コピー)

貼り付ける(ペースト)

だけ

ArduinoにLANケーブルをつないでから

Arduino - UdpNtpClient

このページのプログラムだけをこぴぺ

Arduinoの窓(ウィンドウ)へ貼り付ける

このとき、最初から入っているプログラムは全部消してから、ペースト

f:id:devmakot:20180804111410p:plain

☑を押す。ファイル保存を促されるから保存する。

f:id:devmakot:20180804111538p:plain

コンパイルが完了しました、と表示される

⇒を押す。スケッチをコンパイルしています>ボードへ書き込みが完了しました、と表示が変わる

f:id:devmakot:20180804111718p:plain

Ctrl+Shift+Mを押して、シリアルモニタを表示させ、ちょっと待つ

f:id:devmakot:20180804112030p:plain

何かが表示された

ネットワークに繋いで、時間を取得している

f:id:devmakot:20180804112128p:plain

プログラムを見ると、このサイトにつないで、時間を取得して、表示してる

何もプログラムを打ち込んでいない

ただ貼り付けただけ

・・・でも、表示はおかしい

表示のおかしいのをただす

その前に、時間だけじゃなくて、日付も表示する

このページを参考に

arms22.blog91.fc2.com

 プログラムを見比べてみると、とても似ている部分がある

f:id:devmakot:20180804113428p:plain

この部分を

f:id:devmakot:20180804113411p:plain

似ているから、こっちに置き換えると、こうなる

f:id:devmakot:20180804113642p:plain

できた。☑を押す

f:id:devmakot:20180804113739p:plain

怒られた。時間関係を扱えないって言ってる。

f:id:devmakot:20180804113902p:plain

時間を扱う為に、Timeライブラリをインクルードする

もういちど、☑すると、終わったから、⇒を押す

f:id:devmakot:20180804114201p:plain

正しく時間を取得してる

UTCって時間がずれてるのがわかる

でも、実はUTCは基準時間で、日本が+9時間ずれているのがわかった

何もしていないのに、動くのは簡単としか言いようがない

だって、プログラム何も書いてないのに、動く

時間を取得して、表示してる

どこからかプログラムをコピーして

貼り付けて

動く

感動しかない!!!