Мультиметр Ардуино+Андроид

svm
Offline
Зарегистрирован: 06.11.2016

Ввиду того, что пятница закончилась, решил выставить на суд форумчан набросок блютус мультиметра. Настоящим мультиметром его не назовешь, но для измерения в цепях ардуино и им подобных вполне работоспособен. Параметры: напряжение 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. Для полного функционала придется припаять несколько резисторов.  Вариант не окончательный, могут быть глюки. Поэтому в этот раздел и поместил.

svm
Offline
Зарегистрирован: 06.11.2016

Ну и вот еще несколько картинок, как это располагается в корпусе маркера:

 

 

wdrakula
wdrakula аватар
Онлайн
Зарегистрирован: 15.03.2016

Если ты не против, выложи исходники андроид. Не сочти за наглость! ;))) ...ну если у тебя авторская железа не сильно кровоточит. ;)

Мне кастом вью для дисплейчика интересен. И ручка прикольная.

 

svm
Offline
Зарегистрирован: 06.11.2016

wdrakula пишет:

Если ты не против, выложи исходники андроид. Не сочти за наглость! ;))) ...ну если у тебя авторская железа не сильно кровоточит. ;)

Мне кастом вью для дисплейчика интересен. И ручка прикольная.

 

Исходник в app inventor 2, правда оочень не профессиональный. Я app inventor 2 только две недели, как изучать начал, и это первые шаги. Комментариев никаких нет, т.к. не нашел как их вставлять. Сегодня вечером посмотрю как можно исходник выложить.

wdrakula
wdrakula аватар
Онлайн
Зарегистрирован: 15.03.2016

svm пишет:

Исходник в app inventor 2

Тогда не надо, спасибо. ;))) Инвентор это как flprog для ардуино. ;))) 

svm
Offline
Зарегистрирован: 06.11.2016

wdrakula пишет:

svm пишет:

Исходник в app inventor 2

Тогда не надо, спасибо. ;))) Инвентор это как flprog для ардуино. ;))) 

Ну чем богаты. Зато даже ежу понятно. Дисплей - просто картинка, в которой текстовое поле с прозрачным фоном. По переключателю все просто. Две картинки, одна статичная, другая (ручка) вращается. Дальше школьный курс геометрии. Угол поворота вычисляется исходя из координат точек касания экрана. За "0" взят центр ручки переключателя. Картинки можно из APK выковырять.

Andry Smart
Offline
Зарегистрирован: 06.09.2016

а поделитесь ссылкой на исходник приложения?

а то я тут осваиваю аппинвертор

svm
Offline
Зарегистрирован: 06.11.2016

Andry Smart пишет:

а поделитесь ссылкой на исходник приложения?

а то я тут осваиваю аппинвертор

Как поделиться ссылкой не нашел. Скачал проект на комп и забросил его на яндекс диск. https://yadi.sk/d/b1SkyIQSMlpBCQ  Как у Вас откроется не знаю. Я с Аппинвентором занимался всего пару недель, опыта нет большого.

Andry Smart
Offline
Зарегистрирован: 06.09.2016

спас ибо буду разбираться как экспортировать.

 

а еще вот думаю если в данной схеме увеличить напряжение не 12в а напрмер 30.

сопротивление делителя верхний резистор увеличу не сгорят ли другие порты ардуинки?

svm
Offline
Зарегистрирован: 06.11.2016

Andry Smart пишет:

спас ибо буду разбираться как экспортировать.

 

а еще вот думаю если в данной схеме увеличить напряжение не 12в а напрмер 30.

сопротивление делителя верхний резистор увеличу не сгорят ли другие порты ардуинки?

По первому вопросу, там в меню проектов есть что-то типа загрузить проект с компьютера. Кстати, а Вы готовый АПК загружали? Если да, то как картинка не поломалась? А то я только на трех смартфонах с разным разрешением проверял.

По второму вопросу. Теоретически сгореть должны. Реально давал около 20 В. Изначально пробник планировался только для измерения в цепях Ардуино. Задач измерять напряжения более 12 В не стояло, чтобы не использовать механические элементы коммутации. Если есть такая необходимость, то лучше резистор для измерения напряжений подключить к отдельному щупу.

-NMi-
Offline
Зарегистрирован: 20.08.2018

А питание от чего?

И вот этот вот jdy-30 он прямо так на ебее называется?

svm
Offline
Зарегистрирован: 06.11.2016

-NMi- пишет:

А питание от чего?

И вот этот вот jdy-30 он прямо так на ебее называется?

Питание, через мини USB, он-же для смены прошивки. В принципе конструкция предназначалась в качестве подарка и практически не используется т.к. нужно найти и включить смартфон и еще место ему на столе найти. Реально используется последний пробник с OLED дисплеем. А этот вариант, для общего развития.

По поводу JDY-30 . На ебее не знаю, а на Али https://aliexpress.ru/i/32966199193.html только я брал без разъемов по 40 рублей.

-NMi-
Offline
Зарегистрирован: 20.08.2018

За ссылку спасибо.

Мне понравилась сама идея переноса средства визуализации и управления на телефон.

svm
Offline
Зарегистрирован: 06.11.2016

-NMi- пишет:

За ссылку спасибо.

Мне понравилась сама идея переноса средства визуализации и управления на телефон.

Мне сама идея тоже нравится, но для каких-то других целей. А как мультиметр-просто игрушка.

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

я видел штуку наподобие, но там мультиметр через юсб передает значение на дуину и олед 0.96 встроеную в очки

Andry Smart
Offline
Зарегистрирован: 06.09.2016

нет там мультиметр с блятусом.

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

да, не так написал, сам только увидел

-NMi-
Offline
Зарегистрирован: 20.08.2018

svm пишет:

По поводу JDY-30 . На ебее не знаю, а на Али https://aliexpress.ru/i/32966199193.html только я брал без разъемов по 40 рублей.

Чот то-же "уносит" меня энтот аппинвертор, шо уже несколько вечеров "изучаю" эту игрушку. Прикольно. Да вот беда одна приключилася, прислал китаес мне jdy-40. Пичаль_бида ну и х. с ним. Посему вопрос: шо мы имеем из палитры этих jdy-хх , а именно: 08, 10, 19, 30 и 31. Вопрос: какая из них максимально компактная и дальнобойная? Питание будет 3.3В. Ну на компактность можно подзабить, но хочеццо компактного.

И ещё такой вопрос, т.к. я с блюпупами не работал ниразу программно: а вот ежли мне вот нужно ДВА таких мультиметра к телефону приконнектить ОДНОВРЕМЕННО (софт будет мой) - вообще это возможно???

svm
Offline
Зарегистрирован: 06.11.2016

-NMi- пишет:

Чот то-же "уносит" меня энтот аппинвертор, шо уже несколько вечеров "изучаю" эту игрушку. Прикольно. Да вот беда одна приключилася, прислал китаес мне jdy-40. Пичаль_бида ну и х. с ним. Посему вопрос: шо мы имеем из палитры этих jdy-хх , а именно: 08, 10, 19, 30 и 31. Вопрос: какая из них максимально компактная и дальнобойная? Питание будет 3.3В. Ну на компактность можно подзабить, но хочеццо компактного.

И ещё такой вопрос, т.к. я с блюпупами не работал ниразу программно: а вот ежли мне вот нужно ДВА таких мультиметра к телефону приконнектить ОДНОВРЕМЕННО (софт будет мой) - вообще это возможно???

По поводу аппинвентора. Удалось запустить мой проект? А то у меня опыта работы с ним тоже кот наплакал, и уверенности что отправил Вам то что нужно нет. 

По поводу модулей . Большой разницы в размерах нет. Просто некоторые-голые без стабилизатора 3,3 В и без разъемов и есть варианты на переходной плате (миллиметров на 10 подлиннее). Работают одинаково, метров на 15 отходил, а дальше не нужно было. Но пишут что метров 50. 

Подключить несколько к одному телефону можно. Где-то недавно встречал проект с 6 BT датчиками работающими с одним приложением. Какие-то уроки и довольно хорошо все объясняют.

-NMi-
Offline
Зарегистрирован: 20.08.2018

svm пишет:

По поводу аппинвентора. Удалось запустить мой проект?

По поводу модулей . Работают одинаково, метров на 15 отходил, а дальше не нужно было. Но пишут что метров 50. 

Подключить несколько к одному телефону можно.

Нет, ваш я не запускал. Я написал свой с кнопками коннект и выход. Пока, для изучить этот апп... Никак не разберусь как там кнопки двигать, наверно никак (свойств таких там нет). Тяжко с графиками, как канвас сдвигать - чот то-же не понял. Но в сети есть примеры, нудные правда, но ничо, прикольно на своём телефоне тестить.

По модулям: думаю jdy-31 для меня будет самое то и по габаритам и по мощности.

По поводу несколько устройств: а кто тогда с них ведущий а кто слейв?

svm
Offline
Зарегистрирован: 06.11.2016

-NMi- пишет:

svm пишет:

По поводу аппинвентора. Удалось запустить мой проект?

По поводу модулей . Работают одинаково, метров на 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 модулей как слейв и мастер.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Да, видео посмотрел и теперь я под неким двойным впечатлением. С одной стороны некоторые местные гики говорят об некой скудности этого языка, с другой стороны на видео вполне себе полноценный софт. Так что необходима диверсификация. Почитаю, посмотрю, напишу.

Пионер
Offline
Зарегистрирован: 04.02.2019

-NMi- пишет:

Да, видео посмотрел и теперь я под неким двойным впечатлением. С одной стороны некоторые местные гики говорят об некой скудности этого языка, с другой стороны на видео вполне себе полноценный софт. Так что необходима диверсификация. Почитаю, посмотрю, напишу.

Охренеть . Протрезвел и по человечески изъяснятся начал? Или кто-то ник украл?

Извиняюсь за офф-топ. Не сдержался

svm
Offline
Зарегистрирован: 06.11.2016

-NMi- пишет:

Да, видео посмотрел и теперь я под неким двойным впечатлением. С одной стороны некоторые местные гики говорят об некой скудности этого языка, с другой стороны на видео вполне себе полноценный софт. Так что необходима диверсификация. Почитаю, посмотрю, напишу.

Нормальный язык. Вот здесь почти пошагово и без видео управление BT модулем из аппинвентора. И там как раз много времени уделено расположению элементов управления и индикации на экране.  http://www.martyncurrey.com/create-a-bluetooth-joypad-with-app-inventor-2/#more-7040

-NMi-
Offline
Зарегистрирован: 20.08.2018

Пионер пишет:

Охренеть .

Неплохо было бы на календарь взглянуть - пишу под срецтвом...   ))))))))))))))))))))))))))

svm
Offline
Зарегистрирован: 06.11.2016

-NMi- пишет:

Пионер пишет:

Охренеть .

Неплохо было бы на календарь взглянуть - пишу под срецтвом...   ))))))))))))))))))))))))))

А у меня уже выветрилось.

-NMi-
Offline
Зарегистрирован: 20.08.2018

svm пишет:

Нормальный язык.

Неплохой. Раньше я сравнивал что накомпилит, допустим, дельфи и вижуал С по размеру файла. Сейчас сравнивать по таким критериям крайне не верно. Как гриццо, посмотрим.

-NMi-
Offline
Зарегистрирован: 20.08.2018

svm пишет:

Вот здесь почти пошагово и без видео управление BT модулем из аппинвентора. И там как раз много времени уделено расположению элементов управления и индикации на экране.

Ух!  Ну, во первых, тот скетч, который он выложил "напоказ" - деЦЦкай лепет. Ничо он там не проверяет, Enable - значит включилсО! Нихера. Скачал, скомпилил, запустил! Специально блюпуп выключил и нажал кнопарь "коннект" - и чО? Сцуко, квадратик "зелёный" !!! - включилсО, подключилсО, тока к чему???  ==Фуфло!!!

Короче, вопросы те-же:

- как управлять кнопками из кода (положение) ???

- где (откуда) взять текущее разрешение screen???

- как "сдвигать  и маштабировать" canvas???

- где форматирование события переворота экрана???

Ну и теперь более интересное - через активити экшен посредством api работают некоторые функции андроида, ну типа вкЫл/вЫкл и тд. Но! люди жалуются, что не всё работает. Где взять список совместимости версий андроида с этим инвертером???

PS: графики рисует, цветные, даже с "подложкой" (хоть бап рисуй на фоне). Вопщем если нет компа а "повтыкать" охота - прикольная иде.

svm
Offline
Зарегистрирован: 06.11.2016

-NMi- пишет:

Короче, вопросы те-же:

- как управлять кнопками из кода (положение) ???

- где (откуда) взять текущее разрешение screen???

- как "сдвигать  и маштабировать" canvas???

- где форматирование события переворота экрана???

Ну и теперь более интересное - через активити экшен посредством api работают некоторые функции андроида, ну типа вкЫл/вЫкл и тд. Но! люди жалуются, что не всё работает. Где взять список совместимости версий андроида с этим инвертером???

PS: графики рисует, цветные, даже с "подложкой" (хоть бап рисуй на фоне). Вопщем если нет компа а "повтыкать" охота - прикольная иде.

По этой ссылке достаточно хорошо объяснено как располагать элементы интерфейса. Обратите внимание на вспомогательные элементы (горизонтальное и вертикальное расположение)

Управление кнопками- изменение их свойств (размеры, выравнивание и т.д. и т.п.)

Зачем знать абсолютные размеры? Берите размеры в % от размера экрана.

Зачем его сдвигать и масштабировать?

Не знаю, не пользовался

По остальным вопросам, тоже не помогу. Опыта нет. сделал всего один проект.  Ссылка в #7 посту. Можете открыть и посмотреть, возможно что-то почерпнете. Но если честно, то там каша.

Feofan
Онлайн
Зарегистрирован: 28.05.2017

-NMi- пишет:

- где (откуда) взять текущее разрешение screen???

Свойства Screen: Screen.Width / Screen.Height

-NMi- пишет:

- где форматирование события переворота экрана???

Не понял вопроса. Переворачивать экран - это куда?. Событие при повороте - Screen.ScreenOrientationChanged.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Так, с экраном разобрался,ну вслучечо ещё спрошу...

Вопрос по кнопкам: ну вроде как уже давно привык к расчётному положению кнопок, посему мой подход планируется такой - при запуске определить положение экрана (вертикаль/горизонталь) и ПРОГРАММНЫМ путём ВЫСТАВИТЬ кнопки в зависимости от разрешения экрана. Вопрос: подход правильный или есть другое(ие). Да, забыл, GUI будет состоять из 4 кнопок, но после настроек и всего прочего останется видна только одна кнопка старт/стоп. Это для простоты понимания того, чего я хочу сделать.

Вопрос по Canvas - можно ли её маштабировать и как? Можно ли её делить на условные части или придётся рисовать параллельно в нескольких канвах? (допустим нужен лог с 4 переменных и чтоБ потом эти логи можно было смотреть И по отдельности И или вместе И или наложением друг на друга) Вот.

Ну и пора бы уже об "интимности" речь замолвить - она СЦ..О раздЭзиваецца нараз реверсом!!! Тоесть её можно раздезить, поменять там абсолютно всё и обратно собрать какнивчОмнибывало!!! Пипец!!! Чо дельть???

svm
Offline
Зарегистрирован: 06.11.2016

-NMi- пишет:

Так, с экраном разобрался,ну вслучечо ещё спрошу...

Вопрос по кнопкам: ну вроде как уже давно привык к расчётному положению кнопок, посему мой подход планируется такой - при запуске определить положение экрана (вертикаль/горизонталь) и ПРОГРАММНЫМ путём ВЫСТАВИТЬ кнопки в зависимости от разрешения экрана. Вопрос: подход правильный или есть другое(ие). Да, забыл, GUI будет состоять из 4 кнопок, но после настроек и всего прочего останется видна только одна кнопка старт/стоп. Это для простоты понимания того, чего я хочу сделать.

Вопрос по Canvas - можно ли её маштабировать и как? Можно ли её делить на условные части или придётся рисовать параллельно в нескольких канвах? (допустим нужен лог с 4 переменных и чтоБ потом эти логи можно было смотреть И по отдельности И или вместе И или наложением друг на друга) Вот.

Ну и пора бы уже об "интимности" речь замолвить - она СЦ..О раздЭзиваецца нараз реверсом!!! Тоесть её можно раздезить, поменять там абсолютно всё и обратно собрать какнивчОмнибывало!!! Пипец!!! Чо дельть???

Если всего несколько кнопок прямоугольной формы, то такой подход может быть и подойдет. А если круги, треугольники? Если их размеры менять пропорционально изменению разрешения, то нарушается геометрия. Если оставлять пропорции нормальными, то размещение кривым получается. Так попытка сделать тестер при горизонтальном или вертикальном расположении экрана успехом не увенчалась. Приходится делать два варианта. Один с переключателем по центру и второй - переключатель справа или слева от дисплея. Иначе картинка получается такой, что хочется оторвать руки ее создателю.

По Canvas: Масштабировать не его, а информацию на нем. Допустим у Вас 3 графика. Если вы хотите рассмотреть один-щелкаете по нему и перерисовываете на всю площадь. Для возврата к прежней картинке, должен быть какой-то элемент управления на нем (допустим просто смахнуть) и нарисовать предыдущую картинку

-NMi-
Offline
Зарегистрирован: 20.08.2018

Кнопки пока оставим, посмотрю может у кого ещё.

svm пишет:

Допустим у Вас 3 графика. Если вы хотите рассмотреть один-щелкаете по нему и перерисовываете на всю площадь. Для возврата к прежней картинке, должен быть какой-то элемент управления на нем (допустим просто смахнуть) и нарисовать предыдущую картинку

Вот енто вот слово уже говорит о том, что необходима tinyDB , пральна? Ибо ежли перерисовывать, естественно, нужны данные для рисования. Это всё в конце концов и будет сделано, ибо просто никак по другому. Интересен другой вопрос: допустим мне необходимо сегодня ДВА графика сопоставлять а завтра ЧЕТЫРЕ. Так вот --- КАК проще и удобнее сделать ЭТО ->> посредством одной канвы или посредством нескольких???

Извините за тупизЪм, я ООП не занимался лет много, андрод вообще мало знаю с практической сороны.)))

svm
Offline
Зарегистрирован: 06.11.2016

-NMi- пишет:

Вот енто вот слово уже говорит о том, что необходима tinyDB , пральна? Ибо ежли перерисовывать, естественно, нужны данные для рисования. Это всё в конце концов и будет сделано, ибо просто никак по другому. Интересен другой вопрос: допустим мне необходимо сегодня ДВА графика сопоставлять а завтра ЧЕТЫРЕ. Так вот --- КАК проще и удобнее сделать ЭТО ->> посредством одной канвы или посредством нескольких???

Извините за тупизЪм, я ООП не занимался лет много, андрод вообще мало знаю с практической сороны.)))

Ну по поводу Андроида, мы с Вами наверное на одном уровне, просто я на месяц раньше заниматься начал и уже почти забросил. Запал пропал. А насчет того сколько полотен использовать, это уже как Вам религия и дизайн приложения позволяют. На любом можно изобразить, что хотите. А если нужно несколько анимированных элементов, то по их количеству.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Уровни здесь никак не при чём. Это зависит только лишь от т.н. базовых знаний. Принцип ООП неизменен в любой интерпретации языка. Поэтому про уровень ->> мимо.

А про программу - ну у меня два варианта: либо самому "допереть" , либо у кого-нить "спереть" ... ну так Ван Гог любил говорить.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Feofan пишет:

Свойства Screen: Screen.Width / Screen.Height

Вот бы как пообщаться через мессенджеры ?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

-NMi- пишет:

Уровни здесь никак не при чём. Это зависит только лишь от т.н. базовых знаний. Принцип ООП неизменен в любой интерпретации языка. Поэтому про уровень ->> мимо.

А про программу - ну у меня два варианта: либо самому "допереть" , либо у кого-нить "спереть" ... ну так Ван Гог любил говорить.

Нахрена App Inventor, если есть Android Studio? Я сам меньше месяца как в андроид залез, однако ж, ттт, получается. Первую неделю говна поесть, потом - уже легче :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

DIYMan пишет:

Нахрена App Inventor, если есть Android Studio? Я сам меньше месяца как в андроид залез, однако ж, ттт, получается. Первую неделю говна поесть, потом - уже легче :)

Ты шо, на Яву переехал? 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

DetSimen пишет:

DIYMan пишет:

Нахрена App Inventor, если есть Android Studio? Я сам меньше месяца как в андроид залез, однако ж, ттт, получается. Первую неделю говна поесть, потом - уже легче :)

Ты шо, на Яву переехал? 

Нет, не переехал, просто расширяю навыки.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

а я вот старый стал, баюс-баюс.   :) 

-NMi-
Offline
Зарегистрирован: 20.08.2018

DIYMan пишет:

Нахрена App Inventor, если есть Android Studio?

Нахрена ехать за хлебом на автомобиле, если есть велосипет? И быстрее и дешевле и полезнее для себя самого.

Или вспомни как 20 лет назад можно в делфях побырику накидать проект БД с кучей связанных таблиц? Прикольно так это было и оно работало!!!

А тут "инвертер" - ваащпе чудо! Ни тебе компоФФ с гигами, ни винтоФФ с мегами - браузер --- это наше всё! Накидал побырику, скомпилял побырику и тут-же запустил на телефоне! Лепота!!!

А уж вот уж потом уж, когда всё уж готово --- уотт тогда ведроидстудиа... велкам!!!

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

-NMi- пишет:

DIYMan пишет:

Нахрена App Inventor, если есть Android Studio?

Нахрена ехать за хлебом на автомобиле, если есть велосипет? И быстрее и дешевле и полезнее для себя самого.

 

Ты просто не пробовал. В Android Studio всё достаточно удобно, работа с интерфейсом - на уровне, есть взрослая отладка. Впрочем, не буду настаивать, каждый решает сам.

-NMi-
Offline
Зарегистрирован: 20.08.2018

DIYMan пишет:

Ты просто не пробовал.

Пробовать то я пробовал году ентак в 17-18. Была возможность "поработать" на очень мощном компе. Убунта + студия. Но так-как я "гастробайтер" , как и многие сейчас, то мне просто жалко денег на хороший ноут. А с "инвертером" любой самый сраный комп или ноут летает как веник. Только из таких побуждений.

Feofan
Онлайн
Зарегистрирован: 28.05.2017

-NMi- пишет:

Feofan пишет:

Свойства Screen: Screen.Width / Screen.Height

Вот бы как пообщаться через мессенджеры ?

Лучше тут. Сталкивался - расскажу. Графики не рисовал.

Andry Smart
Offline
Зарегистрирован: 06.09.2016

вот и у меня ноут не тянет андроидстудию. даже процессор двухядерный его не устраивает.

а на нормальных компах у меня дети играют. вот сын взялся за аппинвертор.

 

но похоже через пару месяцев куплю и для себя что то по мощнее.

 

 

Feofan
Онлайн
Зарегистрирован: 28.05.2017

DIYMan пишет:

В Android Studio всё достаточно удобно...

Попробовал. Понравилось.
P.S.
При инсталляции нашлись остатки предыдущей установки 22-х (!) месячной давности. Риторический вопрос - а как я его про..ал раньше?