Хорошо сделана пошаговая отладка, такая как двойная проверка электропроводки на стороне электроники и тестирование моргания с одним Arduino, чтобы изолировать проблему.
Если эскиз Blink - это единственный код Arduino, который вы загрузили на свою доску, этого будет недостаточно.Обработка отправляет сообщения в Arduino (именно поэтому вы видите, что светодиод RX включен), но в коде Arduino нет ничего, что инициализирует Последовательная связь
Как вы можете видеть в этом примере,в setup()
Последовательная связь инициализируется со скоростью 9600 бод (скорость связи, 9600 байт / символ в секунду):
Serial.begin(9600);
Затем в draw (), если есть доступные данные, каждый символ читается, затемпечатается по одному с префиксным сообщением:
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
Если вы загрузите пример, связанный, если у вас есть один последовательный порт, вы должны увидеть оба RX, а затем немного позже после индикатора TXмигает при запуске эскиза обработки.Если вы закроете этот эскиз, откройте Serial Monitor в Arduino и наберите что-нибудь, а затем нажмите enter, вы увидите отладочное сообщение, считанное с Arduino.
Используя эти понятия, вы могли бы написать простой эскиз, например, так:
int incomingByte = 0; // for incoming serial data
void setup() {
pinMode(9, OUTPUT);
Serial.begin(9600);
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
// if we received ASCII character '1', turn LED on
if(incomingByte == '1'){
digitalWrite(9,HIGH);
}
// if we received ASCII character '0', turn LED off
if(incomingByte == '0'){
digitalWrite(9,LOW);
}
}
}
Загрузка этого эскиза на Arduino позволит вам набрать 1
в Serial Monitor и нажать Enter, чтобы включить светодиод, или 0
, чтобы выключить его.
Осталось только однодля отправки тех же данных из обработки:
import processing.serial.*;
Serial arduino;
void setup(){
try{
arduino = new Serial(this, Serial.list()[0], 9600);
}catch(Exception e){
println("error connecting to serial port, double chek USB connection, serial port and close other programs using Serial");
e.printStackTrace();
}
}
void draw(){
}
void keyPressed(){
if(key == '1'){
if(arduino != null){
arduino.write('1');
}else{
println("arduino serial connection wasn't initialised");
}
background(255);
}
if(key == '0'){
if(arduino != null){
arduino.write('0');
}else{
println("arduino serial connection wasn't initialised");
}
background(0);
}
}
Незначительное примечание: обратите внимание, что я не использую delay()
в обработке, я рекомендую , используя вместо этого millis () , поскольку это не так.не блокирует выполнение кода, как delay()
делает.
Таким образом, вышеприведенное выглядит как небольшой кусок кода, просто чтобы мигнуть светодиодом, но смысл в том, чтобы понять основы последовательной связи, которые будут полезны нав долгосрочной перспективе:
- инициализация последовательной связи с Arduino (понять скорость передачи в бодах)
- базовое чтение / запись байтов по Serial
- initialising последовательный обмен данными из обработки и отправки данных
Возвращаясь к исходному вопросу, вы упустили важную деталь, касающуюся библиотеки Arduino, которую вы используете в обработке: она опирается на специальный эскиз Arduino (прошивка) называется Фирмата.Вы сможете прочитать больше об этом и о том, как использовать библиотеку в этом Arduino and Processing учебном пособии.
Как указано в учебном пособии, вам необходимо сначала загрузить этот эскиз из Arduino> Примеры> Фирмы> СтандартФирматы .Кроме того, в качестве скорости передачи установлено значение 57600
, а не 9600
, поэтому вам необходимо обновить код следующим образом:
arduino = new Arduino(this, Arduino.list()[0], 57600);