質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

0回答

1678閲覧

ArduinoプログラムでAVRを動かしたい

jyojyo

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2021/01/18 07:51

編集2021/01/18 09:16

前提・実現したいこと
ATmega328で自動手動の動作とsleep関数を割り込みで行うシステムを作っています。
sleep関数を割り込みで行うシステム機能を実装中に以下のエラーメッセージが発生しました。
そしてできればATmega328で動いたソースコードが欲しいです

発生している問題・エラーメッセージ
エラーメッセージ
Arduino:1.8.12 (Windows 10), ボード:"ATmega328P, 8MHz/X'tal"
Warning: Board ATmega88_168P_328P:avr:atmega88 doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA88
Warning: Board ATmega88_168P_328P:avr:atmega168p doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA168P
Warning: Board ATmega88_168P_328P:avr:atmega328p doesn't define a 'build.board' preference. Auto-set to: AVR_ATMEGA328P
In function 'void loop()':
error: 'interrupt' was not declared in this scope
note: suggested alternative: 'interrupts'
error: 'interrupt' was not declared in this scope
note: suggested alternative: 'interrupts'
error: a function-definition is not allowed here before '{' token
error: a function-definition is not allowed here before '{' token
error: a function-definition is not allowed here before '{' token
error: a function-definition is not allowed here before '{' token
error: expected '}' at end of input
exit status 1
'interrupt' was not declared in this scope

「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。

該当のソースコード

c

1ソースコード 2#define F_CPU 8000000UL /* <util / delay.h>で使用されます。(8GHzを意味します) */ 3#include <avr/io.h> 4#include <util/delay.h> 5const uint8_t tempo = 100; /*記憶*/ 6uint8_t notes[2][50] = {}; /*音の速度*/ 7uint8_t level[2][50] = {{}};/*音の高さ*/ 8uint8_t beat[2][50] = {{}};/*ビート*/ 9uint8_t line[] = {0, 0, 1};/*行*/ 10void playTone(uint16_t tone, uint16_t duration) { 11for (uint32_t i = 0; i < duration * 1000L; i += tone * 2 / 10) {/*duration=期間*/ 12PORTC = 0x0000001; 13for (uint16_t j = 0; j < tone / 10; j++) { 14_delay_us(1); /*X ミリ Oマイクロ*/ 15} 16PORTC = 0x0000000; 17for (uint16_t j = 0; j < tone / 10; j++) { 18_delay_us(1); 19} 20} 21 22return; 23} 24 25void playNote(uint8_t note, uint16_t level, uint16_t duration) { 26uint8_t names[] = {'c', 'd', 'e', 'f', 'g', 'a', 'b'}; //ドレミファソラシ 27uint16_t tones[] = { 19111, 17026, 15169 + 1, 14317, 12755, 11364, 10124}; 28/* 29/ * 30timeHigh =期間/ 2 = 1 /(2 * toneFrequency) 31ここで、さまざまなトーンは次のように説明されています。 32音符 頻度 期間 高い時間 33do4 261.63 Hz 3830 1911.0958223445323548522722929328 (261->1915=1915.7088122605363984674329501916) 34re4 293.66 Hz 3400 1702.6493223455697064632568276238 (294->1700=1700.6802721088435374149659863946) 35mi4 329.63 Hz 3038 1516.8522282559233079513393805175 (329->1519=1519.7568389057750759878419452888) 36fa4 349.23 Hz 2864 1431.7212152449674999284139392378 (349->1432=1432.6647564469914040114613180516) 37so4 392 Hz 2550 1275=1275.5102040816326530612244897959 38ra4 440 Hz 2272 1136=1136.3636363636363636363636363636 39si4 493.88 Hz 2028 1012.3916740908722766663966955536 (493->1014=1014.1987829614604462474645030426) 40do5 523.25 Hz 1912 955.566172957477305303392259914 (523->956=956.02294455066921606118546845124) 41*/ 42/*音名に対応した音を再生します*/ 43for (uint8_t i = 0; i < 7; i++) { 44if (note == names[i]) { 45uint8_t a = level - 4; 46playTone(tones[i] / pow(2, a), duration); 47} 48} 49 50return; 51} 52 53int main(void) 54{ 55/* 56DDRx:I / Oを設定します。0->入力、1->出力。入力時はプルアップする必要があります。cf.mega88A.pdf:14.2.3。 57PORTx:書き込み専用 58PINx:読み取り専用 59*/ 60DDRC = 0b0000001; /* 出力:ブザー(PORTC0)*/ 61DDRD = 0x00; /*入力:スィッチ(PINB5)*//* <iom328.h> #define PINB5 5*/ 62DDRD = 0x7F; /* DDRB 出力ピン対応ビットはセット、入力ピン対応ビットはクリア */ 63PORTD = 0xFF; /* 入力ピンに対応するビットに1を書き込み、内蔵プルアップ指定 */ 64DDRB = 0x00; /* I/ o:key(PORT0-7)*/ 65PORTB = 0xff; /* 入力時にプルアップする必要があります。*/ 66bool a_mode = 0; /*0-手動、1-自動*/ 67 68while (1) 69{ 70/* TOBO ::アプリケーションコードを書いてください*/ 71 72main_loop: 73if (bit_is_clear(PORTD, PORTD7)) /* スイッチが閉じると成立 */ 74PORTB = PORTB & ~_BV(PB1); /* ここではPD0をクリアしてLED点灯 */ 75if (a_mode) { //auto(PIND == 0b00100000) 76DDRB = 0xff; //出力のみ 77 78for (uint8_t i = 0; i < 3; i++) { /*行数*/ 79for (uint8_t j = 0; ; j++) { 80if (notes[line[i]][j] == ' ') { 81for (uint16_t k = 0; k < beat[line[i]][j] * tempo; k++) { 82_delay_ms(1); //rest(milli) 83} 84} 85else if (notes[line[i]][j] == 'n') { /*(j <length [i])の場合、for {}は続行します。*/ 86break; 87} 88else { 89uint8_t k; 90if (notes[line[i]][j] == 'c') { 91if (level[line[i]][j] == 4) { 92k = 0; 93} 94else { 95k = 7; 96} 97} 98else if (notes[line[i]][j] == 'a') { 99k = 5; 100} 101else if (notes[line[i]][j] == 'b') { 102k = 6; 103} 104else { 105for (k = 0; k < 5; k++) { 106if (notes[line[i]][j] == 'c' + k) { 107break; 108} 109} 110} 111 112PORTD ^= _BV(k); 113playNote(notes[line[i]][j], level[line[i]][j], beat[line[i]][j] * tempo); 114PORTD ^= _BV(k); 115}//if 116if (!(PINB & _BV(5))) { //auto(PINB is 0x00) 117a_mode = 0; 118goto main_loop; 119} 120}//for 121 122}//for 123 124}//auto 125else { /*手動(PIND == 0x00)*/ 126DDRB = 0x00; /*入力のみ*/ 127PORTB = 0xff; /*プルアップ*/ 128switch (PINB) { 129case 0b11111110: 130do { 131playNote('c', 4, 1 * tempo); 132} while (PINB == 0b11111110); 133break; 134 135case 0b11111101: 136do { 137playNote('d', 4, 1 * tempo); 138} while (PINB == 0b11111101); 139break; 140 141case 0b11111011: 142do { 143playNote('e', 4, 1 * tempo); 144} while (PINB == 0b11111011); 145break; 146 147case 0b11110111: 148do { 149playNote('f', 4, 1 * tempo); 150} while (PINB == 0b11110111); 151break; 152 153case 0b11101111: 154do { 155playNote('g', 4, 1 * tempo); 156} while (PINB == 0b11101111); 157break; 158 159case 0b11011111: 160do { 161playNote('a', 4, 1 * tempo); 162} while (PINB == 0b11011111); 163break; 164 165case 0b10111111: 166do { 167playNote('b', 4, 1 * tempo); 168} while (PINB == 0b10111111); 169break; 170 171case 0b01111111: 172do { 173playNote('c', 5, 1 * tempo); 174} while (PINB == 0b01111111); 175break; 176 177default: 178break; 179} 180 181if (PINB & _BV(5)) { //manual(PINB is 0x20) 182a_mode = 1; 183} 184 185}/*マニュアル*/ 186 187}/*while*/ 188 189} 190 191試したこと 192Arduino スリープモード(スライドスイッチを押すことで「GND」、スライドスイッチが押されていないときは「VDD」となります。)を用いて行う 193 194補足情報(FW/ツールのバージョンなど) 195Arduino スリープモード(スライドスイッチを押すことで「GND」、スライドスイッチが押されていないときは「VDD」となります。)を用いて行う 196ここにより詳細な情報を記載してください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/01/18 07:58

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
nac_tnk

2021/01/18 14:47

「#」を直す程度でコンパイルは出来そうだけど。 そもそも、ちゃんとAtmel Studio(現Microchip Studio)でコンパイルしている? これはArduinoのコードじゃないよ。 Arduino IDEでコンパイルしたいのなら、ちゃんとsetup関数とloop関数の形にしないと。 > Arduino スリープモード(スライドスイッチを押すことで「GND」 何を言っているのか、しているのかが全く分かりません。スライドスイッチはどこから出てきたの? そして、普通、スライドスイッチは押すものではありません。どんなスライドスイッチなの?
thkana

2021/01/18 23:46

https://teratail.com/questions/316843 https://teratail.com/help#posted-otherservice 「teratail上で誤って同じ質問を複数投稿してしまった場合は、質問の削除リクエストを送ってください。」 削除リクエストは https://teratail.com/help#delete-question 「自分の投稿した質問や回答の削除を希望する場合は、質問ページの「ゴミ箱アイコン(削除リクエスト)」ボタンから削除リクエストを送ることができます。」
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問