Вывод значений штангенциркуля в MS Excel через Ардуино

Skybattter
Offline
Зарегистрирован: 23.12.2021

Всем доброго времени суток
Попросили сделать схему, которая подключается к Ардуино, которая будет выводить значения штангенциркуля в Excel. Схемы была собрана, код написан, работает всё. Но непонятно как сделать так, чтобы значения штангенциркуля выводились постепенно, по нажатию кнопки. Чтоб один нажатие - одно значение в одну ячейку, второе нажатие -  второе значение во вторую ячейку.  Я использую сейчас макрос PLX-DAQ. Но это не то, что я хотел бы использовать, т.к. он выводит всегда в ячейку А1 и дальше каждую строчку выводит значения. Вопрос: какой макрос надо подобрать для Экселя, чтобы это воссоздать? Спасибо

kalapanga
Offline
Зарегистрирован: 23.10.2016

Skybattter пишет:

Схемы была собрана, код написан, работает всё.

После этого как-то странно выглядит вопрос:

Skybattter пишет:

Какой макрос надо подобрать для Экселя, чтобы это воссоздать?

Что значит "подобрать"? Вы же и схему собрали и какой-то код написали - исправьте или Ваш код или используемый макрос, так чтобы они делали то, что Вам нужно.

Skybattter
Offline
Зарегистрирован: 23.12.2021
Вот именно, что я не знаю как код или макрос изменить сколько ни пытался
Прилагаю код программы:


int i; //
int sign; //Задание переменной для вычисления в формуле для вывода
long value; //Задание переменной для вычисления в формуле для вывода
float result; // Переменная для вывода результата значения
int clockpin = 4; //Задание переменной clock на определённый вход (в нашем случае - 4)
int datapin = 5; //Задание переменной data на определённый вход (в нашем случае - 5)
const int button = 2;//Задание переменной для кнопки
bool buttonstate = false;//Задание булевой функции для состояния нажатия кнопки
unsigned long tempmicros;
int row = 2;


void setup() { // void setup используется один раз для  назначения режимов портов
  Serial.begin(9600); // происходит открытие последовательного порта и назначение скорость 9600 бит/c
  Serial.println("CLEARDATA"); // предварительное очищение данных в таблице excel
  Serial.println("LABEL, Length mm"); // задание "шапки" для идентификации данных
  pinMode(button, INPUT_PULLUP); //объявляем кнопку button как вход с подтягивающим резистором
  pinMode(clockpin, INPUT); //объявляем clockpin (т.е. вход 4) как вход
  pinMode(datapin, INPUT); //объявляем datapin (т.е. вход 5) как вход
}

void loop () { //void loop используется для бесконечного цикла программы вплоть до выключения Ардуино или принудительного конца программы
  if (digitalRead(button)==HIGH && !buttonstate){ //задание условия для кнопки. Если кнопка стоит в нажатом состоянии,
    buttonstate = true; // то, её состояние здесь true и выполняются функции ниже
  while (digitalRead(clockpin)==HIGH) {}  //Если у clockpin НИЗКИЙ сигнал (LOW) - ждём когда он станет ВЫСОКИМ (HIGH)
  tempmicros=micros(); //Подсчитывается кол-во микронов, если выполнено верхнее условие
  while (digitalRead(clockpin)==LOW) {} //Условие для clockpin, если сигнал НИЗКИЙ
  if ((micros()-tempmicros)>500) { //
    decode(); //
  }
}
 if (digitalRead(button)==LOW && buttonstate) { // иначе если кнопка находится в отжатом состоянии,
  buttonstate = false; // то её состояние обычное, т.е. false
  delay(100); // задержка, заданная в миллисекундах
 }
}

void decode() {
  sign=1; //задаём переменной sign значение 1
  value=0; //задаём переменной value значение 0
  for (i=0;i<23;i++) { //Задаётся цикл для переменной i. Каждый раз значение i будет увеличиваться на один. И так до того, пока i не дойдёт до своего предела (i<23)
    while (digitalRead(clockpin)==HIGH) {} //Задаётся условие для ожидания ВЫСОКОГО сигнала на clockpin                                                                        Первый бит не нужен
    while (digitalRead(clockpin)==LOW) {} //Задаётся условие для ожидания НИЗКОГО сигнала на clockpin
    if (digitalRead(datapin)==LOW) { //Задаётся условие, если на datapin сигнал НИЗКИЙ
      if (i<20) { //
        value|= 1<<i; // 
      }
      if (i==20) { //
        sign=-1; //
      }
    }
  }
  result=(value*sign)/100.00; //Формула для вывода переменной result
  Serial.print("DATA,");
  Serial.println(result,2);


   if (row < 4) {
  row = 2;
  Serial.println("ROW,SET,2");
  }
}

Много раз менял и оставил пока таким
Код выводит пока одно значение в одну ячейку, заменяя потом другим значением по нажатию кнопки
Пытался использовать CELL,SET, не вышло

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Skybattter пишет:

Всем доброго времени суток
Попросили сделать схему, которая подключается к Ардуино, которая будет выводить значения штангенциркуля в Excel. Схемы была собрана, код написан, работает всё. Но непонятно как сделать так, чтобы значения штангенциркуля выводились постепенно, по нажатию кнопки. Чтоб один нажатие - одно значение в одну ячейку, второе нажатие -  второе значение во вторую ячейку.  Я использую сейчас макрос PLX-DAQ. Но это не то, что я хотел бы использовать, т.к. он выводит всегда в ячейку А1 и дальше каждую строчку выводит значения. Вопрос: какой макрос надо подобрать для Экселя, чтобы это воссоздать? Спасибо

Посмотрите макрос для Excel. Скорее всего там нет перемещения на следующую ячейку. Допишите это в мелкософт бейсике для приложений.

Skybattter
Offline
Зарегистрирован: 23.12.2021

Какую команду надо туда дописать, чтобы это сделать?
А то в бэйсике не очень разбираюсь

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

Ты в чём-нить разбираешься?

Skybattter
Offline
Зарегистрирован: 23.12.2021

Немного С++

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Skybattter пишет:

Какую команду надо туда дописать, чтобы это сделать?
А то в бэйсике не очень разбираюсь

Если важно - давайте перейдем в раздел и там я Вам помогу. Небезвоздмездно. Или Бармалей по демпингу.

Skybattter
Offline
Зарегистрирован: 23.12.2021

Создал тему