Ich versuche, vier separate Ziffern auf meiner 7-Segment-Anzeige anzuzeigen. Diese Nummern werden aus einem Programm und Processing erhält eine Zahl wie 9561, und durch Mathematik, isoliere ich 9 5 6 1 in einzelne Ziffern.Senden von Integer von Verarbeitung an Arduino, Bytes können nicht gelesen werden
Da eine einzelne Ziffer 4 Bits ist, verwende ich eine Ganzzahl, um die Zahlen sequentiell zu komprimieren, die in voller dezimaler Form zu 5721 erscheint. Ich sende diese ganze Zahl an das Arduino, wo ich 2 Bytes sequentiell seriell ausgeführt habe .lesen();
Mein Problem ist, dass meine 7-Segment 4-stellige Anzeige nur 9500 anzeigt, was bedeutet, dass x2 00 ist, was bedeutet, dass die 61 in der Übersetzung verloren gehen.
Noch mehr, wenn ich die Zeit (t) oder die Zeit für das Multiplexen beschleunigen, blinkt die 95 über 00 und ich bestätigte es, wenn ich seg0 und seg1 des Arrays 0 und 0. Wenn t = 3 Dies geschieht, aber etwas Höher als sagen, 8 hat dieses Problem nicht.
sollte ich auch in meinem Schalter erwähnen() der Standardfall zeigt eine 0
Verarbeitung
void draw()
{
seg[0] = 9;
seg[1] = 5;
seg[2] = 6;
seg[3] = 1;
int x = (seg[pos+3] & 0x000f)<<12|((seg[pos+2]) & 0x000f)<<8|(seg[pos+1] & 0x000f)<<4|((seg[pos] & 0x000f)); //3210
myPort.write(x);
//
int disp1 = x;
int disp2 = (x & 0x00f0)>>4;
int disp3 = (x & 0x0f00)>>8;
int disp4 = (x & 0xf000)>>12;
//
print(disp1, '\n', disp2, '\n', disp3, '\n', disp4, '\n', '\n');
}
Arduino (Relevante Bereiche, seine viel Code
void digitdisplay(byte x,byte x2)
{
//unsigned char tn = int (num/1000);
//if (tn>10)
//{
// tn = tn - 10;
//}
//
//unsigned char hn = int (num/100)%10;
//unsigned char tenn = int (num/10)%10;
//unsigned char on = int (num%10);
int disp[4];
disp[0] = (x & 0x0f);
disp[1] = (x & 0xf0)>>4;
disp[2] = (x2 & 0x0f);
disp[3] = (x2 & 0xf0)>>4;
numberselect(disp[0]);
digitselect(1);
delay(t);
numberselect(disp[1]);
digitselect(2);
delay(t);
numberselect(disp[2]);
digitselect(3);
delay(t);
numberselect(disp[3]);
digitselect(4);
delay(t);
}
void loop()
{
int sen = analogRead(A0);
int maxrange = (sen*maxval);
byte x,x2;
if (Serial.available()>2)
{ // If data is available to read,
x=Serial.read();
x2=Serial.read();
}
//shiftlight(maxrange);
digitdisplay(x,x2);
}
Halten in Mine mit senden, ist Arduino C++ nicht Java. – DejaVuSansMono