omzetten van waarden via UDP
3 berichten
• Pagina 1 van 1
omzetten van waarden via UDP
Ik heb onderstaande code geschreven die twee array's uitleest en hiermee enkele bewerkingen doet.
de resultaten zijn correct als ik het op deze manier doe.
wanneer ik echter de twee array's op laat vullen met (dezelfde) data komende van mijn ethernetshield utp poort via UDP krijg ik telkens een foutief resultaat.
de code voor automatische opvulling.
String real; // variabele voor het Reële deel
String img; // variabele voor het imaginaire deel
kan iemand mij hiermee helpen aub?
- Code: Alles selecteren
#if defined DEBUG
Serial.println("debugmode");
long x[]={-1,-1,3,-4,11,-18,33,2046,-13,24,-12,9,-6,6,-3,5,-3,1,-2,-1,-1,0,0,-2};
long y[]={2,1,-1,0,-1,4,-5,49,-24,-16,5,-5,1,-3,0,-3,1,1,0,0,-1,-1,-1,-3};
#endif
//berekeningen maken in for lussen
//test op nul gezet
preMTE =0;
postMTE = 0;
TTE = 0;
NMTER = 0;
for ( k =0; k <7; k++)
{
preMTE = preMTE + (x[k]*x[k]+y[k]*y[k]);
Serial.print(x[k]);
Serial.print(" ");
Serial.println(y[k]);
}
Serial.println(" ");
MTE = (x[7]*x[7]+ y[7]*y[7]);
Serial.print(x[7]);
Serial.print(" ");
Serial.println(y[7]);
Serial.println(" ");
for ( l =8; l <24; l++)
{
postMTE = postMTE + (x[l]*x[l]+ y[l]*y[l]);
Serial.print(x[l]);
Serial.print(" ");
Serial.println(y[l]);
}
Serial.println(" ");
//berekenen van TTE
for ( m =0; m <24; m++)
{
TTE = TTE + ((x[m]*x[m])+ (y[m]*y[m]));
}
//berekenen van NMTER
NMTER = (preMTE + postMTE);
NMTER = (NMTER/TTE);
NMTER = 10*(log10(NMTER));
de resultaten zijn correct als ik het op deze manier doe.
wanneer ik echter de twee array's op laat vullen met (dezelfde) data komende van mijn ethernetshield utp poort via UDP krijg ik telkens een foutief resultaat.
de code voor automatische opvulling.
String real; // variabele voor het Reële deel
String img; // variabele voor het imaginaire deel
- Code: Alles selecteren
if(packetSize) // als er data is dan...
{
Udp.read(packetBuffer,150); // lees het pakketje in met een lengte van 150
Serial.println("Contents:"); // afdrukken op de serial monitor
String string1; // variabele om verschillende bytes in te lezen
String string2; // variabele om verschillende bytes in te lezen
String string3; // variabele om verschillende bytes in te lezen
String string4; // variabele om verschillende bytes in te lezen
for (int i =54; i < 150; i += 4)//vanaf byte 54 tot einde (150) inlezen in stappen van 4
{
//de vier strings inlezen
string1 = String(packetBuffer[i],HEX);
string2 = String(packetBuffer[i+1],HEX);
string3 = String(packetBuffer[i+2],HEX);
string4 = String(packetBuffer[i+3],HEX);
if (string2.length()==1)
{
string2 = "0" + string2; // als de tweede byte maar 1 karakter telt zetten we er een "0" voor
}
if (string4.length()==1)
{
string4 = "0" + string4;// als de vierde byte maar 1 karakter telt zetten we er een "0" voor
}
real = string1 + string2;//samenstellen van het reele deel
img = string3 + string4;//samenstellen van het imaginaire deel
if (real.startsWith("F"))
{
real = "F" + real;// als het reele deel begint met een "F" zetten we er een "F" voor
}
if (img.startsWith("F"))
{
img = "F" + img;// als het imaginaire deel begint met een "F" zetten we er een "F" voor
}
char s[16];// nodig voor de omzetting van de strings
char t[16];// nodig voor de omzetting van de strings
//omzetting van de strings to long
real.toCharArray(s,16);
img.toCharArray(t,16);
for (j =0; j < 24; j++)
{
x[j] = strtol(s, 0, 16);
Serial.print("x = ");
Serial.println(x[j]);
y[j] = strtol(t, 0, 16);
Serial.print(" y = ");
Serial.println(y[j]);
j++;
} //einde for j vullen array van 24
} //einde for lus
}//einde packetBuffer
//berekeningen maken in for lussen
//test op nul gezet
preMTE =0;
postMTE = 0;
TTE = 0;
NMTER = 0;
for ( k =0; k <7; k++)
{
preMTE = preMTE + (x[k]*x[k]+y[k]*y[k]);
Serial.print(x[k]);
Serial.print(" ");
Serial.println(y[k]);
}
Serial.println(" ");
MTE = (x[7]*x[7]+ y[7]*y[7]);
Serial.print(x[7]);
Serial.print(" ");
Serial.println(y[7]);
Serial.println(" ");
for ( l =8; l <24; l++)
{
postMTE = postMTE + (x[l]*x[l]+ y[l]*y[l]);
Serial.print(x[l]);
Serial.print(" ");
Serial.println(y[l]);
}
Serial.println(" ");
//berekenen van TTE
for ( m =0; m <24; m++)
{
TTE = TTE + ((x[m]*x[m])+ (y[m]*y[m]));
}
//berekenen van NMTER
NMTER = (preMTE + postMTE);
NMTER = (NMTER/TTE);
NMTER = 10*(log10(NMTER));
kan iemand mij hiermee helpen aub?
Advertisement
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
Re: omzetten van waarden via UDP
Denk dat het makkelijkste is om even een dump te doen naar de serial terminal nadat de waarden uit het UDP frame zijn gehaalt. en dan even vergelijken.
of een checksum/parity over alle getallen gebruiken om te zien of er niets is omgevallen. <<-- mijn voorkeur
of net voor de berekening een loopje toevoegen waar je de UDP frame getallen vergelijkt met je constanten.
of een checksum/parity over alle getallen gebruiken om te zien of er niets is omgevallen. <<-- mijn voorkeur
of net voor de berekening een loopje toevoegen waar je de UDP frame getallen vergelijkt met je constanten.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
byte Xor Checksum van long array[]
uitrekenen byte checksum van een long type array , ff pielen . klopt dit nou ?
- Code: Alles selecteren
long x[]={-1,-1, 3,-4,11,-18,33,2046,-13, 24,-12, 9,-6, 6,-3, 5,-3,1,-2,-1,-1, 0, 0,-2};
long y[]={ 2, 1,-1, 0,-1, 4,-5, 49,-24,-16, 5,-5, 1,-3, 0,-3, 1,1, 0, 0,-1,-1,-1,-3};
void setup()
{ Serial.begin(9600);
byte chksm = 0x55; // XORchecksum token
byte *pX = (byte *) x; // byte pointers
byte *pY = (byte *) y; // of? (byte *) &y[0];
for (byte i=0; i<(sizeof(x)-1); i++) // x[] same length as y[]
{ chksm ^= *(pX+i);
chksm ^= *(pY+i); // of? *pY++
}
Serial.println(chksm);
}
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate
3 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Anthonyhaf en 31 gasten