Hello, I've been tinkering with 2 arduinos that communicate with serial, the connections are as follows
GND-GND
RX-TX
TX-RX
The proper sequence should be(worked before):
240
250
1
251
2
252
3
253
4
254
5
255
I'm puzzled by this because the code worked a hour ago, the only difference is me using 2 separate computers for each arduino.
Code for receiver:
unsigned int i, packet=0, newData, armData[5];
bool packetIntegrity=1;
void setup() {
Serial.begin(230400);
}
void loop() {
getDebugData();
}
bool getData() {
Serial.write(1);
//check for data in serial buffer
if(Serial.available()>0) {
packetIntegrity=true;
packet=0;
newData=Serial.read();
//check is fist value in buffer is equal to the startmarker
if(newData==240) {
//while packet integirty is ok
while(packetIntegrity) {
newData=Serial.read();
if(newData==255) {
packetIntegrity=false;
if(packet==5) {return true;}else{return false;}
}
armData[newData-250]=Serial.read();
if(armData[newData-250]<181 && newData-250==packet) {packet++;}else{
packetIntegrity=false;
return false;
}
}
}
}
}
bool getDebugData() {
if(Serial.availableForWrite()==63) {
Serial.write(1);
}
if(Serial.available()>0) {
packetIntegrity=true;
packet=0;
newData=Serial.read();
Serial.print("\n////incoming adress data: ");
Serial.println(newData);
if(newData==240) {
Serial.print("||||Serial data read start!||||");
while(packetIntegrity) {
newData=Serial.read();
Serial.print("\n////incoming adress data: ");
Serial.println(newData);
if(newData==255) {
packetIntegrity=false;
if(packet==5) {
Serial.print("||||All data read||||\nPackets received: ");
Serial.println(packet);
return true;
}
} else {Serial.print("||||Squence Error!||||\nPartial packets received: ");return false;}
armData[newData-250]=Serial.read();
Serial.print("\n////incoming value data: ");
Serial.println(armData[newData-250]);
if(armData[newData-250]<181 && newData-250==packet) {
Serial.print("||||||||Incoming Data ");
Serial.print(newData-249);
Serial.print(": ");
Serial.println(armData[newData-250]);
packet++;
} else {
packetIntegrity=false;
Serial.print("||||!Packet Error!||||\n Packets Received: ");
Serial.println(packet);
return false;
}
}
}
}
}
Code for sender:
const int arm1=A0, arm2=A1, arm3=A2, arm4=A4, arm5=A3;
int shoulder=0, arm=0, elbow=0, wrist=0, finger=0, dta=0;
unsigned int incoming;
void setup() {
Serial.begin(230400);
}
void loop() {
if(Serial.available()>0) {sendData();
Serial.println("||||Serail request||||");
}
}
void getData(unsigned int analogPin, signed int offset, unsigned int deadzone, unsigned int dataValue) {
dta=0;
for(int i=0; i<5; i++) {dta+=analogRead(analogPin);}
dta/=5;
dta=map(dta, 0, 1023, 0, 280);
if(dta>dataValue+5 || dta<dataValue-5) {dataValue=dta+offset;}
}
void sendData() {
incoming=Serial.read();
if(Serial.availableForWrite()==63 && incoming==1) {
Serial.write(240);
Serial.write(250);
Serial.write(1);
Serial.write(251);
Serial.write(2);
Serial.write(252);
Serial.write(3);
Serial.write(253);
Serial.write(4);
Serial.write(254);
Serial.write(5);
Serial.write(255);
incoming=0;
}
}
void packetPrep(unsigned int dataLimit) {
if(dataLimit>255) {dataLimit=255;}
if(((shoulder>dataLimit|| arm>dataLimit) || (elbow>dataLimit || wrist>dataLimit)) || finger>dataLimit) {
getData(arm1, 0, 5, shoulder);
getData(arm2, 0, 5, arm);
getData(arm3, 0, 5, elbow);
getData(arm4, 0, 5, wrist);
getData(arm5, 0, 5, finger);
packetPrep(dataLimit);
}
}
Changing the baud rate does not yield any results.
The Serial.available in the sender if is never equal 0 if any arduino is connected via serial, no matter the code.
serial_receive.ino (2.26 KB)
sender.ino (1.34 KB)