программировние ардуино
программировние ардуино
есть пара проверенных скетчей. каждый по 15 строк. Они между собой не связаны. Можно ли их одновременно загрузить и вызывать нажатием кнопки
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: программировние ардуино
Привет!
Можно их перенести в отедельные функции: func1() и func2(), а затем вызывать их когда нужно по нажатию соответствующей кнопки.
Можно их перенести в отедельные функции: func1() и func2(), а затем вызывать их когда нужно по нажатию соответствующей кнопки.
Re: программировние ардуино
Здравствуйте Григорий - большое спасибо за ответ! Буду изучать, раз есть направление.
Еще вопрос : могли бы мне дать адрес примера для такой задачи:
имеются три контакта А,В,С. Они последовательно и поочередно подают на вход импульсы "1". А-В-С и С-В-А. что-то вроде линейного энкодера. скважность импульсов примерно 200мс/2000мс.
Как организовать преобразование этой последовательности в подсчет количества переборов. Импульс В -для начала отсчета. Максимальное кол-во переборов не превышает 40.
Реверс может появиться в любой момент и счетчик, если прибавлял должен отнимать?
Мне для начала хотя бы просто счетчик подскажите.
Еще вопрос : могли бы мне дать адрес примера для такой задачи:
имеются три контакта А,В,С. Они последовательно и поочередно подают на вход импульсы "1". А-В-С и С-В-А. что-то вроде линейного энкодера. скважность импульсов примерно 200мс/2000мс.
Как организовать преобразование этой последовательности в подсчет количества переборов. Импульс В -для начала отсчета. Максимальное кол-во переборов не превышает 40.
Реверс может появиться в любой момент и счетчик, если прибавлял должен отнимать?
Мне для начала хотя бы просто счетчик подскажите.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: программировние ардуино
Надо реализовать два конечных автомата. Для каждой последовательности свой. Попробую набросать алгоритм немного позже.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: программировние ардуино
Вот, что мне пришло в голову:
На железе не проверял. Если будут вопросы - пишите.
Код: Выделить всё
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;
}
}
Re: программировние ардуино
Спасибо большое!
Сразу не мог скомпилировать - выдает ошибку . В скетче почему то нет обязательных функций 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'
Буду разобраться. Если не добьюсь - попрошу помощи.
Сразу не мог скомпилировать - выдает ошибку . В скетче почему то нет обязательных функций 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'
Буду разобраться. Если не добьюсь - попрошу помощи.
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: программировние ардуино
Код, который я привел выше, следует рассматривать как псевдокод. Чтобы он заработал его надо встроить в стандартную обвязку из setup() и loop() в Ardino IDE.
Re: программировние ардуино
Скетч имитации движения заработал - приступил к изготовлению девайса.
Новую задачу поставил - освоить WIFI Shield. Купил в Вашем магазине и без проблем подключился к сети.
Потом интегрировал в свой скетч программку для WPA - конфликтов нет.
А теперь вопрос: как использовать WIFI? Подскажите пожалуйста или ссылку где почитать.
Можно ли использовать карту CD для хранения скетча?
Новую задачу поставил - освоить WIFI Shield. Купил в Вашем магазине и без проблем подключился к сети.
Потом интегрировал в свой скетч программку для WPA - конфликтов нет.
А теперь вопрос: как использовать WIFI? Подскажите пожалуйста или ссылку где почитать.
Можно ли использовать карту CD для хранения скетча?
- Mr.Kubikus
- Сотрудник ПАКПАК
- Сообщения: 1020
- Зарегистрирован: 22 окт 2010, 23:57
Re: программировние ардуино
Привет!
SD-карту для хранения скетча использовать не получится. Можно конечно написать загрузчик, который будет каждый раз копировать из sd-карты код и писать его во встроенный флэш микроконтроллера, но, я думаю, это не имеет смысла.
О работе с WIFI шилдом подрбно рассказывается на сайте разработчиков - http://arduino.cc/en/Guide/ArduinoWiFiShield
SD-карту для хранения скетча использовать не получится. Можно конечно написать загрузчик, который будет каждый раз копировать из sd-карты код и писать его во встроенный флэш микроконтроллера, но, я думаю, это не имеет смысла.
О работе с WIFI шилдом подрбно рассказывается на сайте разработчиков - http://arduino.cc/en/Guide/ArduinoWiFiShield