ARTexpress, Это прекрасно, но хотелось бы найти в Минске
офлайн
keramogranit
Junior Member
|
|
62 |
10 лет на сайте Город:
|
я здесь покупал
http://www.ebay.com/itm/5-x-Stepper-motor-NEMA-17-76-oz-in-CNC-MI ... 1438.l2649
5 движков за 40 баксов. дешевле ты нигде не найдешь. у нас переплатишь в три раза. если не спешишь, то лучше подождать недели три, зато купить по очень хорошей цене.
офлайн
DominatorBLR
Senior Member
|
|
4611 |
15 лет на сайте Город:
|
ARTexpress:SIO, ну так-то да
Добавлено спустя 2 минуты 10 секундDominatorBLR:А почему не стоит то запускать дисплей без библиотеки, библиотека - это тот же кусок программы, только там ещё и лишнего будет гора. ?
чтобы утверждать, что в библиотеке гора лишнего, нужно уметь писать свои библиотеки.
и этому скоро научимся, но проблема в том что очень много памяти занимает управление экраном, когда мне от него нужно самую малость, вот я и хочу сравнить прямое управление экраном и через библиотеку.
DominatorBLR:... вот я и хочу сравнить прямое управление экраном и через библиотеку.
Сложно комментировать...
Могу предположить, что вы, предполагая избыточность кода в библиотеке, хотите написать свои функции, в надежде, что это даст экономию памяти?
Мне интересно, Доминатор, Вы вообще понимаете, что такое компиляция?
Что скомпилированы и записаны в память МК будут только те функции, которые Вы у себя в коде использовали?
Или Вы тешите себя надеждой, что Вы напишете функцию лучше, чем это сделано в библиотеке, которую юзают миллионы людей?
Попробуйте тогда писать на ASM. Вот тут есть прекрасный туториал.
zverjuga:я тебе рекомендую активнее пользоваться таймерами. заведи отдельную функцию, которая будет срабатывать по таймеру и читать кнопку. прочтенное состояние кнопки сохраняй в отдельной глобальной переменной и уже используй ее в других функциях (например, когда тебе надо переключать режимы). перерисовку экрана также рекомендую делать в отдельной функции по таймеру. использование delay лично в твоем случае не нужное и вредное. внутри loop вообще желательно писать минимум кода или код, который занимается какой нибудь фиговиной, которая не влияет на рабочий код. основной код надо разносить по таймерам или прерываниям.
спасибо большое за этот дельный совет. вот я месяц изучал таймеры, тренировался на примитивных цепочках, и в итоге написал скетч для моего экрана с помощью прерываний. Но т.к. я новичёк в этом деле- где то накосячил и прошу подсказки. В общем когда ардуино запускается, я вижу первый экран (из двух), и на этом всё. Кнопка не работает, режимы не переключаются, данные не обновляются. Подскажите пожалуйста, где косяк (а скорее всего косяки)
// Подключение ТФТ
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
#define TFT_SCLK 13
#define TFT_MOSI 11
//Инициализируем дисплей
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// Параметры датчика DS18B
// Устанавливаем пин 3 на DS18B20
#define ONE_WIRE_BUS 3
OneWire oneWire(ONE_WIRE_BUS);
float tempMin = 999;
float tempMax = 0;
int barra = 0;
int RegimCount = 0;
int KNOPKA = 2;
int flagKNOPKA = 0;
char conta = 0;
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1;
// обработка таймера
volatile bool timerKNOPKAOn; //переменная вкл/выкл таймера
unsigned long int timerKNOPKALoop; //переменная для хранения значения таймера
bool KNOPKAOn; //переменная для хранения состояния кнопки
volatile unsigned long int timerKNOPKA; //переменная подсчета миллисекунд - значение таймера
ISR (TIMER0_COMPA_vect) //функция, вызываемая таймером-счетчиком каждые 0,001 сек.
{
if(timerKNOPKAOn) //если включен миллисекудный таймер для REGIM
timerKNOPKA++; //инкремент переменной таймера (+1)
}
void setup() {
pinMode(KNOPKA, INPUT);
Serial.begin(9600);
sensors.begin();
tft.initR(INITR_BLACKTAB); // You will need to do this in every sketch
//attachInterrupt(KNOPKA, regim, RISING);
/**** настройка прерывания по таймеру каждую 0,001 сек (вызов функции ISR (TIMER0_COMPA_vect)) ****/
TCCR0A |= (1 << WGM01); //сброс при совпадении
OCR0A = 0xF9; //начало отсчета до переполнения (249)
TIMSK0 |= (1 << OCIE0A); //разрешить прерывание при совпадении с регистром А
TCCR0B |= (1 << CS01) | (1 << CS00); //установить делитель частоты на 64
sei(); //разрешить прерывания
}
void loop()
{
if(digitalRead(2) == 1 && KNOPKAOn == 0) //флаг работы таймера == 0
{
timerKNOPKAOn = 1000; // запустить таймер на 1 сек;
KNOPKAOn == 1; //флаг работы таймера = 1;
flagKNOPKA == 1; // флаг нажатия кнопки = 1;
if(RegimCount != 2) //переменная-счетчик экранов !=
{
RegimCount++; //переменная-счетчик экранов++;
}
else
RegimCount = 1; //переменная-счетчик экранов = 0
}
if(timerKNOPKALoop < 1000)
{
cli();
timerKNOPKALoop = timerKNOPKA;
sei();
}
else
{
KNOPKAOn = 0;
timerKNOPKAOn = 0;
timerKNOPKAOn = 0;
}
if(flagKNOPKA == 1 && RegimCount == 1)
{
flagKNOPKA == 0;
regim1 (); //функция вывода экрана №1();
}
if(flagKNOPKA == 1 && RegimCount == 2)
{
flagKNOPKA == 0;
regim2 (); //функция вывода экрана №1();
}
}
void regim1(void)
{
//tft print function!
tft.setTextColor(ST7735_YELLOW);
tft.setRotation(3);
tft.setTextSize(2);
tft.setCursor(35, 10);
tft.println(" TEMP = C");
tft.setTextSize(1);
tft.setCursor(131, 10);
tft.println("O");
termo();
tft.setTextColor(ST7735_WHITE);
tft.setTextSize(0);
tft.setCursor(19, 59);
tft.print("50");
tft.setTextSize(0);
tft.setCursor(19, 106);
tft.print("0");
tft.setTextSize(0);
tft.setCursor(19, 7);
tft.print("100");
tft.setTextSize(0);
tft.setCursor(19, 82);
tft.print("25");
tft.setTextSize(0);
tft.setCursor(19, 32);
tft.print("75");
tft.setTextColor(ST7735_BLUE);
tft.setTextSize(2);
tft.setCursor(10, 40);
tft.print(" CUR");
tft.setTextSize(2);
tft.setCursor(20, 65);
tft.print(" MIN");
tft.setTextSize(2);
tft.setCursor(20, 90);
tft.print(" MAX");
// Информация датчика темп.
if (sensors.getAddress(sensor1, 0))
{
sensors.requestTemperatures();
float tempC = sensors.getTempC(sensor1);
// Atualiza temperaturas minima e maxima
if (tempC < tempMin)
{
tempMin = tempC;
}
if (tempC > tempMax)
{
tempMax = tempC;
}
barra = (int)tempC;
// Отображаем на ТФТ
tft.setTextColor(ST7735_RED);
apaga_linha(100, 40);
tft.setTextSize(2);
tft.setCursor(100, 40);
tft.println(tempC, 1);
//tft.print("C");
tft.setTextColor(ST7735_GREEN);
apaga_linha(100, 65);
tft.setCursor(100, 65);
tft.println(tempMin, 1);
tft.setTextColor(ST7735_YELLOW);
apaga_linha(100, 90);
tft.setCursor(100, 90);
tft.println(tempMax, 1);
tft.setTextColor(ST7735_GREEN);
tft.setTextSize(1);
apaga_linha(99, 104);
tft.setCursor(45, 110);
tft.print(" SENSOR OK ");
if (tempMin > 50)
tempMin = 999;
tft.fillRect(5, 12, 7, 99, ST7735_RED);
tft.fillRect(5, 12, 7, 100 - barra, ST7735_BLACK);
conta++;
if (conta == 1)
{
tft.setTextSize(1);
tft.setCursor(45, 110);
tft.print(" |");
}
if (conta == 2)
{
tft.setTextSize(1);
tft.setCursor(45, 110);
tft.print(" /");
}
if (conta == 3)
{
tft.setTextSize(1);
tft.setCursor(45, 110);
tft.print(" -");
}
if (conta == 4)
{
tft.setTextSize(1);
tft.setCursor(45, 110);
tft.print(" \\");
conta = 1;
}
}
else (!sensors.getAddress(sensor1, 0));
{
tft.setTextColor(ST7735_RED);
tft.setTextSize(1);
apaga_linha(99, 104);
tft.setCursor(45, 110);
tft.print(" SENSOR ERRO ");
tempMin = 999;
tempMax = 0;
}
}
void regim2(void)
{
tft.fillScreen(ST7735_BLACK);
tft.setRotation(3);
tft.setTextSize(2); // Определяем размер шрифта
tft.setCursor(5, 60); // Устанавливаем курсор в левый верхний угол области вывода
tft.setTextColor(ST7735_BLUE); // Определяем цвет вывода на дисплей
tft.print("loading...");
}
void apaga_linha (int16_t x, int16_t y)
{
tft.fillRect(x, y, 50, 16, ST7735_BLACK);
}
void termo ()
{
tft.drawRect(4, 11, 9, 100, ST7735_WHITE);
// tft.fillRect(5, 12, 7, barra, ST7735_YELLOW);
tft.drawRect(40, 4, 119, 122, ST7735_MAGENTA);
//Рисунок термометра
tft.drawLine(14, 11, 17, 11, ST7735_WHITE); // LINHA DE 100
tft.drawLine(13, 86, 16, 86, ST7735_WHITE); // LINHA DE 75
tft.drawLine(13, 36, 16, 36, ST7735_WHITE); // LINHA DE 25
tft.drawLine(13, 61, 16, 61, ST7735_WHITE); // LINHA DE 50
tft.drawLine(14, 110, 16, 110, ST7735_WHITE); // LINHA DE 0
tft.drawLine(13, 98, 14, 98, ST7735_WHITE); //
tft.drawLine(13, 73, 14, 73, ST7735_WHITE); //
tft.drawLine(13, 48, 14, 48, ST7735_WHITE); //
tft.drawLine(13, 23, 14, 23, ST7735_WHITE); // L
tft.drawCircle(8, 118, 8, ST7735_WHITE);
tft.fillCircle(8, 118, 7, ST7735_RED);
}
А вот тут приведена схема, по которой я пытаюсь построить скетч
void setup() {
настройка пина для кнопки;
}
void loop()
{
if(digitalRead(5) == 1 && флаг работы таймера == 0)
{
запустить таймер на 1 сек;
флаг работы таймера = 1;
флаг нажатия кнопки = 1;
if(переменная-счетчик экранов != 2)
{
переменная-счетчик экранов++;
}
else
переменная-счетчик экранов = 0;
}
if(значение таймера < 1000)
{
cli();
считываем значение таймера;
sei();
}
else
{
флаг работы таймера = 0;
таймер = 0;
остановить работу таймера;
}
if(флаг нажатия кнопки == 1 и переменная-счетчик экранов == 0)
{
флаг нажатия кнопки = 0;
функция вывода экрана №1();
}
if(флаг нажатия кнопки == 1 и переменная-счетчик экранов == 1)
{
флаг нажатия кнопки = 0;
функция вывода экрана №2();
}
}
нужна помощь в написании скетча для получения изображения с камеры ov7670.
необходимо по комманде или по расписанию получить от камеры raw файл, без преобразования.
подробности в личку, помощь оплачивается.
офлайн
DominatorBLR
Senior Member
|
|
4611 |
15 лет на сайте Город:
|
Махасаматман, я понимаю что используется не вся библиотека, но я не понимаю что именно используется, а судя по описанию даташита на экран ничего смертельного там для управления нет. Я не знаю как реализованы универсальные команды, может и можно конкретно под мою задачу сделать проще. К тому же компеляция тоже вносит свои баги, об этом я тоже читал. В идеале конечно проще писать на асемблере, но его тоже нужно изучить и научиться заливать в контроллер. Проще мне начать с уже готовых вариантов и расширяться. Ладно. Разберусь со временем сам. Просто это хобби и не там много времени у меня на него, все медленно познаю.
Кстати приехал мой Монстр Мотор Шилд
Начал его колупать. Ещё не добрался до главного - максимальные рабочие токи. Но уже опробовал на лампах.
Из недостатков пока выявил следующее: при заявленных рабочих напряжениях нагрузки 5,5В-16В по факту начинает нормально работать с 9В, при более низком напряжении на выходе напряжение проседает. Второй существенный минус, но до конца не изученный - это снижение на выходе напряжения при реверсе, есть подозрение что связано с очень маленькой нагрузкой, но может и брак чипа.
Из явных плюсов - управление ШИМом, токовый аналоговый выход, позволяет либо сразу отключить программно плату либо снизить скважность ШИМ, вообщем вариантов много, и если ещё отградуировать то можно и реальные рабочие токи снимать с него.
Еще проблема моего экземпляра, что чипы немного криво припаяны нет идеальной ровной поверхности между двумя чипами, один на доли миллиметра выступает над вторым, одним радиатором может не получиться нормально холодить, но разделив его на двое или взяв два малых радиатора охладим без проблем.
Ещё считаю что неудачно расположены выходы нагрузки, при установки шилда как на фото, второй канал очень близко к разъему USB.
Так как плата рассчитана сама немного отводить тепло с нижней части чипа, я в любом случае буду снимать с Уны её и крепить отдельно. Для себя решил что лучше брать две отдельных платы по одному чипу на каждой.
DominatorBLR:при заявленных рабочих напряжениях нагрузки 5,5В-16В по факту начинает нормально работать с 9В,
Чем питаете? Проверьте не проседает ли питание на входе шилда под нагрузкой.
офлайн
DominatorBLR
Senior Member
|
|
4611 |
15 лет на сайте Город:
|
SIO:DominatorBLR:при заявленных рабочих напряжениях нагрузки 5,5В-16В по факту начинает нормально работать с 9В,
Чем питаете? Проверьте не проседает ли питание на входе шилда под нагрузкой.
Не, не, с питанием все хорошо
да и нагрузка полностью активная, при пониженном напряжении наоборот было бы лучше.
DominatorBLR:Вопрос: как к ардуинке уно можно подключить 2-3 дисплея LCD 4x20 ?...
4х20 ???
легко
по двум вяроуйкам
теоретически 255 штук можно прикрутить
как работает не проверял
art100:теоретически 255 штук можно прикрутить
3 адресных линии 255 ну никак не дадут.
nml:art100:теоретически 255 штук можно прикрутить
3 адресных линии 255 ну никак не дадут.
и я о том-же.
хотя я как-то рассматривал коммутатор i2c, для использования множества гироскопов (чтобы можно было брать готовые модули, а у них у всех адрес один и тот-же)
офлайн
DominatorBLR
Senior Member
|
|
4611 |
15 лет на сайте Город:
|
я ещё до этой темы не добрался, но как насчет адресных расширителей? С ними получиться подключать устройства с одинаковыми внутренними адресами?
Ещё вопросик: у меня в void loop() нет ни каких задержек, но подключен OLED экран 128x64. В программе при повороте джойстика задано изменить значение переменной на единицу, вывести на экран. В результате скорость изменения переменной примерно 3 единицы в секунду. Это связано с тем что прорисовка экрана занимает столько много времени и вся скорость Уны уходит на это?
cspin1 = analogRead(A2); // читаем значение тока мотора 1
cspin2 = analogRead(A3); // читаем значение тока мотора 2
ButtonX = analogRead(A4); // читаем значение джойстика оси Х
ButtonY = analogRead(A5); // читаем значение джойстика оси Y
if (ButtonX > 1000)
{
motorSpeed2 = motorSpeed2 + 1;
}
if (ButtonX < 100)
{
motorSpeed2 = motorSpeed2 - 1;
}
myOLED.setFont(RusFont);
myOLED.clrScr(); // Стираем все с экрана
myOLED.print("Crjhjcnm vjnjh 1 - ", LEFT, 0); // Выводим надпись "Скорость мотор 1 - "
myOLED.printNumI(motorSpeed1,100,0);
myOLED.print("Crjhjcnm vjnjh 2 - ", LEFT, 10); // Выводим надпись "Скорость мотор 2 - "
myOLED.printNumI(motorSpeed2,100,10);
myOLED.print("Njr vjnjh 1 - ", LEFT, 20); // Выводим надпись "Ток мотор 1 - "
myOLED.printNumI(cspin1,100,20);
myOLED.print("Njr vjnjh 2 - ", LEFT, 30); // Выводим надпись "Ток мотор 2 - "
myOLED.printNumI(cspin1,100,30);
myOLED.print("Pyfxtybt { - ", LEFT, 40); // Выводим надпись "Значение Х - "
myOLED.printNumI(ButtonX,100,40);
myOLED.print("Pyfxtybt E - ", LEFT, 50); // Выводим надпись "Значение У - "
myOLED.printNumI(ButtonY,100,50);
myOLED.update(); // Обновляем информацию на дисплее
}
ARTexpress:... i2c, для использования множества гироскопов (чтобы можно было брать готовые модули, а у них у всех адрес один и тот-же)
ты че?
на мои фото глянь еще раз
адрес 3 бита выбирается перемычкой на каждом адаптере I2C по 1.5 бакса рулящего индиктором по 5 баксов 20х4
3 бита это 255 девайсов
по дефалту у меня китайцы перемыкают адреса несволько вариантов
я сам правлю как мен удобно
щяс гляную коде
...
P.S. у вас облом
на текущем нотебуке кода и ардуин компиляторов не поднимал а из ванны вылезать лень пока
хотя щас гляну на моем ftp://
P.S. у вас облом
вырублен железо
хотя щас гляну на моем веб http://
P.S. у вас облом
вырублен похоже маршрут из ванной
Только ссылку выложил всякие хохлы поперли пытаться взламывать
P.S. кто тут еще не понял как гирлянды ЖКИ вешать
берите с моего сайта
http://art1.by/sheet/arduino_inout/jpg/219.png
хотя картинка с помоев интернетов копипастил
ну короче покупаем адаптеры I2C не важно на что LCD 1602... 2004
сами поймете что адреса из 255 еще пловить надо
щас код поищу какой-нибудь из моих
255 девайсов на шинке I2C еще поискать прийдется
и я перепаиваю перемычки адресов на совпадающее с моим готовым кодом
ищу свежего китайца на шине стандартно перебором адресов
#include <Wire.h>
//------------------------------------
void setup(){
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
//=====================================
void loop(){
byte error, address; int nDevices; nDevices=0;
Serial.println("Scanning...");
for(address = 1; address < 127; address++ ){
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address<16) Serial.print("0");
Serial.print(address,HEX);
nDevices++;
}
else if (error==4) {
Serial.print("error");
if (address<16) Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0) Serial.println("No I2C devices found\n");
else Serial.println("done\n");
delay(5000);
}
//=====================================
о я наврал
127 адресов перебираю
получается 127 ЖКИ 20х4 теоретически хотя странно 3 ноги это вроде больше
лень думу думать я пошел с чудо хакерами каклами развлекаться
P.S. ну вот и все развлечение с каклами закончилось
я только одну дырочку прикрыл на Сервер Актив Директория
только 1 час прошел
и каклам интерес пропал подбирать пароли
Может опять отркруыть достпу к актву ну чтоб жизнь малиной не казалась? Поразвлекаться? Я еще даже в обратку ничего не тыкал.
О! Похоже кто-то в моей сети в контакте болтает.
DominatorBLR:Это связано с тем что прорисовка экрана занимает столько много времени и вся скорость Уны уходит на это?
да, так и есть. у тебя в лупе несколько узких мест
диагноз
1. digitalWrite - это медленная библиотечная функция. используй прямую запись к порты (регистры). это в разы быстрее
2. myOLED.clrScr() - это очень медленная операция. нет совершненно никакого смысла в каждом цикле стирать экран. у тебя он по итогу будет моргать
3. ну и все принты - это тоже медленные функции
лечение
1. перенести работу с экраном в отдельное прерывание по таймеру
2. скорость таймера можно сделать невысокую. думаю, десять прерываний в секунду вполне достаточно
3. самое важно - перерисовывать экран только тогда, когда это действительно необходимо. это значит, что где то у тебя должен быть флажок, который говорит программе о том, что что то изменилось и экран надо перерисовать. если флажок сброшен, то ничего не делать, просто пропускаем очередной цикл. как только ты вносишь какие то изменения на экране - сделать перерисовку
4. опционально, для идеала - перерисовывать только то, что действительно нужно перерисовать. допустим, ты поменял текст, тогда надо перерисовать только текст, остальное трогать не нужно
у меня есть разработанная мною лично достаточно неплохая, на мой скромный взгляд, библиотека, которая позволяет программировать экран на С++ на уровне форм (вьюшек). и она именно этим и занимается, рисует только то, что нужно и только если были какие то изменения. скорость при этом получается максимально высокой (ну можно еще больше ускорить, если не пользоваться библиотекой TTF, а самому программировать экран, но этим мне было лень заниматься). все хочу ее как нибудь выложить на гитхаб, да никак руки не дойдут. только работать она будет, если использовать С++, а не обычный С.
офлайн
DominatorBLR
Senior Member
|
|
4611 |
15 лет на сайте Город:
|
zverjuga:1. digitalWrite - это медленная библиотечная функция. используй прямую запись к порты (регистры). это в разы быстрее
до этого ещё не добрался
zverjuga:2. myOLED.clrScr() - это очень медленная операция. нет совершненно никакого смысла в каждом цикле стирать экран. у тебя он по итогу будет моргать
понятно, но ничего не моргает, и обновлять мне нужно часто, там слежение за током, температурой и напряжением будет, хотя бы раз в секунду, нужно видеть изменения, что бы не спалить чип и двигатель.
zverjuga:3. ну и все принты - это тоже медленные функции
Я тут спрашивал про управление экраном LCD без библиотеке, но мне дали понять что лучше чем проверенная временем библиотека я не напишу ничего.
Выводы: по сегодняшним данным у меня нет возможности быстро изучить сложное программирование, решение моей проблемы пока вижу в изменении ШИМ на больший интервал (5-10 единиц за раз). После сборки детского электромобиля буду уже дорабатывать. Самый простой способ я вижу в использовании двух контроллеров, один по управлению двигателя и резкого реагирования на изменения параметров, второй для вывода данных этих данных, связь с телефоном. Так как все равно в Уне заняты у меня все порты, а все что я хотел не реализовано. Можно конечно же прикупить мегу, но опять же тут уже нужно правильно запрограммировать её, что я пока не могу сделать.
zverjuga:4. опционально, для идеала - перерисовывать только то, что действительно нужно перерисовать. допустим, ты поменял текст, тогда надо перерисовать только текст, остальное трогать не нужно
так библиотека myOLED не позволит мне это, там только одно команда отрисовки буфера - yOLED.update()
Есть ещё одна проблема с МонстрМотор шилдом связанная с измерением тока, при ШИМ регулировании и чтении данных с порта, я читаю как максимальный ток, когда есть положительный всплеск ШИМ, так и нулевой либо отличный от максимального, при "дырке". Пока ничего не придумал кроме как читать 3-5-10 значений в массив и выводить максимальное и/или среднее, и заменять сдвигом данных в массиве, т.о. получать значение с меньшими скачками. Кто может посоветовать как ещё решить данную проблему?
DominatorBLR,
можешь и в лупе перерисовывать. но добавь флажок, который будет говорить о том, что что то поменялось и экран надо перерисовать. если у тебя датчики выдают одинаковое значение, то какой смысл перерисовывать экран? то только зря расходуешь ресурсы. даже если датчик выдал какое то новое значени, то опять таки, не факт, что его надо перерисовать. допустим, ты рисуешь показания тока с точностью до десятых долей, а датчик выдал новое значение, в котором изменена сотая доля. в таком случае нет никакого смысла перерисовывать экран
DominatorBLR:так библиотека myOLED не позволит мне это, там только одно команда отрисовки буфера - yOLED.update()
значит нужно с умом использовать то, что есть. можно перерисовать не весь экран, а его малую часть. ну или, как я писал выше, не перерисовывать вообще, если в этом нет нужды.
DominatorBLR:понятно, но ничего не моргает, и обновлять мне нужно часто, там слежение за током, температурой и напряжением будет, хотя бы раз в секунду, нужно видеть изменения, что бы не спалить чип и двигатель.
так и перерисовывай раз в секунду. повесь перерисовку на таймер, который будет срабатывать раз в секунду, и там рисуй. loop работает бесконечно и с максимальной скоростью. ниже приведен псевдокод, как работает loop
int main() {
init();
while(true) {
loop();
};
}
как только loop прекращает свою работу и процессор не занят прерываниями, он снова начинает свою работу. нет никакого смысла в нем каждый раз делать такую медленную и ресурсоемкую задачу, как отрисовка экрана
Все еще нужна помощь в написании скетча для получения изображения с камеры ov7670.
необходимо по комманде или по расписанию получить от камеры raw файл, без преобразования.
подробности в личку, помощь оплачивается.
собрал как описано здесь http://privateblog.info/arduino-uno-i-kamera-ov7670-primer-ispolzovaniya/ и залил скетч.
в скетче в loop первой строкой добавил вывод в serial monitor (9600) строки "hello world".
принимаю по 9600, выводит только "he".
моих знаний не хватает, может быть кто то может уделить время и разобраться?
VDi:Все еще нужна помощь в написании скетча для получения изображения с камеры ov7670.
... получить от камеры raw файл, без преобразования.
.собрал как описано здесь http://privateblog.info/arduino-uno-i-kamera-ov7670-primer-ispolzovaniya/ и залил скетч.
в скетче в loop первой строкой добавил вывод в serial monitor (9600) строки "hello world".
принимаю по 9600, выводит только "he".моих знаний не хватает, может быть кто то может уделить время и разобраться?
ардуника и камера? вы знаете толк в извращениях
ардуина же тебе говорит мне ардуинке Хе....рова
если мне не изменяет память в это 5 лет назад уже все поиграли и плюнули бедняжку 8-ми битовую на 16 мегегерцах мучать
садо мазо блин
купи любую китай веб камерку вскрой и посмотри какой чип и кварц там лежит и ценник в заводском исполнении умножай на 100 для разовой разработки
я когда увидел 640ч480 уже сразу статью закрыл
я тыкал мышиную камерку что-то 50х50 ардуинка еще что-то видео успевала
как минимум надо хотябы разогнатся на что-нибудь если так уж вперлось слово ардуина типа Adruino Duo и хотелки поубавить до 320х240 1fps