【发布时间】:2017-06-18 19:27:47
【问题描述】:
好的,我已经非常简化了这个问题。我正在尝试将编码器电机反馈发送到将显示在处理中的处理。但错误是这样的: 为“COM3”null 禁用 serialEvent 时出错? 处理:
import processing.serial.*;
Serial port;
int index=0;
String lmotor,rmotor,data,status;
void setup()
{
size(500,500);
port= new Serial(this, "COM3", 9600);
port.bufferUntil('A');
}
void serialEvent(Serial port)
{
if(data!=null)
{
println(data);
data=port.readStringUntil('A');
data=data.substring(0,data.length()-1);
index=data.indexOf(",");
lmotor= data.substring(0, index);
rmotor= data.substring(index+1 , data.length());
}
}
void draw()
{
background(255);
textSize(100);
fill(random(0,255),0,random(0,255));
text(lmotor,50,150);
textSize(100);
fill(0,random(0,255),random(0,255));
text(rmotor, 300,150);
}
arduino/avr 代码:
#include <avr/io.h>
#include <util/delay.h>
#define SETBIT(ADDRESS, BIT) (ADDRESS|=(1<<BIT));
#define CLEARBIT(ADDRESS, BIT) (ADDRESS&=~(1<<BIT));
#define CHECKBIT(ADDRESS, BIT) (ADDRESS & (1<<BIT));
char c;
int sfl=0,sfr=0,y=0,temp;
void interrupt_init()
{
cli();
EIMSK=0x03;
EICRA=0x0A;
sei();
}
void encoder_pin_config_init()
{
DDRD=DDRD & 0xF3;
//INTERNALPULLUPS
SETBIT(PORTD, PD3);
SETBIT(PORTD, PD2);
}
void byte_init (int baud)
{
UBRR0H = (baud>>8); // shift the register right by 8 bits
UBRR0L = baud; // set baud rate
UCSR0B|= (1<<TXEN0)|(1<<RXEN0); // enable receiver and transmitter
UCSR0C|= (1<<UCSZ00)|(1<<UCSZ01); // 8bit data format
}
void byte_transmit (unsigned char data)
{
while (!( UCSR0A & (1<<UDRE0))); // wait while register is free
UDR0 = data; // load data in the register
}
unsigned char byte_receive (void)
{
while(!(UCSR0A) & (1<<RXC0)); // wait while data is being received
return UDR0; // return 8-bit data
}
void setup() {
interrupt_init();
byte_init(103);
encoder_pin_config_init();
Serial.begin(9600);
pinMode(4,HIGH);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
}
void loop() {
digitalWrite(4, HIGH);
digitalWrite(5,LOW);
digitalWrite(6, HIGH);
digitalWrite(7,LOW);
temp=sfl;
while(temp>0)
{
y=temp%10;
c=y+'0';
byte_transmit(c);
temp=temp/10;
}
byte_transmit(',');
temp=sfr;
while(temp>0)
{
y=temp%10;
c=y+'0';
byte_transmit(c);
temp=temp/10;
}
byte_transmit('A');
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(4,LOW);
}
ISR(INT0_vect)
{
sfl++;
}
ISR(INT1_vect)
{
sfr++;
}
【问题讨论】:
-
正确缩进你的代码。这不容易阅读。
-
@JLH 我已经编辑了这个问题,您现在可以再次查看。
标签: python arduino processing avr avr-gcc