Мультиметр Ардуино+Андроид
- Войдите на сайт для отправки комментариев
Ввиду того, что пятница закончилась, решил выставить на суд форумчан набросок блютус мультиметра. Настоящим мультиметром его не назовешь, но для измерения в цепях ардуино и им подобных вполне работоспособен. Параметры: напряжение 0-12 В, сопротивления 5 Ом - 2 Мом, емкости 1 нФ - 500 мкФ, частота 0-8 Мгц, и генератор меандра 0-4 Мгц. Последние от Димакса. Схема и скелет программы на основе пробника http://arduino.ru/forum/proekty/universalnyi-arduino-probnik С учетом отсутствия индикатора и добавления генератора и измерителя емкостей схема немного доработана:
Скетч:
#define R1 295 #define R2 4300 #define R3 24157 #define R4 4300 String inputBuffer = ""; // строка для хранения входящих данных String TRx = ""; String MyStr = ""; String EdStr = ""; // Единицы измерения volatile unsigned int int_tic = 0; volatile unsigned long tic,FixData; int Selektor; float rez,UV,Data; #include <SoftwareSerial.h> SoftwareSerial bluetoothSerial = SoftwareSerial(12, 11); //******************** Для малых емкостей ************************************** const byte pulsePin = 3; //Пин подачи напряжения заряда const unsigned long resistance = (R3+R4); //Сопротивление зарядной цепи volatile boolean triggered; volatile boolean active; volatile unsigned long startTime; volatile unsigned long duration; // Обработчик прерывания аналогового компаратора ISR (ANALOG_COMP_vect) { unsigned long now = micros (); // Фиксируем время срабатывания if (active) // Если был цикл измерения { duration = now - startTime; // Считаем длительность заряда triggered = true; // Фиксируем конец измерения digitalWrite (pulsePin, LOW); // Включаем разряд конденсатора } } void setup() { //pinMode (9,OUTPUT); // выход генератора Serial.begin(9600); bluetoothSerial.begin(9600); TCCR1A = 0; TIMSK1 = 1 << TOIE1; //прерывание по переполнению TCCR1A=1<<COM1A0; //подключить выход OC1A первого таймера TCCR1B=0; // } ISR (TIMER1_OVF_vect) {int_tic++;} // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 00000 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> void loop() { while (bluetoothSerial.available()) { char inChar = (char)bluetoothSerial.read(); // Принимаем символ if (inChar=='S') inputBuffer = ""; // Если начало, очищаем буфер else if (inChar=='Q') { // Если конец - разбираем Selektor=inputBuffer.substring(1,2).toInt(); // Читаем позицию переключателя Data = inputBuffer.substring(3).toFloat(); // Читаем остальные данные с 3 позиции } inputBuffer += inChar; // Если ещё не конец заполняем буфер дальше } //Serial.print("INPUT - ");Serial.println(inputBuffer); inputBuffer = ""; /* Serial.print("Selektor-"); Serial.println(Selektor); Serial.print("Data - "); Serial.println(Data); */ if (Selektor==2)pinMode (9,OUTPUT); // Подключить выход генератора if (Selektor==2 && Data>0)FixData=Data; if (Selektor!=2){TCCR1B=0;pinMode (9,INPUT);} // Отключить выход генератора bluetoothSerial.flush(); delay(150); rez=Selektor;EdStr = " "; // Для неопределенных положений if (Selektor==0) rez= voltmeter(); if (Selektor==1) {voltmeter();rez= UV;} if (Selektor==2) DimGen(); if (Selektor==7) ommeter(); if (Selektor==6) C_metern(); if (Selektor==5) C_meter(); if (Selektor==4) f_meter(); if (Selektor==3) {ommeter(); if (rez < 2 && EdStr == " Om")EdStr = " Оm";} //***************************************** Вывод в Андроид приложение ******************************** MyStr = String(Selektor); // Сначала положение переключателя MyStr.concat (EdStr); // Затем единицы измерения if (EdStr=="***")MyStr.concat("Вне диапазона "); // Если ед.изм "***" выводим "Вне диапазона" else MyStr.concat(rez); // Добавляем результат измерения bluetoothSerial.print(MyStr); // Отправляем на Андроид //Serial.println(rez*1.0); }// ***************************** конец Loop ************************************* float voltmeter() { // *************** ВОЛЬТМЕТР 0-10В ***************** pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, INPUT); pinMode(3, OUTPUT); // выводим на 3 пин 0 digitalWrite(3, 0); // Подключаем к земле нижний резистор делителя) EdStr = " V "; ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); ADCSRB=0; DIDR0=48; float ain,vcc; ADMUX = (1<<REFS0)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1); //Измерение Vcc delay(2); vcc=(float)(1.092*16368) / analog_func(); // !!! Опорное напряжение скорректировать //Serial.println(vcc); // по образцовому вольтметру UV=vcc; ADMUX = (1<<REFS0)|(1<<MUX2)|(1<<MUX1); //Измерение A6 analogReference(DEFAULT); delay(2); ain= analog_func()*vcc/16368.0 ; //Serial.println(ain*1.0); ain=ain * (R4+R3)/R4; //6.604; //C учетом делителя R3-R4 return ain; } uint32_t analog_func(){ // Замер АЦП uint32_t adc_buff=0; for (int n=0; n<=255; n++ ) { ADCSRA |= (1<<ADSC); while (bit_is_set(ADCSRA,ADSC)); adc_buff += ADC; } return adc_buff>>=4; } //**************************************************************************** void ommeter() { // *************** ОММЕТР 5 Ом 5 МОм ***************** analogReference(DEFAULT);// подключаем опорное 5 В pinMode(4, INPUT); // 4 пин высокий импеданс pinMode(5, INPUT); // 5 пин высокий импеданс pinMode(3, OUTPUT); // 3 пин выход digitalWrite(3, 1); // подключаем измерительный резистор 24 kOm //****** Измерение с резистором 24 kOm *************************** EdStr = "kOm"; long u_del = Test_Apin(6); // измеряем полное напряжение на делителе под нагрузкой long u_Rx = Test_Apin(5); // измеряем напряжение на измеряемом резисторе rez = (u_Rx * R3) / (u_del - u_Rx); // для 24 kOm if (rez >= 2000){{rez=rez/= 1000;} //Если значение достоверно - вывод на индикацию if (rez >= 1000){rez=rez/= 1000; EdStr = "MOm"; if (rez > 5) EdStr = "***";} goto vyv;} //***** Измерение с резистором 4,7 kOm *************************** pinMode(3, INPUT); // 3 пин высокий импеданс pinMode(5, OUTPUT); // 5 пин выход digitalWrite(5, 1); // подключаем измерительный резистор 4.7 kOm //************************************************************** u_del = Test_Apin(4); // измеряем полное напряжение на делителе под нагрузкой u_Rx = Test_Apin(5); // измеряем напряжение на измеряемом резисторе rez = (u_Rx * R2) / (u_del - u_Rx); // для 4,7 kOm if (rez >= 1000){rez =(rez /= 100); //Если значение достоверно - вывод на индикацию if (rez > 100)EdStr = "***"; ;goto vyv;} //******************** Измерение с резистором 300 Om *************************** EdStr = " Om"; pinMode(5, INPUT); // 3 пин высокий импеданс pinMode(4, OUTPUT); // 4 пин выход digitalWrite(4, 1); // переводим его в 1 подключаем измерительный резистор 500 Ом //******************** сначала при опорном 5 В ********************************** u_del = Test_Apin(5); // измеряем полное напряжение на делителе под нагрузкой u_Rx = Test_Apin(4); // измеряем напряжение на измеряемом резисторе rez = (u_Rx * R1) / (u_del - u_Rx); // для 300 om if (rez > 50)goto vyv; //Если значение достоверно - вывод на индикацию //******************* При малых сопротивлениях переходим на опорное 1,1 В ************ analogReference(INTERNAL); // подключаем опорное 1.1 В delay(2); u_del *= 3.7; //Коррекция u_Rx = ( Test_Apin(4)); // измеряем напряжение на измеряемом резисторе rez = (u_Rx * R1) / (u_del - u_Rx); if (rez > 100)EdStr = "***"; // Борьба с глюком vyv: // Индикация pinMode(3, OUTPUT); // выводим на 3 пин 0 digitalWrite(3, 0); // Подключаем к земле нижний резистор делителя) } //******************** Чтение аналогового пина ***************************** int Test_Apin(byte A_In) { long adc_buff = 0; for (int n = 0; n <= 255; n++ ) { adc_buff += analogRead(A_In); } adc_buff >>= 8; return adc_buff; } //****************** Измерение емкости 0,005-1 Мкф ******************************************** // Взято из http://digitrode.ru/computing-devices/mcu_cpu/816-izmeritel-emkosti-na-a... void C_metern() { EdStr = " nF"; byte i=0; pinMode(5, INPUT); pinMode(6, INPUT); pinMode(4, OUTPUT); digitalWrite(4, LOW); pinMode(pulsePin, OUTPUT); digitalWrite(pulsePin, LOW); // Контрольный разряд конденсатора // Настройка АЦП и мультиплексора ADCSRA &= ~ (1 << ADEN); // Отключаем АЦП ADCSRB |=(1<<ACME); // Подключаем мультиплексор ADMUX = 4; // ADC4 к инверсному входу компаратора // Настройка компаратора ACSR = _BV (ACI) // Флаг прерывания | _BV (ACIE) // Разрешение прерывания & ~_BV (ACIS0) // Прерывание при переходе с 1 на 0 | _BV (ACIS1); // -------------------------------- pinMode(4, INPUT); delay (2); SI: if (!active) //Ели не идет измерение - старт нового измерения { active = true; triggered = false; pinMode(4, INPUT); digitalWrite (pulsePin, HIGH); // Включаем заряд конденсатора startTime = micros (); } if (active && triggered) //Если прерывание зафиксировало время заряда, отображаем результат { i++; active = false; triggered = false; pinMode(4, OUTPUT); digitalWrite(4, LOW); digitalWrite (pulsePin, LOW); rez= (int)(duration * 1000 / resistance); if (rez > 2000) EdStr = "***"; if (i== 2) goto WC; delay (100); } if (Selektor==6)goto SI; WC:; ACSR &= ~ _BV (ACI); // Флаг прерывания ACSR &= ~ _BV (ACIE); // Запрещение прерывания ADCSRA |= (1 << ADEN); // Bключаем АЦП } //****************** Измерение емкости 1-10000 Мкф ******************************************** // Взято из http://digitrode.ru/computing-devices/mcu_cpu/816-izmeritel-emkosti-na-a... void C_meter() { EdStr = " uF"; analogReference(DEFAULT); // подключаем опорное 5 В pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, OUTPUT); digitalWrite(5, HIGH); //Включаем заряд конденсатора через R2 (для емкостей > 20 мкФ) unsigned long startTime = millis(); //Засекаем время while (analogRead(A5) < 648) {} //Ждем пока конденсатор не зарядится до 63,2% или 1,58 от полной зарядки unsigned long elapsedTime = millis() - startTime; //Фиксируем время заряда rez = ((float)elapsedTime / R2) * 1000; if (rez <= 100) { //Режим измерения не оптимален digitalWrite(5, LOW); //Снимаем напряжение pinMode(4, OUTPUT); //Разряжаем кондюк digitalWrite(4, LOW); //Закорачивая его на землю while (analogRead(A5) > 0) {} // Пока не разрядится pinMode(4, INPUT); // Отключаем разряд pinMode(5, INPUT); pinMode(3, OUTPUT); digitalWrite(3, HIGH); //Включаем заряд конденсатора через R3+R4 (для емкостей < 20 мкФ) unsigned long startTime = millis(); //Засекаем время while (analogRead(A5) < 648) {} //Ждем пока конденсатор не зарядится до 63,2% или 1,58 от полной зарядки unsigned long elapsedTime = millis() - startTime; //Фиксируем время заряда rez = ((float)elapsedTime / (R3 + R4)) * 1000; digitalWrite(3, LOW); } digitalWrite(5, LOW); //Снимаем напряжение pinMode(4, OUTPUT); //Разряжаем кондюк digitalWrite(4, LOW); //Закорачивая его на землю delay(120); while (analogRead(A5) > 0) {} // Пока не разрядится pinMode(4, INPUT); // Отключаем разряд } //************************** ЧАСТОТОМЕР ************************* void f_meter() { // ********* конфигурация входов частотомера ******* // Входом частотомера является пин цифровой пин 5 EdStr = " Gc"; pinMode(3, OUTPUT); // выводим на 3 пин 0 digitalWrite(3, 0); // загрубляем вход (борьба с наводками) pinMode (4, INPUT); // 4 пин высокий импеданс pinMode (5, INPUT); // вход сигнала T1 (для atmega168/328) int_tic = 0; TCNT1 = 0; TCCR1B = (1 << CS10) | (1 << CS11) | (1 << CS12); //тактировани от входа Т1 delay(1000);// Время измерения TCCR1B = 0; tic = ((uint32_t)int_tic << 16) | TCNT1; //сложить что натикало rez = tic; } //_________________ * ГЕНЕРАТОР * _________________ //<a href="http://arduino.ru/forum/proekty/generator-s-reguliruemoei-chastotoi-na-arduino?page=3" rel="nofollow">http://arduino.ru/forum/proekty/generator-s-reguliruemoei-chastotoi-na-arduino?page=3</a> void DimGen(){ static uint32_t enc=1; // uint32_t ocr; uint32_t divider; float freq; Serial.print("Gen - "); Serial.println(FixData); enc = FixData; //передаем значение частоты в герцах в ГЕНЕРАТОР //расчёт прескалера и OCR по нужной частоте divider=1; ocr = (F_CPU / enc /2 /divider); if (ocr >65536) { divider=8; ocr = F_CPU / enc /2 /divider; if (ocr >65536) { divider=64; ocr = F_CPU / enc /2 /divider; if (ocr >65536) {divider=256; ocr = F_CPU / enc /2 /divider; if (ocr >65536) { divider=1024; ocr = F_CPU / enc /2 /divider; if (ocr >65536){ocr=65536; }}}}} OCR1A=ocr-1; //запись в регистр прескалера switch (divider) { case 1: TCCR1B=1|(1<<WGM12); break; case 8: TCCR1B=2|(1<<WGM12); break; case 64: TCCR1B=3|(1<<WGM12); break; case 256: TCCR1B=4|(1<<WGM12); break; case 1024: TCCR1B=5|(1<<WGM12); break; } }
APK для Андроида https://yadi.sk/d/S4r8kRX6bkWJLg
Небольшое видео https://yadi.sk/i/sgY7T8UGQ20c6w
Для того чтобы протестировать, достаточно бодключить только блютус модуль. При этом можно увидеть только напряжение питания ардуино, снять меандр с D9 и измерять частоту с D5. Для полного функционала придется припаять несколько резисторов. Вариант не окончательный, могут быть глюки. Поэтому в этот раздел и поместил.
Ну и вот еще несколько картинок, как это располагается в корпусе маркера:
Если ты не против, выложи исходники андроид. Не сочти за наглость! ;))) ...ну если у тебя авторская железа не сильно кровоточит. ;)
Мне кастом вью для дисплейчика интересен. И ручка прикольная.
Если ты не против, выложи исходники андроид. Не сочти за наглость! ;))) ...ну если у тебя авторская железа не сильно кровоточит. ;)
Мне кастом вью для дисплейчика интересен. И ручка прикольная.
Исходник в app inventor 2, правда оочень не профессиональный. Я app inventor 2 только две недели, как изучать начал, и это первые шаги. Комментариев никаких нет, т.к. не нашел как их вставлять. Сегодня вечером посмотрю как можно исходник выложить.
Исходник в app inventor 2
Тогда не надо, спасибо. ;))) Инвентор это как flprog для ардуино. ;)))
Исходник в app inventor 2
Тогда не надо, спасибо. ;))) Инвентор это как flprog для ардуино. ;)))
Ну чем богаты. Зато даже ежу понятно. Дисплей - просто картинка, в которой текстовое поле с прозрачным фоном. По переключателю все просто. Две картинки, одна статичная, другая (ручка) вращается. Дальше школьный курс геометрии. Угол поворота вычисляется исходя из координат точек касания экрана. За "0" взят центр ручки переключателя. Картинки можно из APK выковырять.
а поделитесь ссылкой на исходник приложения?
а то я тут осваиваю аппинвертор
а поделитесь ссылкой на исходник приложения?
а то я тут осваиваю аппинвертор
Как поделиться ссылкой не нашел. Скачал проект на комп и забросил его на яндекс диск. https://yadi.sk/d/b1SkyIQSMlpBCQ Как у Вас откроется не знаю. Я с Аппинвентором занимался всего пару недель, опыта нет большого.
спас ибо буду разбираться как экспортировать.
а еще вот думаю если в данной схеме увеличить напряжение не 12в а напрмер 30.
сопротивление делителя верхний резистор увеличу не сгорят ли другие порты ардуинки?
спас ибо буду разбираться как экспортировать.
а еще вот думаю если в данной схеме увеличить напряжение не 12в а напрмер 30.
сопротивление делителя верхний резистор увеличу не сгорят ли другие порты ардуинки?
По первому вопросу, там в меню проектов есть что-то типа загрузить проект с компьютера. Кстати, а Вы готовый АПК загружали? Если да, то как картинка не поломалась? А то я только на трех смартфонах с разным разрешением проверял.
По второму вопросу. Теоретически сгореть должны. Реально давал около 20 В. Изначально пробник планировался только для измерения в цепях Ардуино. Задач измерять напряжения более 12 В не стояло, чтобы не использовать механические элементы коммутации. Если есть такая необходимость, то лучше резистор для измерения напряжений подключить к отдельному щупу.
А питание от чего?
И вот этот вот jdy-30 он прямо так на ебее называется?
А питание от чего?
И вот этот вот jdy-30 он прямо так на ебее называется?
Питание, через мини USB, он-же для смены прошивки. В принципе конструкция предназначалась в качестве подарка и практически не используется т.к. нужно найти и включить смартфон и еще место ему на столе найти. Реально используется последний пробник с OLED дисплеем. А этот вариант, для общего развития.
По поводу JDY-30 . На ебее не знаю, а на Али https://aliexpress.ru/i/32966199193.html только я брал без разъемов по 40 рублей.
За ссылку спасибо.
Мне понравилась сама идея переноса средства визуализации и управления на телефон.
За ссылку спасибо.
Мне понравилась сама идея переноса средства визуализации и управления на телефон.
Мне сама идея тоже нравится, но для каких-то других целей. А как мультиметр-просто игрушка.
я видел штуку наподобие, но там мультиметр через юсб передает значение на дуину и олед 0.96 встроеную в очки
нет там мультиметр с блятусом.
да, не так написал, сам только увидел
По поводу JDY-30 . На ебее не знаю, а на Али https://aliexpress.ru/i/32966199193.html только я брал без разъемов по 40 рублей.
Чот то-же "уносит" меня энтот аппинвертор, шо уже несколько вечеров "изучаю" эту игрушку. Прикольно. Да вот беда одна приключилася, прислал китаес мне jdy-40. Пичаль_бида ну и х. с ним. Посему вопрос: шо мы имеем из палитры этих jdy-хх , а именно: 08, 10, 19, 30 и 31. Вопрос: какая из них максимально компактная и дальнобойная? Питание будет 3.3В. Ну на компактность можно подзабить, но хочеццо компактного.
И ещё такой вопрос, т.к. я с блюпупами не работал ниразу программно: а вот ежли мне вот нужно ДВА таких мультиметра к телефону приконнектить ОДНОВРЕМЕННО (софт будет мой) - вообще это возможно???
Чот то-же "уносит" меня энтот аппинвертор, шо уже несколько вечеров "изучаю" эту игрушку. Прикольно. Да вот беда одна приключилася, прислал китаес мне jdy-40. Пичаль_бида ну и х. с ним. Посему вопрос: шо мы имеем из палитры этих jdy-хх , а именно: 08, 10, 19, 30 и 31. Вопрос: какая из них максимально компактная и дальнобойная? Питание будет 3.3В. Ну на компактность можно подзабить, но хочеццо компактного.
И ещё такой вопрос, т.к. я с блюпупами не работал ниразу программно: а вот ежли мне вот нужно ДВА таких мультиметра к телефону приконнектить ОДНОВРЕМЕННО (софт будет мой) - вообще это возможно???
По поводу аппинвентора. Удалось запустить мой проект? А то у меня опыта работы с ним тоже кот наплакал, и уверенности что отправил Вам то что нужно нет.
По поводу модулей . Большой разницы в размерах нет. Просто некоторые-голые без стабилизатора 3,3 В и без разъемов и есть варианты на переходной плате (миллиметров на 10 подлиннее). Работают одинаково, метров на 15 отходил, а дальше не нужно было. Но пишут что метров 50.
Подключить несколько к одному телефону можно. Где-то недавно встречал проект с 6 BT датчиками работающими с одним приложением. Какие-то уроки и довольно хорошо все объясняют.
По поводу аппинвентора. Удалось запустить мой проект?
По поводу модулей . Работают одинаково, метров на 15 отходил, а дальше не нужно было. Но пишут что метров 50.
Подключить несколько к одному телефону можно.
Нет, ваш я не запускал. Я написал свой с кнопками коннект и выход. Пока, для изучить этот апп... Никак не разберусь как там кнопки двигать, наверно никак (свойств таких там нет). Тяжко с графиками, как канвас сдвигать - чот то-же не понял. Но в сети есть примеры, нудные правда, но ничо, прикольно на своём телефоне тестить.
По модулям: думаю jdy-31 для меня будет самое то и по габаритам и по мощности.
По поводу несколько устройств: а кто тогда с них ведущий а кто слейв?
По поводу аппинвентора. Удалось запустить мой проект?
По поводу модулей . Работают одинаково, метров на 15 отходил, а дальше не нужно было. Но пишут что метров 50.
Подключить несколько к одному телефону можно.
Нет, ваш я не запускал. Я написал свой с кнопками коннект и выход. Пока, для изучить этот апп... Никак не разберусь как там кнопки двигать, наверно никак (свойств таких там нет). Тяжко с графиками, как канвас сдвигать - чот то-же не понял. Но в сети есть примеры, нудные правда, но ничо, прикольно на своём телефоне тестить.
По модулям: думаю jdy-31 для меня будет самое то и по габаритам и по мощности.
По поводу несколько устройств: а кто тогда с них ведущий а кто слейв?
Если получится попробуй мой запустить (ссылка в #7 посту), там много элементов, посмотришь как их располагать где нужно. Я дольше всего подгонял их размеры и расположение к телефонам с разным разрешением. А несколько устройств- все наверное будут слейвами, а телефон мастером (но не факт) Вот нашел какую-то ссылку с тремя BT модулями. https://www.youtube.com/watch?v=uLYIvBPwdT4 Достаточно много полезного нашел здесь http://www.martyncurrey.com/connecting-2-arduinos-by-bluetooth-using-a-hc-05-and-a-hc-06-pair-bind-and-link/ это один из примеров работы BT модулей как слейв и мастер.
Да, видео посмотрел и теперь я под неким двойным впечатлением. С одной стороны некоторые местные гики говорят об некой скудности этого языка, с другой стороны на видео вполне себе полноценный софт. Так что необходима диверсификация. Почитаю, посмотрю, напишу.
Да, видео посмотрел и теперь я под неким двойным впечатлением. С одной стороны некоторые местные гики говорят об некой скудности этого языка, с другой стороны на видео вполне себе полноценный софт. Так что необходима диверсификация. Почитаю, посмотрю, напишу.
Охренеть . Протрезвел и по человечески изъяснятся начал? Или кто-то ник украл?
Извиняюсь за офф-топ. Не сдержался
Да, видео посмотрел и теперь я под неким двойным впечатлением. С одной стороны некоторые местные гики говорят об некой скудности этого языка, с другой стороны на видео вполне себе полноценный софт. Так что необходима диверсификация. Почитаю, посмотрю, напишу.
Нормальный язык. Вот здесь почти пошагово и без видео управление BT модулем из аппинвентора. И там как раз много времени уделено расположению элементов управления и индикации на экране. http://www.martyncurrey.com/create-a-bluetooth-joypad-with-app-inventor-2/#more-7040
Охренеть .
Неплохо было бы на календарь взглянуть - пишу под срецтвом... ))))))))))))))))))))))))))
Охренеть .
Неплохо было бы на календарь взглянуть - пишу под срецтвом... ))))))))))))))))))))))))))
А у меня уже выветрилось.
Нормальный язык.
Неплохой. Раньше я сравнивал что накомпилит, допустим, дельфи и вижуал С по размеру файла. Сейчас сравнивать по таким критериям крайне не верно. Как гриццо, посмотрим.
Вот здесь почти пошагово и без видео управление BT модулем из аппинвентора. И там как раз много времени уделено расположению элементов управления и индикации на экране.
Ух! Ну, во первых, тот скетч, который он выложил "напоказ" - деЦЦкай лепет. Ничо он там не проверяет, Enable - значит включилсО! Нихера. Скачал, скомпилил, запустил! Специально блюпуп выключил и нажал кнопарь "коннект" - и чО? Сцуко, квадратик "зелёный" !!! - включилсО, подключилсО, тока к чему??? ==Фуфло!!!
Короче, вопросы те-же:
- как управлять кнопками из кода (положение) ???
- где (откуда) взять текущее разрешение screen???
- как "сдвигать и маштабировать" canvas???
- где форматирование события переворота экрана???
Ну и теперь более интересное - через активити экшен посредством api работают некоторые функции андроида, ну типа вкЫл/вЫкл и тд. Но! люди жалуются, что не всё работает. Где взять список совместимости версий андроида с этим инвертером???
PS: графики рисует, цветные, даже с "подложкой" (хоть бап рисуй на фоне). Вопщем если нет компа а "повтыкать" охота - прикольная иде.
Короче, вопросы те-же:
- как управлять кнопками из кода (положение) ???
- где (откуда) взять текущее разрешение screen???
- как "сдвигать и маштабировать" canvas???
- где форматирование события переворота экрана???
Ну и теперь более интересное - через активити экшен посредством api работают некоторые функции андроида, ну типа вкЫл/вЫкл и тд. Но! люди жалуются, что не всё работает. Где взять список совместимости версий андроида с этим инвертером???
PS: графики рисует, цветные, даже с "подложкой" (хоть бап рисуй на фоне). Вопщем если нет компа а "повтыкать" охота - прикольная иде.
По этой ссылке достаточно хорошо объяснено как располагать элементы интерфейса. Обратите внимание на вспомогательные элементы (горизонтальное и вертикальное расположение)
Управление кнопками- изменение их свойств (размеры, выравнивание и т.д. и т.п.)
Зачем знать абсолютные размеры? Берите размеры в % от размера экрана.
Зачем его сдвигать и масштабировать?
Не знаю, не пользовался
По остальным вопросам, тоже не помогу. Опыта нет. сделал всего один проект. Ссылка в #7 посту. Можете открыть и посмотреть, возможно что-то почерпнете. Но если честно, то там каша.
- где (откуда) взять текущее разрешение screen???
- где форматирование события переворота экрана???
Не понял вопроса. Переворачивать экран - это куда?. Событие при повороте - Screen.ScreenOrientationChanged.
Так, с экраном разобрался,ну вслучечо ещё спрошу...
Вопрос по кнопкам: ну вроде как уже давно привык к расчётному положению кнопок, посему мой подход планируется такой - при запуске определить положение экрана (вертикаль/горизонталь) и ПРОГРАММНЫМ путём ВЫСТАВИТЬ кнопки в зависимости от разрешения экрана. Вопрос: подход правильный или есть другое(ие). Да, забыл, GUI будет состоять из 4 кнопок, но после настроек и всего прочего останется видна только одна кнопка старт/стоп. Это для простоты понимания того, чего я хочу сделать.
Вопрос по Canvas - можно ли её маштабировать и как? Можно ли её делить на условные части или придётся рисовать параллельно в нескольких канвах? (допустим нужен лог с 4 переменных и чтоБ потом эти логи можно было смотреть И по отдельности И или вместе И или наложением друг на друга) Вот.
Ну и пора бы уже об "интимности" речь замолвить - она СЦ..О раздЭзиваецца нараз реверсом!!! Тоесть её можно раздезить, поменять там абсолютно всё и обратно собрать какнивчОмнибывало!!! Пипец!!! Чо дельть???
Так, с экраном разобрался,ну вслучечо ещё спрошу...
Вопрос по кнопкам: ну вроде как уже давно привык к расчётному положению кнопок, посему мой подход планируется такой - при запуске определить положение экрана (вертикаль/горизонталь) и ПРОГРАММНЫМ путём ВЫСТАВИТЬ кнопки в зависимости от разрешения экрана. Вопрос: подход правильный или есть другое(ие). Да, забыл, GUI будет состоять из 4 кнопок, но после настроек и всего прочего останется видна только одна кнопка старт/стоп. Это для простоты понимания того, чего я хочу сделать.
Вопрос по Canvas - можно ли её маштабировать и как? Можно ли её делить на условные части или придётся рисовать параллельно в нескольких канвах? (допустим нужен лог с 4 переменных и чтоБ потом эти логи можно было смотреть И по отдельности И или вместе И или наложением друг на друга) Вот.
Ну и пора бы уже об "интимности" речь замолвить - она СЦ..О раздЭзиваецца нараз реверсом!!! Тоесть её можно раздезить, поменять там абсолютно всё и обратно собрать какнивчОмнибывало!!! Пипец!!! Чо дельть???
Если всего несколько кнопок прямоугольной формы, то такой подход может быть и подойдет. А если круги, треугольники? Если их размеры менять пропорционально изменению разрешения, то нарушается геометрия. Если оставлять пропорции нормальными, то размещение кривым получается. Так попытка сделать тестер при горизонтальном или вертикальном расположении экрана успехом не увенчалась. Приходится делать два варианта. Один с переключателем по центру и второй - переключатель справа или слева от дисплея. Иначе картинка получается такой, что хочется оторвать руки ее создателю.
По Canvas: Масштабировать не его, а информацию на нем. Допустим у Вас 3 графика. Если вы хотите рассмотреть один-щелкаете по нему и перерисовываете на всю площадь. Для возврата к прежней картинке, должен быть какой-то элемент управления на нем (допустим просто смахнуть) и нарисовать предыдущую картинку
Кнопки пока оставим, посмотрю может у кого ещё.
Допустим у Вас 3 графика. Если вы хотите рассмотреть один-щелкаете по нему и перерисовываете на всю площадь. Для возврата к прежней картинке, должен быть какой-то элемент управления на нем (допустим просто смахнуть) и нарисовать предыдущую картинку
Вот енто вот слово уже говорит о том, что необходима tinyDB , пральна? Ибо ежли перерисовывать, естественно, нужны данные для рисования. Это всё в конце концов и будет сделано, ибо просто никак по другому. Интересен другой вопрос: допустим мне необходимо сегодня ДВА графика сопоставлять а завтра ЧЕТЫРЕ. Так вот --- КАК проще и удобнее сделать ЭТО ->> посредством одной канвы или посредством нескольких???
Извините за тупизЪм, я ООП не занимался лет много, андрод вообще мало знаю с практической сороны.)))
Вот енто вот слово уже говорит о том, что необходима tinyDB , пральна? Ибо ежли перерисовывать, естественно, нужны данные для рисования. Это всё в конце концов и будет сделано, ибо просто никак по другому. Интересен другой вопрос: допустим мне необходимо сегодня ДВА графика сопоставлять а завтра ЧЕТЫРЕ. Так вот --- КАК проще и удобнее сделать ЭТО ->> посредством одной канвы или посредством нескольких???
Извините за тупизЪм, я ООП не занимался лет много, андрод вообще мало знаю с практической сороны.)))
Ну по поводу Андроида, мы с Вами наверное на одном уровне, просто я на месяц раньше заниматься начал и уже почти забросил. Запал пропал. А насчет того сколько полотен использовать, это уже как Вам религия и дизайн приложения позволяют. На любом можно изобразить, что хотите. А если нужно несколько анимированных элементов, то по их количеству.
Уровни здесь никак не при чём. Это зависит только лишь от т.н. базовых знаний. Принцип ООП неизменен в любой интерпретации языка. Поэтому про уровень ->> мимо.
А про программу - ну у меня два варианта: либо самому "допереть" , либо у кого-нить "спереть" ... ну так Ван Гог любил говорить.
Вот бы как пообщаться через мессенджеры ?
Уровни здесь никак не при чём. Это зависит только лишь от т.н. базовых знаний. Принцип ООП неизменен в любой интерпретации языка. Поэтому про уровень ->> мимо.
А про программу - ну у меня два варианта: либо самому "допереть" , либо у кого-нить "спереть" ... ну так Ван Гог любил говорить.
Нахрена App Inventor, если есть Android Studio? Я сам меньше месяца как в андроид залез, однако ж, ттт, получается. Первую неделю говна поесть, потом - уже легче :)
Нахрена App Inventor, если есть Android Studio? Я сам меньше месяца как в андроид залез, однако ж, ттт, получается. Первую неделю говна поесть, потом - уже легче :)
Ты шо, на Яву переехал?
Нахрена App Inventor, если есть Android Studio? Я сам меньше месяца как в андроид залез, однако ж, ттт, получается. Первую неделю говна поесть, потом - уже легче :)
Ты шо, на Яву переехал?
Нет, не переехал, просто расширяю навыки.
а я вот старый стал, баюс-баюс. :)
Нахрена App Inventor, если есть Android Studio?
Нахрена ехать за хлебом на автомобиле, если есть велосипет? И быстрее и дешевле и полезнее для себя самого.
Или вспомни как 20 лет назад можно в делфях побырику накидать проект БД с кучей связанных таблиц? Прикольно так это было и оно работало!!!
А тут "инвертер" - ваащпе чудо! Ни тебе компоФФ с гигами, ни винтоФФ с мегами - браузер --- это наше всё! Накидал побырику, скомпилял побырику и тут-же запустил на телефоне! Лепота!!!
А уж вот уж потом уж, когда всё уж готово --- уотт тогда ведроидстудиа... велкам!!!
Нахрена App Inventor, если есть Android Studio?
Нахрена ехать за хлебом на автомобиле, если есть велосипет? И быстрее и дешевле и полезнее для себя самого.
Ты просто не пробовал. В Android Studio всё достаточно удобно, работа с интерфейсом - на уровне, есть взрослая отладка. Впрочем, не буду настаивать, каждый решает сам.
Ты просто не пробовал.
Пробовать то я пробовал году ентак в 17-18. Была возможность "поработать" на очень мощном компе. Убунта + студия. Но так-как я "гастробайтер" , как и многие сейчас, то мне просто жалко денег на хороший ноут. А с "инвертером" любой самый сраный комп или ноут летает как веник. Только из таких побуждений.
Вот бы как пообщаться через мессенджеры ?
Лучше тут. Сталкивался - расскажу. Графики не рисовал.
вот и у меня ноут не тянет андроидстудию. даже процессор двухядерный его не устраивает.
а на нормальных компах у меня дети играют. вот сын взялся за аппинвертор.
но похоже через пару месяцев куплю и для себя что то по мощнее.
В Android Studio всё достаточно удобно...