- 10秒ごとに温度をとる。30秒間計3回。1回ずつコメント変えて、30秒時点での温度でコメントをLINEBotに(変わっていない:禰󠄀豆子、低い:しのぶ、中:冨岡、高:煉獄)
- 温度変化の度合いによってフルカラー LEDの色が変わる。(+5度以下:青、+5〜+10:緑、+10以上:赤)
- 最後のコメントは画像にしたいな
- 最後、煉獄からのコメント判定の場合は炎が流れる
-
-
Save watanabe-tsubasa/48c640d61dbdd1a4d5aaea1892dc9e7b to your computer and use it in GitHub Desktop.
IoTLT
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//全体で使う部分 | |
let count = 0; | |
let pillar = 0; | |
// ######################################## | |
// obniz処理部分 | |
// Obniz_ID:自分のobniz ID(XXXX-XXXX) | |
// ######################################## | |
const Obniz = require('obniz'); | |
const obniz = new Obniz(''); | |
let rgbled; | |
// obnizと接続確立したとき | |
// obnizと接続確立したとき | |
obniz.onconnect = async () => { | |
obniz.display.clear(); | |
obniz.display.print('obniz Ready'); | |
rgbled = obniz.wired("WS2811", {gnd: 0, vcc: 1, din: 2}); | |
rgbled.rgb(255, 255, 255); | |
// rgbled.rgb(255, 0, 0)//赤: 煉獄 1 | |
// rgbled.rgb(0, 255, 0)//緑: | |
// rgbled.rgb(0, 0, 255)//青: 冨岡 2 | |
// rgbled.rgb(148, 0, 211)//紫:しのぶ 3 | |
// rgbled.rgb(255, 192, 203)//ピンク: 禰󠄀豆子 4 | |
if(pillar === 1) { | |
rgbled.rgb(255, 0, 0)//赤: 煉獄 1 | |
} else if(pillar === 2) { | |
rgbled.rgb(0, 0, 255)//青: 冨岡 2 | |
} else if(pillar === 3){ | |
rgbled.rgb(148, 0, 211)//紫:しのぶ 3 | |
} else if(pillar === 4){ | |
rgbled.rgb(255, 0, 203)//ピンク: 禰󠄀豆子 4 | |
} else { | |
rgbled.rgb(255, 255, 255); | |
} | |
} | |
// 温度センサから値を取得して返す | |
const getObnizTemp = async () => { | |
// 温度センサの利用 | |
const tempsens = obniz.wired('LM60', { gnd: 9, output: 10, vcc: 11 }); | |
// 非同期で取得 | |
const temp = await tempsens.getWait(); | |
// ターミナル表示 | |
console.log('obniz temp:', temp); | |
// obnizディスプレイ表示 | |
obniz.display.clear(); | |
obniz.display.print(temp + ' C'); | |
// 温度値を返す | |
return temp; | |
} | |
// 炎 | |
//const sindibaad = async () => { | |
// const speaker = obniz.wired('Speaker', { signal: 5, gnd: 6 }); | |
// speaker.play(scData.E5);await obniz.wait(300);speaker.stop();await obniz.wait(50); | |
//} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ######################################## | |
// LINEBot イベント処理部分 | |
// channelSecret:LINE Developers → チャネル基本設定 → チャネルシークレット | |
// channelAccessToken:LINE Developers → Messaging API設定 → チャネルアクセストークン(長期) | |
// ターミナルで `ngrok http 3000` 実行後、発行されたURLをWebhook URLとして設定するのを忘れずに | |
// 「検証」ボタンをクリックするとターミナルにエラーが出ますがここでは問題ありません(検証イベントのハンドリングをしていないため) | |
// ######################################## | |
const config = { | |
channelSecret: '', | |
channelAccessToken: '' | |
}; | |
const line = require('@line/bot-sdk'); | |
const client = new line.Client(config); | |
// ExpressからMessaging APIイベントを渡されて処理するところ | |
const handleEvent = async (event) => { | |
// テキストメッセージ以外を受信したときは何も行わずresolveを返す | |
if (event.type !== 'message' || event.message.type !== 'text') { | |
return Promise.resolve(null); | |
} else if (event.message.text === '全集中') { | |
// 待ってねというメッセージを「リプライ」で先に返す | |
await client.replyMessage(event.replyToken, { | |
type: 'text', | |
text: '心を燃やせ' | |
}); | |
let temp = 0; | |
let startTemp =await getObnizTemp(); | |
const intervalid = setInterval(async () =>{ | |
temp = await getObnizTemp(); | |
if(count === 0){ | |
if(temp > startTemp + 3){//煉獄1 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: 'うむ!いい心掛けだ!', | |
}); | |
pillar = 1; | |
}else if(temp > startTemp + 2){//冨岡1 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: 'こいつは何か違うかもしれない', | |
}); | |
pillar = 2; | |
}else if(temp > startTemp){//しのぶ1 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: 'もしもし 大丈夫ですか?', | |
}); | |
pillar = 3; | |
}else{//禰󠄀豆子1 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: 'ムー', | |
}); | |
pillar = 4; | |
} | |
if(pillar === 1) { | |
console.log('pillar = 1'); | |
rgbled.rgb(255, 0, 0)//赤: 煉獄 1 | |
} else if(pillar === 2) { | |
console.log('pillar = 2'); | |
rgbled.rgb(0, 0, 255)//青: 冨岡 2 | |
} else if(pillar === 3){ | |
console.log('pillar = 3'); | |
rgbled.rgb(148, 0, 211)//紫:しのぶ 3 | |
} else if(pillar === 4){ | |
console.log('pillar = 4'); | |
rgbled.rgb(255, 0, 203)//ピンク: 禰󠄀豆子 4 | |
} else { | |
console.log('pillar = 5'); | |
rgbled.rgb(255, 255, 255); | |
} | |
} | |
else if(count === 1){ | |
if(temp > startTemp + 5){//煉獄2 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: '昨日の自分より確実に強い自分になれるぞ', | |
}); | |
pillar = 1; | |
}else if(temp > startTemp + 3){//冨岡2 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: 'つらいだろう、叫びだしたいだろう、わかるよ', | |
}); | |
pillar = 2; | |
}else if(temp > startTemp + 1){//しのぶ2 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: 'そんなだからみんなに嫌われるんですよ', | |
}); | |
pillar = 3; | |
}else{//禰󠄀豆子2 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: 'ムムー', | |
}); | |
pillar = 4; | |
} | |
if(pillar === 1) { | |
rgbled.rgb(255, 0, 0)//赤: 煉獄 1 | |
} else if(pillar === 2) { | |
rgbled.rgb(0, 0, 255)//青: 冨岡 2 | |
} else if(pillar === 3){ | |
rgbled.rgb(148, 0, 211)//紫:しのぶ 3 | |
} else if(pillar === 4){ | |
rgbled.rgb(255, 0, 203)//ピンク: 禰󠄀豆子 4 | |
} else { | |
rgbled.rgb(255, 255, 255); | |
} | |
} else if(count === 2){ | |
if(temp > startTemp + 12){//煉獄3 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: '胸を張って生きろ', | |
}); | |
pillar = 1; | |
}else if(temp > startTemp + 6){//冨岡3 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: 'お前のその実力は柱に届くと言っても過言ではない', | |
}); | |
pillar = 2; | |
}else if(temp > startTemp + 2){//しのぶ3 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: 'とっととくたばれ糞野郎', | |
}); | |
pillar = 3; | |
}else{//禰󠄀豆子3 | |
client.pushMessage(event.source.userId, { | |
type: 'text', | |
text: 'これは爆血やな', | |
}); | |
pillar = 4; | |
} | |
if(pillar === 1) { | |
rgbled.rgb(255, 0, 0)//赤: 煉獄 1 | |
} else if(pillar === 2) { | |
rgbled.rgb(0, 0, 255)//青: 冨岡 2 | |
} else if(pillar === 3){ | |
rgbled.rgb(148, 0, 211)//紫:しのぶ 3 | |
} else if(pillar === 4){ | |
rgbled.rgb(255, 0, 203)//ピンク: 禰󠄀豆子 4 | |
} else { | |
rgbled.rgb(255, 255, 255); | |
} | |
} | |
console.log(temp); | |
console.log(count++); | |
if(count > 2) { | |
clearInterval(intervalid); | |
count = 0; | |
} | |
}, 5000);// obnizの温度センサから値をとってくる(ブロッキング・時間のかかる処理で一旦ここで止まる) | |
} else { | |
// メッセージの中身が「全集中」以外だったとき | |
client.replyMessage(event.replyToken, { | |
type: 'text', | |
text: '集中が足りていない' | |
}); | |
} | |
// resolveを返す | |
return Promise.resolve(null); | |
} |
まさかconstとletの間違いでエラーが出ていたとは。 TypeError: Assignment to constant variable. これが目印 禰󠄀豆子:ムー、ムムー、これは爆血やな しのぶ:もしもし 大丈夫ですか?、そんなだからみんなに嫌われるんですよ、とっととくたばれ糞野郎 冨岡:こいつは何か違うかもしれない、つらいだろう、叫びだしたいだろう、わかるよ、お前のその実力は柱に届くと言っても過言ではない 煉獄:うむ!いい心掛けだ!、昨日の自分より確実に強い自分になれるぞ、胸を張って生きろ
全力で息を吹きかけたデータは以下の通り obniz temp: 15 obniz temp: 25.3 25.3 0 obniz temp: 29.9 29.9 1 obniz temp: 29.1 29.1 2
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment