26.05.2013, 00:03 | #11 |
Старший Пользователь
Регистрация: 22.10.2012
Регион: 78, 98
Сообщений: 758
|
а обязательно побитово слать? помню у меня тоже были проблемы с бинарной отправкой. в хексе все нормально слалось.
__________________
В работе Китайнедожып+медиацентр на андроиде |
26.05.2013, 04:15 | #12 |
Гуру
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
|
уже перевел в hex, те же, только в профиль.
__________________
Мой проект: Citroen Xsara Android CarPC |
05.08.2013, 02:57 | #13 |
Гуру
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
|
Завел частично индикатор
Вот скетч, выводящий слово CODE Код:
#define I2C_ADDR 0x38 #define I2C_SEND_BUFFER_SIZE 17 #include <Wire.h> void setup() { delay(5000); //Serial.begin(115200);// Wire.begin(); initLCD(); /* Wire.beginTransmission(I2C_ADDR); uint8_t dataArray3[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0, 0, 0, 0, 0, 169, 99, 1, 20, 96, 161, 0, 0, 0 }; // uint8_t dataArray3[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0 }; Wire.write(dataArray3, I2C_SEND_BUFFER_SIZE); Wire.endTransmission(); */ unsigned char data[14]; data[0] = 0x00; data[1] = 0x00; data[2] = 0x00; data[3] = 0x00; data[4] = 0x00; data[5] = 0xA9; data[6] = 0x63; data[7] = 0x01; data[8] = 0x14; data[9] = 0x60; data[10] = 0xA1; data[11] = 0x00; data[12] = 0x00; data[13] = 0x00; sendDataToLCD(data); /* Wire.beginTransmission(I2C_ADDR); uint8_t dataArray4[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 2, 0, 0, 0, 21, 108, 224, 98, 12, 20, 96, 0, 0, 0 }; //uint8_t dataArray4[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; Wire.write(dataArray4, I2C_SEND_BUFFER_SIZE); Wire.endTransmission(); */ unsigned char data2[14]; data2[0] = 0x02; data2[1] = 0x00; data2[2] = 0x00; data2[3] = 0x00; data2[4] = 0x15; data2[5] = 0x6C; data2[6] = 0xE0; data2[7] = 0x62; data2[8] = 0x0C; data2[9] = 0x14; data2[10] = 0x60; data2[11] = 0x00; data2[12] = 0x00; data2[13] = 0x00; sendDataToLCD(data2); } void loop() { } void sendDataToLCD(unsigned char *data) { unsigned char buffer[I2C_SEND_BUFFER_SIZE]; byte i = 0; buffer[0] = 0xE0; buffer[1] = 0xCB; buffer[2] = 0xF0; for (i = 3; i < I2C_SEND_BUFFER_SIZE; i ++) { buffer[i] = data[i - 3]; } Wire.beginTransmission(I2C_ADDR); Wire.write(buffer, I2C_SEND_BUFFER_SIZE); Wire.endTransmission(); } void initLCD() { /* init E0CBF000000000000000 E0CBF020000000000000 E0CBF000000000000000 E0CBF020000000000000 */ /* Wire.beginTransmission(I2C_ADDR); uint8_t dataArray[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; Wire.write(dataArray, I2C_SEND_BUFFER_SIZE); Serial.print(Wire.endTransmission()); Wire.beginTransmission(I2C_ADDR); uint8_t dataArray2[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; Wire.write(dataArray2, I2C_SEND_BUFFER_SIZE); Serial.print(Wire.endTransmission()); */ unsigned char data[14]; byte i = 0; for (i = 0; i <= 14; i++) { data[i] = 0x00; } sendDataToLCD(data); data[0] = 0x20; sendDataToLCD(data); } Нашел только куски кода для 1:2 Может у кого-то есть готовый кусок кода для случая 1:3 ?
__________________
Мой проект: Citroen Xsara Android CarPC |
11.08.2013, 20:05 | #14 |
Гуру
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
|
Раскурил индикатор.
Если кому понадобится, вот скетч для управления любым сегментом через COM-порт Код:
#define I2C_ADDR 0x38 #define I2C_SEND_BUFFER_SIZE 17 #include <Wire.h> void setup() { Serial.begin(115200);// Wire.begin(); initLCD(); } void loop() { String content = ""; char character; while(Serial.available()) { character = Serial.read(); content.concat(character); } if (content != "") { Serial.println(content); if (content == "!") { Serial.println("Reset"); initLCD(); } else { int numArgs = 0; int beginIdx = 0; int idx = content.indexOf(","); String arg; Wire.beginTransmission(I2C_ADDR); while (idx != -1) { numArgs++; arg = content.substring(beginIdx, idx); Serial.println((byte)arg.toInt()); Wire.write((byte)arg.toInt()); if (numArgs == 17) { Serial.println('#'); Wire.endTransmission(); Wire.beginTransmission(I2C_ADDR); } beginIdx = idx + 1; idx = content.indexOf(",", beginIdx); } arg = content.substring(beginIdx); Serial.println((byte)arg.toInt()); Wire.write((byte)arg.toInt()); Wire.endTransmission(); } } } void sendDataToLCD(unsigned char *data) { unsigned char buffer[I2C_SEND_BUFFER_SIZE]; byte i = 0; Wire.beginTransmission(I2C_ADDR); buffer[0] = 0xE0; buffer[1] = 0xCB; buffer[2] = 0xF0; for (i = 3; i < I2C_SEND_BUFFER_SIZE; i ++) { buffer[i] = data[i - 3]; } Wire.write(buffer, I2C_SEND_BUFFER_SIZE); Wire.endTransmission(); } void initLCD() { /* init E0CBF000000000000000 E0CBF020000000000000 E0CBF000000000000000 E0CBF020000000000000 */ unsigned char data[14]; byte i = 0; for (i = 0; i <= 14; i++) { data[i] = 0x00; } sendDataToLCD(data); data[0] = 0x20; sendDataToLCD(data); } Код:
224,203,240,0,0,0,0,0,169,99,1,20,96,161,0,0,0,224,203,240,2,0,0,0,21,108,224,98,12,20,96,0,0,0 Проверено под Виндой под запущенным USBWebserver. Установка проста - распаковать в корневую папку вебсервера, в файле index.php указать номер порта и скорость (сейчас COM3 и 9600). Приложение будет доступно по адресу http://localhost/com/ Можно задавать значения в десятичном, шестнатеричном, бинарном форматах. Все значения будут немедленно отправлены в индикатор. Можно стереть все символы кнопкой Reset.
__________________
Мой проект: Citroen Xsara Android CarPC |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
|
|