Тел. (495) 972-27-12

программировние ардуино

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY

программировние ардуино

Сообщение VMG45 » 13 фев 2014, 11:16

есть пара проверенных скетчей. каждый по 15 строк. Они между собой не связаны. Можно ли их одновременно загрузить и вызывать нажатием кнопки
VMG45
 
Сообщения: 10
Зарегистрирован: 08 фев 2014, 21:23

Re: программировние ардуино

Сообщение Mr.Kubikus » 13 фев 2014, 11:55

Привет!

Можно их перенести в отедельные функции: func1() и func2(), а затем вызывать их когда нужно по нажатию соответствующей кнопки.
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 878
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: программировние ардуино

Сообщение VMG45 » 13 фев 2014, 13:25

Здравствуйте Григорий - большое спасибо за ответ! Буду изучать, раз есть направление.
Еще вопрос : могли бы мне дать адрес примера для такой задачи:
имеются три контакта А,В,С. Они последовательно и поочередно подают на вход импульсы "1". А-В-С и С-В-А. что-то вроде линейного энкодера. скважность импульсов примерно 200мс/2000мс.
Как организовать преобразование этой последовательности в подсчет количества переборов. Импульс В -для начала отсчета. Максимальное кол-во переборов не превышает 40.
Реверс может появиться в любой момент и счетчик, если прибавлял должен отнимать?
Мне для начала хотя бы просто счетчик подскажите.
VMG45
 
Сообщения: 10
Зарегистрирован: 08 фев 2014, 21:23

Re: программировние ардуино

Сообщение Mr.Kubikus » 13 фев 2014, 13:35

Надо реализовать два конечных автомата. Для каждой последовательности свой. Попробую набросать алгоритм немного позже.
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 878
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: программировние ардуино

Сообщение Mr.Kubikus » 21 фев 2014, 19:57

Вот, что мне пришло в голову:
Code: [Выделить всё] [Expand/Collapse]
int inA, inB, inC; // Входы
int counter = 0;   // Счетчик
int newInState = 0;  // Состояние входов
int prevInState = 0; // Состояние входов от предыдущей итерации
int state1 = 0; // Состояние конечного автомата (КА) 1
int state2 = 0; // Состояние конечного автомата 2

// Сравниваем состояние входов с состоянием в пред. итерации. Если состояние изменилось, то запускаем обновление КА
// Вызываем эту функцию в loop()
void counter_super_func() {
  newInState = inA<<2 | inB<<1 | inC;
  if (newInState != prevInState) {
    func_1();
    func_2();
  }
  prevInState = newInState;
}

// КА для последовательност A-B-C
void func_1 () {
  switch (state1) {
  case 0:
    if (inA && !inB && !inC) {
      state1= 1;
    } else {
      state1=0;
    }
    break;
  case 1:
    if (!inA && inB && !inC) {
      state1= 2;
    } else {
      state1=0;
    }
    break;
  case 2:
    if (!inA && !inB && inC) {
      state1= 3;
    } else {
      state1=0;
    }
    break;
  case 3:
    if (!inA && !inB && !inC) {
      state1= 0;
      counter++;
    } else {
      state1=0;
    }
    break;
  }

}

// КА для последовательност С-B-A
void func_2 () {
  switch (state2) {
  case 0:
    if (!inA && !inB && inC) {
      state2= 1;
    } else {
      state2= 0;
    }
    break;
  case 1:
    if (!inA && inB && !inC) {
      state2= 2;
    } else {
      state2= 0;
    }
    break;
  case 2:
    if (inA && !inB && !inC) {
      state2= 3;
    } else {
      state2=0;
    }
    break;
  case 3:
    if (!inA && !inB && !inC) {
      state2= 0;
      counter--;
    } else {
      state2=0;
    }
    break;
  }

}
GeSHi © Codebox Plus


На железе не проверял. Если будут вопросы - пишите.
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 878
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: программировние ардуино

Сообщение VMG45 » 21 фев 2014, 20:41

Спасибо большое!
Сразу не мог скомпилировать - выдает ошибку . В скетче почему то нет обязательных функций setup и loop, я их вписал - но безрезультатно

core.a(main.cpp.o): In function `main':
Desktop/Arduino 4.app/Contents/Resources/Java/hardware/arduino/cores/arduino/main.cpp:5: undefined reference to `setup'
Desktop/Arduino 4.app/Contents/Resources/Java/hardware/arduino/cores/arduino/main.cpp:15: undefined reference to `loop'


Буду разобраться. Если не добьюсь - попрошу помощи.
VMG45
 
Сообщения: 10
Зарегистрирован: 08 фев 2014, 21:23

Re: программировние ардуино

Сообщение Mr.Kubikus » 21 фев 2014, 20:50

Код, который я привел выше, следует рассматривать как псевдокод. Чтобы он заработал его надо встроить в стандартную обвязку из setup() и loop() в Ardino IDE.
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 878
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва

Re: программировние ардуино

Сообщение VMG45 » 16 мар 2014, 07:06

Скетч имитации движения заработал - приступил к изготовлению девайса.
Новую задачу поставил - освоить WIFI Shield. Купил в Вашем магазине и без проблем подключился к сети.
Потом интегрировал в свой скетч программку для WPA - конфликтов нет.
А теперь вопрос: как использовать WIFI? Подскажите пожалуйста или ссылку где почитать.
Можно ли использовать карту CD для хранения скетча?
VMG45
 
Сообщения: 10
Зарегистрирован: 08 фев 2014, 21:23

Re: программировние ардуино

Сообщение Mr.Kubikus » 16 мар 2014, 10:28

Привет!

SD-карту для хранения скетча использовать не получится. Можно конечно написать загрузчик, который будет каждый раз копировать из sd-карты код и писать его во встроенный флэш микроконтроллера, но, я думаю, это не имеет смысла.

О работе с WIFI шилдом подрбно рассказывается на сайте разработчиков - http://arduino.cc/en/Guide/ArduinoWiFiShield
С уважением, Григорий
GitHub FB ВК TW
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
 
Сообщения: 878
Изображения: 49
Зарегистрирован: 22 окт 2010, 23:57
Откуда: Москва


Вернуться в Arduino и Ко. ♥♥♥



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron