de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
Queen Quiazon
Queen Quiazon
質問

arduinoをインストールしたマシンで、USBを抜くと突然電源が入る。

パソコンのUSBを抜くと、突然マシンの電源が入るのはなぜですか?arduinoボードのオートリセット機能と関係があるのでしょうか?

ここに画像の説明を入力してください1。

String input = "";

void setup(){

  Serial.begin(9600);   // Sets up communication with the serial port

  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);   // for start of program operation

  digitalWrite(6,HIGH);
  digitalWrite(7,HIGH);
  digitalWrite(8,HIGH);
  digitalWrite(9,HIGH);
  digitalWrite(10,HIGH);

  digitalWrite(11,LOW);

}

void loop(){

  int recipe;
  //Serial.print("Enter recipe number: ");

  while(Serial.available()==0){    // Waits for data from serial port
  }

  while(Serial.available() > 0){
    int data = Serial.read();
      // convert the incoming byte to a char
      // and add it to the string
    input += (char)data;

    recipe = input.toInt()+'0';    //recipe=0 if not a digit
    if(recipe == '0')
      recipe = data;

    if(data == '\n'){
      //Serial.print("Recipe: ");
      //Serial.println(recipe);
      //Serial.print("String: ");
      //Serial.println(input);
      input = "";
    }
  }

  if(recipe == 's'){     
    digitalWrite(11,HIGH);
    delay(1000);
    digitalWrite(11,LOW);

    digitalWrite(6,LOW);
    digitalWrite(7,LOW);
    digitalWrite(8,LOW);
    digitalWrite(9,LOW);
    digitalWrite(10,LOW);    
  }

  else if(recipe>'0' && recipe<'32'){    

    recipe = recipe-'0';
    char binary[7] = {0};   // This is where the binary representation will be stored
    recipe += 32; // Adding 32 so that there will always be 6 digits in the string
    itoa(recipe,binary,2);  // Convert recipe to a string of base 2 and save it in array 'binary'
    char* signals = binary + 1; // Get rid of the most significant digit to get the 5 bits

  //Serial.print(signals);  // Print out the signals in binary

    int i;
    for(i=0; i<5; i++){
      if(signals[i] == '0')
        signals[i] = '1';
      else
        signals[i] = '0';
      digitalWrite(i+6, signals[i]-'0');    // write to pin; converts the bit of the string to HIGH or LOW
      //Serial.print(signals[i]);
    }

  }
  else
    loop();

}
0 2016-03-10T03:25:20+00:00 2
Dave X
Dave X
編集された質問 10日 3月 2016 в 4:34
Arduino
arduino-mega
project
electronics
home-automation
automatization
Nick Gammon
Nick Gammon
10日 3月 2016 в 4:39
2016-03-10T04:39:21+00:00
さらに
ソース
編集
#40112613

loopからloop` を呼び出さないようにしてください。すぐに RAM が足りなくなり、スケッチがクラッシュしてしまいます。

void loop(){

  int recipe;
  //Serial.print("Enter recipe number: ");

  while(Serial.available()==0){    // Waits for data from serial port
  }

  while(Serial.available() > 0){
...

  }
  else
    loop();

}

Highになるはずのピンには、プルアップ抵抗をお勧めします。

  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);   // for start of program operation

  digitalWrite(6,HIGH);
  digitalWrite(7,HIGH);
  digitalWrite(8,HIGH);
  digitalWrite(9,HIGH);
  digitalWrite(10,HIGH);

Arduinoの電源が入ると、1秒ほどブートローダに入ります。これらのピンはまだHighに設定されていません。プルアップ抵抗を使用すれば、LowにしたいときまでHighであることを確認できます。


Arduinoの電源を切るとマシンの電源が入るということであれば、やはりプルアップ抵抗を使って、指令があるまで動作しないようにするのがよいでしょう。


プルアップ抵抗はどこに、どのように接続するのですか?

一般的にプルアップ抵抗は10k程度で、ピンから+5Vに接続されます。もちろん、Arduinoに電源が供給されていない場合は、+5Vの別の電源が必要です。


ループからループへ呼び出さないようにする。

この2行を削除してください。

else
    loop();

loop` が終了したとき、すぐに再コールされますか。そのようにする必要はありませんし、むしろバッドアイディアです。

Nick Gammon
Nick Gammon
編集した答え 10日 3月 2016 в 4:52
1
0
Dave X
Dave X
10日 3月 2016 в 4:39
2016-03-10T04:39:56+00:00
さらに
ソース
編集
#40112614

あなたの設定にあるこの行のようです。

  digitalWrite(11,LOW);

...すると接点入力211がトリガーとなり、スケッチが起動するたびに "D11がオフからオンに切り替わるときにプログラム動作開始"を実行します。

arduinoがリセットされると、このラインをLowにします。 オートリセットはこれを開始します。

この行を以下のように変更することで、コードは 's' を取得するまで待ってから、この行をLowに引きます。

  digitalWrite(11,HIGH);

私はArduinoを持っていませんが、おそらくhttp://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection、オートリセットの問題を管理するのに役立つかもしれません。

Dave X
Dave X
編集した答え 10日 3月 2016 в 5:05
0
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Roxana Elizabeth CASTILLO Avalos
登録済み 6日前
2
Hideo Nakagawa
登録済み 1週間前
3
Sergiy Tytarenko
登録済み 1週間前
4
shoxrux azadov
登録済み 1週間前
5
Koreets Koreytsev
登録済み 1週間前
JA
© de-vraag :年
ソース
arduino.stackexchange.com
ライセンス cc by-sa 3.0 帰属