Я изо всех сил пытался написать очень простую программу Arduino, которая увеличивает контакты адреса в EPROM, а затем считывает данные через другие контакты. Когда мне не удалось сделать что-то столь же простое, как приращение массива логических значений (MSB для обоих значений также почти всегда застревает на 1), я предполагал, что мой код должен быть испорчен, но затем он начал отправлять дважды как столько символов, сколько должно (Serial.println(char);
), чего не было при отправке строк. Затем начали происходить еще худшие вещи, например, устройство полностью не отвечало, когда во время компиляции не было обнаружено ошибок. Так что мне нужно знать, сломан ли мой код или моя Arduino? Я пробовал это на всех скоростях передачи, и вот некоторые из результатов, которые я получил. Обратите внимание, что я вставил в свой код задержки, чтобы замедлить работу, что не внесло изменений. Мне пришлось сделать снимок экрана, потому что символы не вставляли фрагмент.
А вот мой наполовину запеченный код, который, как вы заметите, полон циклов для отправки отдельных символов за раз (потому что это позволяет избежать некоторых безумных действий).
/**
* EEPROM Reader/Dumper for EPROMS or EEPROMS.
*
* @version 1.0.0.0
* @author Bit Fracture
* @date 2015.05.23
*/
//Defining the address lines (four additional pins are manual)
int a_pins[10] = {2,3,4,5,6,7,8,9,10,11};
//Defining the 8-bit data pins
int d_pins[8] = {12,13,14,15,16,17,18,19};
//Store our current address (start at binary 0)
boolean address[10] = {0,0,0,0,0,0,0,0,0,0};
//Store our serial output data (start at binary 0)
boolean data[8] = {0,0,0,0,0,0,0,0};
void setup()
{
//Start communication with the computer
Serial.begin(115200);
delay(100);
//Set address pins to output
for (int i=0; i < sizeof(a_pins); i += 1)
{
pinMode(a_pins[i], OUTPUT);
//Tell Serial this pin's status
Serial.println("PO: " + (a_pins[i]));
delay(100);
}
//Set data pins as input
for (int i=0; i < sizeof(d_pins); i += 1)
{
pinMode(d_pins[i], INPUT);
//Tell Serial this pin's status
Serial.println("PI: " + (d_pins[i]));
delay(100);
}
//Warn start
Serial.println("BEGINNING TRANSMISSION");
}
void loop()
{
//Calculate new binary address
boolean carry = 1; //Start with a carry to initiate increment process
for (int i=0; i < sizeof(address); i += 1)
{
boolean _temp = ((address[i] || carry) && (!address[i] || !carry));
carry = (address[i] && carry);
address[i] = _temp;
}
//Set output pins to new values
for (int i=0; i < sizeof(a_pins); i += 1)
{
digitalWrite(a_pins[i], address[i]);
}
//Allow for the changes to propagate through the EPROM circuitry
delay(250);
//Read the inputs
for (int i=0; i < sizeof(d_pins); i += 1)
{
data[i] = digitalRead(d_pins[i]);
}
//Output the address
for (int i = sizeof(address); i > 0; i--)
{
if (address[i] == 1)
Serial.print("1");
else
Serial.print("0");
}
Serial.print(": ");
//Output the value
for (int j = sizeof(data); j > 0; j--)
{
if (data[j] == 1)
Serial.print("1");
else
Serial.print("0");
}
Serial.println();
//Keep things from going too fast for now
delay(1000);
}
Проще говоря: мне нужно понять, почему похоже, что последовательные данные вначале стремительно выводятся в память программы вместо того, чтобы отправлять строку, которую они должны были, и почему я не могу сделать что-то столь же простое, как приращение двоичного числа. и вывести на серийник!
Спасибо всем