Добрый день форумчане! укажите на ошибку уже всю голову сломал…
Суть проблемы: обращаюсь к устройству оно в ответ шлёт данные через 1-wire uart, но при попытке их принять получаю ерунду…
Вот собственно код:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 3);
const byte zero = 0x12;
char buffer1[4];
byte com[9];
void setup()
{
pinMode(4, OUTPUT); //управление питанием устройства
pinMode(3, OUTPUT);
digitalWrite(4, LOW);
digitalWrite(3, LOW);
delay(1000);
digitalWrite(4, HIGH);
delay(20);
digitalWrite(3, HIGH);
delay(9);
mySerial.begin(9600);
readZGC();
if (mySerial.available())
for (int i=0; i<8; i++)
com[i] = mySerial.read();
Serial.begin(9600);
for (int i=0;i<9;i++)
Serial.println(com[i]);}
void loop() {
}
void readZGC()
{
readpgaep(zero);
}
void readpgaep(byte a)
{
mySerial.write((byte)0x55); //Обращение к устройству
mySerial.write((byte)0x02); //Обращение к EEPROM устройства
mySerial.write((byte)a); //Адрес EEPROM 1*
mySerial.write((byte)0x00); //Адрес EEPROM
mySerial.write((byte)0x55); //Обращение к устройству
mySerial.write((byte)0x20); //Чтение данных из адреса a
}
Данные из монитора порта:
16:52:50.711 → 85
16:52:50.711 → 2
16:52:50.744 → 18
16:52:50.744 → 0
16:52:50.744 → 85
16:52:50.744 → 255
16:52:50.744 → 255
16:52:50.744 → 255
А вот что показывает Logic:
Ошибка №1. Код вставлен неправильно. Так его никто изучать и обсуждать не будет;
Ошибка №2. Протокол из монитора порта надо вставлять текстом, а не картинкой.
Спасибо поставил задержку и проверку и всё получилось!
Не уверен что корректно:
mySerial.begin(9600);
readZGC();
delay(50);
n = mySerial.available();
while (i<n)
if (mySerial.available())
{com[i] = mySerial.read();
i++;}
Serial.begin(9600);
for ( i=0;i<n;i++)
Serial.println(com[i],HEX);
что получилось-то?
В ответ получаете 6 байт, что послали или от чипа что-то начало приходить?
Ваш код приема все еще очень кривой, ибо его работа напрямую зависит от задержки в операторе delay(). Уберите задержку - у вас даже с вашими “проверками” ничего работать не будет.