Я пытаюсь отобразить 4 отдельных цифры на 7-сегментном дисплее. Эти числа сделаны из программы, а Processing получает число, подобное 9561, и через математику я выделяю 9 5 6 1 на отдельные цифры.Отправка целого из обработки в Arduino, байты не могут быть прочитаны
, так как одна цифра имеет 4 бита, я использую целое число для последовательного сжатия чисел, которое в его полной десятичной форме выглядит как 5721. Затем я отправляю это целое число в Arduino, где у меня есть 2 байта с последовательным запуском Serial .читать();
Моя проблема заключается в том, что мой 7-сегментный 4-значный дисплей отображает только 9500, что означает, что x2 равно 00, что означает, что 61 теряется в переводе.
Более того, когда я ускоряю время (t) или время мультиплексирования, 95 будет мигать над 00, и я подтвердил его, когда я сделал seg0 и seg1 массива 0 и 0. Когда t = 3 это происходит, но ничего выше, чем сказать, 8 не имеет этой проблемы.
Я должен также упомянуть в моем переключателе() случае по умолчанию отображает 0.
Обработка
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 (соответствующие области, его много кода
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);
}
Хранить в шахте, Arduino является C++ не Java. – DejaVuSansMono