![]() |
|
|
#1 |
|
Junior Member
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0 ![]() |
Форум читаю давно, пусть не смущает дата моей регистрации
![]() Суть проблемы имеем простенький скетч для Arduino Pro Mini, который выводит полученные символы на наш дисплей. Код:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup(){
lcd.begin(20, 4);
Serial.begin(9600);
}
void loop()
{
while(Serial.available() == 0);
lcd.write(Serial.read());
}
Код:
#!/usr/bin/python
# -*- coding: utf-8 -*-
file = open('/dev/ttyUSB0', 'w')
file.write("this is parta!!!!!!!")
file.close()
при выполнении скрипта выводиться только первая буква один раз t. такое же поведение и с командой типа Код:
echo "bla bla" > /dev/ttyUSB0 Но если выполнять в интерпретаторе, то все огонь Пробовал разные настройки порта, задержки в скрипте, не дало результата. Может кто сталкивался с данной проблемой? Или парочку идей для решения проблемы?
|
|
|
|
|
|
#2 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
А если так попробовать?
Код:
void loop()
{
if(Serial.available());
lcd.write(Serial.read());
}
|
|
|
|
|
|
#3 |
|
Junior Member
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0 ![]() |
И так тоже пробывал.
|
|
|
|
|
|
#4 |
|
Senior Member
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1312 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
lcd.write запишет символ в LCD, а lcd.print строку. И при приёме из порта, надо дождаться конца строки.
|
|
|
|
|
|
#5 |
|
Junior Member
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0 ![]() |
Конец строки тоже пытался отловить, не увы, не дало результата.
Забыл сказать что под windows все работает как задумано, а под Openwrt получается такая лабуда. Среди опытов заметил если выставить скорость равную 115200, то на экран попадает ровно 8 символов. |
|
|
|
|
|
#6 |
|
Junior Member
Регистрация: 28.09.2014
Сообщений: 4
Вес репутации: 0 ![]() |
Победа!
Выкладываю работающий скетч для Arduino и скрипт на python По поводу скетча, для экрана 20х4, умеет работать с русским языком. Функцию перекодировки взял у DiHalt, LiquidCrystalRus как я понял не умеет работать с экранами 20х4 плюсом же идут мелкие не понятные баги. Скетч: Код:
#include <LiquidCrystal.h>
/******/
//Таблица перекодировки в русские символы.
static const unsigned char PROGMEM convert_HD44780[64] =
{
0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4,
0xA5,0xA6,0x4B,0xA7,0x4D,0x48,0x4F,0xA8,
0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB,
0xAC,0xE2,0xAD,0xAE,0xAD,0xAF,0xB0,0xB1,
0x61,0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7,
0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0x6F,0xBE,
0x70,0x63,0xBF,0x79,0xE4,0x78,0xE5,0xC0,
0xC1,0xE6,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7
};
static uint8_t lcd_rus(uint8_t c)
{
if (c > 191)
{
c -=192;
c= pgm_read_byte(&convert_HD44780[c]);
}
return c;
}
/******/
char s[21];
int column = 0;
int rows = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup(){
lcd.begin(20, 4);
lcd.cursor();
Serial.begin(115200);
}
void loop()
{
while(1)
{
while(Serial.available() == 0);
s[column] = lcd_rus(Serial.read());
if(s[column] == '\n' || column > 19)
{
s[column] = '\0';
column = 0;
lcd.print(s);
if(rows >= 3)
rows = 0;
else
rows++;
lcd.setCursor(0, rows);
Serial.println(s);
break;
}
column++;
}
}
Скрипт Python Код:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import serial
import time
import os
ser = serial.Serial('/dev/ttyUSB0', 115200)
str = unicode("Привет cyber-place.ru\nМой ник: barmaley\n", "UTF-8")
str = str.encode('CP1251')
ser.write(str)
time.sleep(2)
ser.close()
|
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|