Mengapa memulai monitor serial memulai kembali sketsa?

31

Jika saya mengunggah sketsa yang mengirim data serial, saya langsung melihat lampu LED TX / RX setelah sketsa diunggah. Jika saya kemudian memulai monitor serial, sketsa tersebut muncul untuk memulai kembali.

Sketsa minimum yang menunjukkan perilaku ini:

void setup()
{
    Serial.begin(9600);
    Serial.println("Setup");
}

void loop()
{
  Serial.println("Loop");
  delay(1000);
}

Diuji dengan beberapa papan dan versi IDE untuk Mac dan Windows.

Contoh output - kembali ke "Pengaturan" ketika saya membuka monitor serial:

Mengulang kembali

Kenapa ini?

Cybergibbons
sumber
5
Saya belum pernah melihat sketsa yang menggunakan serial tidak melakukan ini, jadi secara harfiah sketsa apa pun.
Cybergibbons
Saya punya masalah terpisah. Leostick Arduino (dan lainnya) tidak autoreset lagi. Bagaimana cara saya memperbaruinya?
CMCDragonkai

Jawaban:

33

Arduino menggunakan sinyal RTS (Request To Send) (dan saya pikir DTR (Data Terminal Ready) ) untuk reset otomatis. Jika Anda mendapatkan terminal serial yang memungkinkan Anda mengubah pengaturan kontrol aliran, Anda dapat mengubah fungsi ini.

Terminal Arduino tidak memberi Anda banyak opsi dan itulah standarnya. Orang lain akan memungkinkan Anda untuk mengonfigurasi lebih banyak. Mengatur kontrol aliran ke tidak ada akan memungkinkan Anda untuk menghubungkan / memutuskan dari serial tanpa mengatur ulang papan Anda. itu cukup berguna untuk debugging ketika Anda ingin cukup tancapkan konektor dan melihat output tanpa harus memulai sketsa.

Cara lain untuk menonaktifkan reset otomatis adalah dengan meletakkan pull up resistor pada pin reset.

Menonaktifkan Reset Otomatis Pada Koneksi Serial

sachleen
sumber
2
Arduino Unos dapat diperbaiki dengan kapasitor 10 μF di RESET dan GND. Ini berfungsi untuk satu instalasi yang pernah saya gunakan, sejauh ini ...
scruss
1
Saya mencoba menggunakan Putty , menghubungkan ke port COM Arduino muncul di (COM16 dalam kasus saya). Ini masih mengatur ulang Arduino jika "Kontrol aliran" di Koneksi / Serial diatur ke "Tidak Ada" (opsi lain adalah "XON / XOFF", "RTS / CTS", dan "DSR / DTR"). Saya menggunakan Putty versi 0.60.
Peter Mortensen
-cont: Diadili pada Arduino Uno R3.
Peter Mortensen
Duemilanove dan Uno memiliki jejak berlabel "EN RESET" yang mengontrol perilaku ini. Hapus jejak itu untuk menonaktifkan setel ulang otomatis. Solder kawat melewati bantalan untuk mengaktifkannya kembali.
mhopeng
12

Kebenaran selalu ada dalam lembar data, skema dan kode:

UNO Arduino sebenarnya menggunakan /DTRgaris untuk memicu reset, seperti yang Anda lihat pada lembar data berikut:

atur ulang skematis

zmo
sumber
Tautan ke gambar skematis Anda rusak.
linhartr22
1
Terima kasih, saya perbaiki! Saya benar-benar berpikir bahwa SO adalah caching gambar, tetapi sepertinya tidak, jadi saya akan memastikannya selalu menyala.
zmo
Sekali lagi, itu rusak. Mungkin Anda bisa menambahkannya sebagai gambar menggunakan opsi imgur StackExchange? Cukup klik opsi 'gambar' di bilah alat editor.
selesai, terima kasih atas tipnya (saya benar-benar memiliki situs saya sendiri selama 10 hari karena saya melakukan perawatan, yang hanya sementara)
zmo
1
Ya, tetapi apa yang sebenarnya terjadi? Apakah karena cara ATmega16U2 diprogram (menyatakan PD7 rendah ketika port COM dibuka oleh suatu program?)? Atau mengikuti beberapa standar untuk DTR?). Dan apa implikasi C5? - apakah ini akan mengatur ulang prosesor utama untuk kedua transisi (rendah ke tinggi & tinggi ke rendah)? Berapa kira-kira lebar pulsa (dalam mikrodetik) pada pin reset prosesor utama dan seperti apa bentuknya?
Peter Mortensen
1

Ini memperbaiki masalah

import os
import sys
import termios
import fcntl

        self.fd = sys.stdin.fileno()

        # Stop resetting the arduino on serial connect

        self.newattr = termios.tcgetattr(self.fd)
        self.newattr[2] = self.newattr[2] & ~termios.HUPCL
        termios.tcsetattr(self.fd, termios.TCSANOW, self.newattr)
Julian Lewis
sumber