Проблемы со скетчем или сам себе купил головную боль (arduino) а отказаться не могу, нравится))

dennnissska
Offline
Зарегистрирован: 22.02.2015

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

Кто знает как решить вопрос подскажите ( вопрос про скетч, не про мозги))

void setup() {
//главная функция (настраиваем 13 вывод на выход)
pinMode(13, OUTPUT); //соответственно после этой фразы 13 становиться выходом
}
void loop() //основной цикл программы
{
if(digitalRead(14)==HIGH)//если кнопка нажата ...
for(int i=0;i<=12;i++)
/*
этой фразой был создан цикл объявлена переменная типа int переменой i присвоено начальное значение 0 создано правило проверки выхода из цикла гласящее что цикл закончен как только i станет равной 12 и также создан счетчик i++ при каждом обращении к которому i увеличивает свое состояние на 1.
*/
{
digitalWrite(13, HIGH); // включаем светодиод подавая на 13 вывод логическую 1
delay(50); // пауза
digitalWrite(13, LOW); // выключаем светодиод подавая на 13 вывод логический 0
delay(50); // пауза
}
if(digitalRead(14)==HIGH)//если кнопка нажата
 { 
 digitalWrite(13,LOW);//выключаем 
 } 
}

 

guliyev34
Offline
Зарегистрирован: 17.03.2015

Я новичок в этом, но понял что ты хочешь чтобы СД мигал 12 раз) Но вот этой строчкой :


for(int i=0;i<=12;i++)

Ты делаешь 13 повторений. i=0,1,2,3,4,5,6,7,8,9,10,11,12 и того 13)
Может причина в этом?) 

guliyev34
Offline
Зарегистрирован: 17.03.2015

Я только учусь..

ran075
Offline
Зарегистрирован: 24.03.2015

dennnissska, тебе нужна еще одна переменная-флаг, при помощи которой ты будешь игнорировать нажатие кнопки после того как начались твои мигания. Например, булевская переменная Start, которая хранит информацию о том, активна ли отработка 12ти миганий или нет в данный момент.



if(digitalRead(14)==HIGH)&&(!Start)
{
Start=true;
 for...
 {
 ...
 }
Start=false;
}

 

dennnissska
Offline
Зарегистрирован: 22.02.2015

Спасибо попробую эту переменную

dennnissska
Offline
Зарегистрирован: 22.02.2015

Решил свой вопрос.

int start=12;
void setup() {
//главная функция (настраиваем 13 вывод на выход)
pinMode(13, OUTPUT); //соответственно после этой фразы 13 становиться выходом
}
void loop() //основной цикл программы
{
if(digitalRead(14)==HIGH&&start)//если кнопка нажата ... 
{
start=true;
  for(int i=0;i<=12;i++)
/*
этой фразой был создан цикл объявлена переменная типа int переменой i присвоено начальное значение 0 создано правило проверки выхода из цикла гласящее что цикл закончен как только i станет равной 12 и также создан счетчик i++ при каждом обращении к которому i увеличивает свое состояние на 1.
*/
{
digitalWrite(13, HIGH); // включаем светодиод подавая на 13 вывод логическую 1
delay(50); // пауза
digitalWrite(13, LOW); // выключаем светодиод подавая на 13 вывод логический 0
delay(50); // пауза
}

start=false;
}
if(digitalRead(14)==LOW)
{
start=true;
}
}

Но возник другой вопрос.

12 кнопок, при нажатии на кнопку происходит выше описанный скетч. Но в той лишь разницы что при нажатии кнопки номер 1 светодиод мигает раз, при нажатии 2 кнопки мигает 2раза, и так до 12 кнопки.

Вопрос в следующем, как посадить все 12 кнопок на один вход А0

bwn
Offline
Зарегистрирован: 25.08.2014

Читаем здесь , только делитель рассчитать придется.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

dennnissska, Никто не решает подобные задачи как вы сейчас это собираетесь (Использовать х кнопок для мигания светодиодом  х раз).  Логичнее взять енкодер, подкрутить нужное значение, и кнопкой на енкодере запустить.

dennnissska
Offline
Зарегистрирован: 22.02.2015

dimax

Возможно Вы имели ввиду энкодер?

В моем случае это не логично.

Я не игрушку на светодиодах собираю, они для отладки, (это просто к сведенью, внимание на этом не заострять)  

И нужны именно кнопки, так как расположенны они будут в разных местах, тут применение энкодера не возможно.

Или я Вас не так понял?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

dennnissska, меня вы правильно поняли. Это вас трудно понять, т.к. непонятно что вы собственно мастерите.

dennnissska
Offline
Зарегистрирован: 22.02.2015

dimax

Eсли объяснить в кратце и если поймете идею.

Делаю механическую коробку передач для игр на ноутбуке на базе клавиотуры (отдельно взятая клавиотура для эксперементов)

Cделаю оговорку что я знаю о существовании Mjoy16 и т.д. знаю что все готовое продается)))

Суть такова, при нажатии кнопки клавиотуры (по дефолту Shift) включается передача 1, жмем еще раз Shift вклячается 2 передача и т.д. 

Ctrl передача вниз

Alt нейтралка

Моя механика работает следующем образом, когда включается 1 передача то включается кнопка номер 1, соответственно Arduino нажмет кнопку клавиатуры Shift один раз, при включении второй передачи, включается кнопка 2 соответственно Arduino нажимает два раза и т.д. количество передач зависит от конструкции механики, у меня их 12

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

Это только часть проекта, так как ведется разработка руля без помощи Arduino, а так же пидального блока.

PS Извеняюсь за оффтоп.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

dennnissska, теперь понятно. да, в этом случае есть резон сделать кнопки на аналоговом входе. Тут вроде много инфы по этой тематике, можно ещё на сайт Лешака заглянуть. Если взять ардуино-микро, то можно обойтись без потрошения клавиатуры, т.е. посылать скан-коды нужных клавиш сразу из ардуино в компьютер.

 

dennnissska
Offline
Зарегистрирован: 22.02.2015

dimax.
Спасибо за информацию, ознакомлюсь.
Ардуино-микро на прямую с компьютером заманчиво конечно, но боюсь написание скетча не осилю.
Так как в моём случае на себя берет контроллер клавиатуры, а ардуино выполняет примитивные команды, с их скетчем кое-как справляюсь)))

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

dennnissska, вы б хотя бы посмотрели на примеры.. послать строку Keyboard.press(KEY_LEFT_SHIFT) не сложнее чем помигать светодиодом :)