Тема: PCF8576 + Arduino
Показать сообщение отдельно
Старый 11.08.2013, 20:05   #14
s.m.
Гуру
 
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
s.m. is a splendid one to beholds.m. is a splendid one to beholds.m. is a splendid one to beholds.m. is a splendid one to beholds.m. is a splendid one to beholds.m. is a splendid one to beholds.m. is a splendid one to behold
По умолчанию

Раскурил индикатор.

Если кому понадобится, вот скетч для управления любым сегментом через 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); 
}
Вот такая строка выводит слово CODE

Код:
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
Для удобного манипулирования такими строками написал маленькое веб-приложение на PHP, которое формирует и отправляет в указанный порт такие строки.
Проверено под Виндой под запущенным USBWebserver.
Установка проста - распаковать в корневую папку вебсервера, в файле index.php указать номер порта и скорость (сейчас COM3 и 9600).

Приложение будет доступно по адресу http://localhost/com/

Можно задавать значения в десятичном, шестнатеричном, бинарном форматах. Все значения будут немедленно отправлены в индикатор.
Можно стереть все символы кнопкой Reset.
Вложения
Тип файла: zip com.zip (36.2 Кб, 559 просмотров)
__________________
Мой проект: Citroen Xsara Android CarPC
s.m. вне форума   Ответить с цитированием