okayh j'ai beaucoup simplifié la question. J'essaie d'envoyer le signal du moteur du codeur au traitement qui sera affiché sur le traitement. mais l'erreur vient quelque chose comme: erreur désactivant serialEvent pour "COM3" null? traitement:Erreur lors de la désactivation de 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/Code 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++;
}
Indentez correctement votre code. Ce n'est pas facile à lire. – TomServo
@JLH J'ai édité la question que vous pouvez vérifier à nouveau maintenant. –