ラベル Arduino の投稿を表示しています。 すべての投稿を表示
ラベル Arduino の投稿を表示しています。 すべての投稿を表示

2024年12月12日木曜日

Arduino R4 minimaで書き込みするとエラー(No DFU capable usb device available)が出る

デバイスマネジャーを開いてみたら
ほかのデバイス内にある「Santiago DFU」のドライバが無いみたい。
プロパティを開きドライバの更新を行うをやってもドライバ見つからず。

Arduino IDEのツール>ボード>ボードマネージャーで
R4のドライバを最新の1.3.1ではなく1.2.1をインストールしたら書き込めた。

最新版は何か問題があるのか?とりあえず書き込めてよかった。

2024年11月20日水曜日

Arduino Pro Mini 3.3VでanalogReadの値がおかしい。

A0に3V入力しているのにanalogReadすると値が580。
調べてみたら電源5VをVCCに繋いでいた。
RAWに繋ぎ直したら直った。

2022年4月8日金曜日

RaspberryPi4BにArduino2台をUSB接続

1台なら
serial.Serial("/dev/ttyACM0", 115200)
2台目は
serial.Serial("/dev/ttyACM1", 115200)
となる。

「0」と「1」は差し込む位置によって決まる。
RaspberryPi4Bだと
USB3上段→USB3下段→USB2上段→USB2下段
の順でチェックをしているのかも。

例)
ttyACM0とするArduinoをUSB3上段
ttyACM1とするArduinoをUSB2上段
にする。


2021年9月2日木曜日

Arduino 'XXX' was not declared in this scope

'XXX' was not declared in this scope

 

'XXX'が関数名であれば、その関数を実行した位置では、まだXXXは定義されていない。

XXX関数を実行箇所より前に持ってくる。
タブで管理しているなら左に来るようにタブ名に数値を入れるなどして調整する。
※タブ位置はすぐには反映されない。ファイルを開き直す必要あり。

2021年9月1日水曜日

Arduinoブロックプログラミング BlocklyDuino Editor[1.7.0]を使ってみて

BlocklyDuino Editor ブロック画面
BlocklyDuino Editor Arduino画面



いつもはArduino IDEで書いているが、
中規模くらいの内容なのでブロックプログラミングで書いてみようと思い
BlocklyDuino Editorを試した。

ver1.7.0で気になった点
  1. アナログ入力(analogRead)デジタル入力(digitalRead)で変数を指定出来ない。
    配列にPIN番号を入れて使う事が出来ない。
    ※デジタル出力(digitalWrite)は変数を指定出来る。
  2.  macだからか設定でOKボタンを押すと落ちる。
  3. 繰り返しの設定(i from 値1 to 値2)で値に変数を使用すると処理が止まる。(操作はできるが、保存もされない)
    繰り返しを削除するか値を変数ではなく数値を入れると動き出す。

  • 配列にPIN番号を入れない
  • Arduino UNOを使用する(ピンはArduino UNOの番号までしか選択出来ないが、保存されるxmlを書き換えればArduino megaでも使えなくもない)
  • 簡単な内容
であればBlocklyDuino Editor[1.7.0]で書くのもありかも。

自分の使い方が悪いだけかなぁ。。
残念ながら今回はBlocklyDuino Editorで書くことは出来なそうですが
いつかブロックプログラミングで書いてみたいのでアップデートが楽しみです。

2021年6月9日水曜日

Arduino エラー "scalar object 'xxxx' requires one element in initializer"

宣言時配列に[]を付け忘れると出る。

誤)
int secondsList = {0,0};

正)
int secondsList[] = {0,0};
または
int secondsList[2] = {0,0};

2021年5月17日月曜日

RaspberryPi Python Error "backend terminated or disconnected"

RaspberryPiとArduinoを接続して動作テストしていたら

backend terminated or disconnected.

を出してPythonが落ちた。
Arduinoの入力を行うと良く落ちるので、Arduinoが原因かと色々したが直らない。
今まではこのような事がなかったので、今日初めて使用する

Raspberry Pi B+用T型I/O延長基板

を調べてみたら差す向きを間違えてる。。。
そんな訳でラズパイに繋いでいるRTCなんか全く違うところに差しちゃってました。
見た事ないエラーで慌てずに冷静になってから繋いでいるピンを確認しましょう。
私はこれで3時間無駄にしました。

2021年4月15日木曜日

ArduinoUNO x Python3のSerial通信[read_until]が上手くいかない

Python2では

ser = serial.Serial( "/dev/ttyACM0" , 115200 , timeout = 0.01)
〜〜省略〜〜
received = ser.read_until("k")
str_value = re.sub(r'\D' , '' , received)
num = int(str_value)

で"k"区切りになっていた値を受け取れていたのにPython3では

NameError : name 'received' is not defined

と出る。。。
調べてみたら「python3では、文字列とバイト列の区別が明確になりました。」との事。
どうやらこいつの影響っぽい。

Python2
received = ser.read_until("k")

Python3
received = ser.read_until(b'\x6b')#kをbytes型で指定

これだと b'a200k' のような状態なので、これをそのままstr型の文字列に変換して
余計なものを取る。
received = str( ser.read_until(b'\x6b') )
received = received[ 2 : len(received)-1 ]

とっても後味悪い方法に。。

以下、参考にしたサイト
python3のbytes型とstr型の比較と変換方法
Python3での文字列のstr型とbytes型のまとめ
Raspberry Pi と Arduino でUSBシリアル通信(複数の値を送受信)(第二弾)


2021年4月7日水曜日

ArduinoUNOからRaspberryPiへUART通信(TXD・RXD)/dev/ttyS0

RaspberryPiとArduinoUNOのシリアル通信で
USBシリアル通信時 /dev/ttyACM0で問題なく通信できたが
UART通信時 /dev/ttyS0にしても通信出来てる気配がない。 

 調べてみたら以下の作業が必要との事
・/boot/cmdline.txtの「console=serial0,115200」を削除 
・/boot/config.txtに「enable_uart=1」を追加

こちらに詳しく書いてあります。

2020年6月22日月曜日

Arduino Array.length

配列の要素数が欲しかったけど、ArduinoではArray.length無いみたい。

配列が以下の場合は
int testArray[] = {1,2,3,4,5,6,7,8,9,10};

こうやって求める
sizeof(testArray)/sizeof(int)

配列全体のサイズを取得
型のサイズを取得
割って要素数を求めている。


2020年3月30日月曜日

Arduino IDE スコープエラー

M5Stack用のプログラムを整理していたら(タブに分けていたら)
以下の様なスコープエラーが出てきた。(一部抜粋)

error: variable or field '関数名' declared void
error: '引数名' was not declared in this scope
「WiFi.h」に対して複数のライブラリが見つかりました
「SD.h」に対して複数のライブラリが見つかりました

エラーに書かれている内容を元に調べてみても原因は見つからず、、
他の方の記事を見るとloop前に関数を持ってくるとか色々書いてあったけど、それで動いても気持ち悪いので仕方なくバックアップしておいた一つ前のファイルを元に調べてみました。
するとメインファイル(フォルダ名と同じinoファイル)に関数を一つも置いていないのが原因でした。
仕方ないのでメインファイルの末尾に適当な空の関数を入れたらエラーがすべて消えました。

void empty(){}

setup()やloop()を別のタブに移動させた時は注意しよ。。
プログラムを書く時は、まめに検証(コンパイル)ですね。

2019年3月19日火曜日

ArduinoとRTC(DS3231)モジュールの接続

amazonで以下のパーツを買ったのでメモ

見づらい場所に+、D、C、NC、−と書かれている。
DはSDA、CはSCL に繋ぐ。

プログラムは以下を参考にした。

ArduinoでRTC(DS3231)を使ってみた - MOYOゐのメモ書き

2017年7月18日火曜日

Arduino/pow(2,2)が3になる

pow(2,2)が4ではなく3になる。
四捨五入すると4になる。
round(pow(2,2))

2016年4月30日土曜日

ArduinoDue X ArduinoEthernetShield2


秋月では、
「本ボードのマイコン電圧が3.3Vの為、 一般的な5V用のシールドを使用すると故障する恐れがあります。 十分注意してお使い下さい。」
スイッチサイエンスでは、
「他の主なArduinoボードと違って、Arduino Dueは3.3V版です。 各I/Oピンに入力できる最大電圧は3.3Vです。I/Oピンに5Vを入力するとボードにダメージを与える可能性があります。」
と書かれていたのでちょっと心配だったけどArduinoDue X ArduinoEthernetShield2で使えた。
※ただし4時間連続SDカードへの書き込みしか試していない。
たぶん入力だけ気をつければ大丈夫であろう。

2016年4月4日月曜日

ArduinoMega DigitalPin51 DigitalRead become HIGH

DigitalPin50 is MISO(Master In Slave Out)
DigitalPin51 is MOSI(Master Out Slave In)
DigitalPin52 is SCK(Serial Clock)
DigitalPin53 is SS(Slave Select)

Maybe MOSI is  automatically overrides to OUTPUT.

ArduinoMega's PinMapping

2016年3月8日火曜日

XBee APIモード TX要求(0x10)

Arduino IDE1.7.8では
Serial.print(0x7E,BYTE);
じゃなくて
Serial.write(0x7E);
を使う。

BIN(2進数)、OCT(8進数)、DEC(10進数)、HEX(16進数)を使うなら「Serial.print(data, format)」
BYTEは「Serial.write」

//[0]スタートバイト
Serial.write(0x7E);
//フレーム長バイト数チェックサムを含まない。
//[1]上位
Serial.write(0x00);
//[2]下位
Serial.write(0x10);
//[3]フレームタイプ
Serial.write(0x10);
//[4]応答用フレームID
Serial.write(num);
//64bitアドレス コーディネーター
//[5-8]
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
//[9-12]
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
//[13-14]16bitアドレス コーディネーター
Serial.write(0x00);
Serial.write(0x00);
//[15]ブロードキャストホップ数
Serial.write(0x00);
//[16]オプション
Serial.write(0x00);
//[17]RFデータ1
Serial.write(rf1);
//[18]RFデータ2
Serial.write(rf2);
//Serial.write(0xF0);
//[19]チェックサム
long sum = 0xff - ((0x10 + num + rf1 + rf2) & 0xff);
Serial.write(sum);
delay(10);
参考書籍:XBeeで作るワイヤレスセンサーネットワーク (Make: PROJECTS)

2016年3月4日金曜日

Arduino Pro Mini A6・A7デジタル出力

A6・A7を使うには古いArduino IDEだとboard.txtの書き換えが必要だったみたいですが、Arduino IDE 1.7.8だとeightanaloginputsにすでになっていました。
アナログピンはポートCなのでDDRとPORTレジスタの書き込みはこんな感じ。
//A4・A5・A6・A7をデジタル出力でHIGH
DDRC = B11110000;
PORTC = B11110000;
しかし、A6・A7がHIGHにならない。
調べてみたら「A6 & A7 are analog input only」の文字が。
なんてこった!!

2016年2月12日金曜日

Arduino Uno

電源
動作電圧
5V
入力電圧(推奨)
7~12V (DCジャックもしくはVIN端子から入力)
対応アダプタ
中心電極が+で径2.1㎜のプラグのもの
ピン関連
デジタルI/O(入出力)ピン
14本(うち6本はPWM出力可能)
アナログ入力ピン
6本(デジタルI/Oピンとしても利用可能)
アナログ入力ピンをデジタル出力ピンとして使用すれば最大20ピンを出力として使用出来る。
DC出力電流
1つのI/Oピン当り20mA程度I/Oピン全部の合計100mAまで
(1ピンあたり40mA以上流すと壊れる)
DC出力電流
3.3V出力ピン 50mA

マイコン
ATmega328
Flashメモリ
32KB (うち0.5KBをブートローダーで使用)
SRAM
2KB
EEPROM
1KB
クロックスピード
16MHz

2015年10月9日金曜日

二次元配列/Arduino

Arduinoで二次元配列を使う場合はこんな感じです。
ArduinoにArrayなんて型はありませんでした。
int LED[2][2] ={{2,3},{4,5}};

for(int i=0;i<2;i++){
  for(int j=0;j<2;j++){
    pinMode(LED[i][j], OUTPUT);
    digitalWrite(LED[i][j], HIGH);
  }
}

2015年10月8日木曜日

チャタリング防止/Arduino

オムロン(OMRON)さんのリミットスイッチでチャタリングが起きた為
一瞬(10ms以内)の切り替わりは対応しないようにしました。
もっと簡単な方法があるはず。

int LIMITSWITCH_IN = 2;
boolean limitSwitchBoo;
int CHATTERING_TIME = 10;
unsigned long chatteringTimeStamp = millis();
unsigned long nowMillis;

void setup() {
  limitSwitchBoo = digitalRead(LIMITSWITCH_IN);
  Serial.begin(9600);
  pinMode(LIMITSWITCH_IN, INPUT);
}

void loop() {
  nowMillis = millis();
  //最低10ms経っていないと受け付けない。
  if ((nowMillis - chatteringTimeStamp) > CHATTERING_TIME) {
    //【LOW】HIGHからLOWに切り替わった
    if ((limitSwitchBoo == HIGH) && (digitalRead(LIMITSWITCH_IN) == LOW)) {
      limitSwitchBoo = LOW;
      chatteringTimeStamp = nowMillis;
      limitLowAction();
      //【HIGH】LOWからHIGHに切り替わった
    } else if ((limitSwitchBoo == LOW) && (digitalRead(LIMITSWITCH_IN) == HIGH)) {
      limitSwitchBoo = HIGH;
      chatteringTimeStamp = nowMillis;
      limitHighAction();
    }
  }
}

void limitLowAction() {
  Serial.println("LOW");
}

void limitHighAction() {
  Serial.println("HIGH");
}