Структура проекта:
void main (void)
{
whule(1)
{
}
}
void step_motor (void)
{
}
Как мне при помощи нажатия кнопки запустить выполнение подпрограммы void step_motor (void)?????
Marchello писал(а):Как мне при помощи нажатия кнопки запустить выполнение подпрограммы void step_motor (void)?????
Код: Выделить всё
#define KEYNUM 5 // тут указываем номер лапки порта, к которой подключена кнопка
void main (void)
{
while(1)
{
if((!PINA & (1 << KEYNUM)) != 0) //если кнопка нажата
{
_delay_ms(30); //антидребезговая задержка
if((!PINA & (1 << KEYNUM)) != 0) //если все еще нажата, значит все в порядке, можно вызывать
step_motor(); //вызываем функцию
}
}
}
void step_motor (void)
{
}Код: Выделить всё
unsigned char servo1_position(int pos)
{
return pos/2;
}
...
в самой программе
OCR1A = servo1_position(1000+i)
...Код: Выделить всё
while(1); { printf("%u",i);
OCR1B++;}
}Все понятно, только вот как вы сообщите этой же функции read_array() с какого символа начинать считать?и зачем вообще выставлять флаг, и затем в следующем же шаге проверять его состояние, когда можно простоunalex писал(а):вариант с возвращением позиции должен состоять из еще одного перебора массива, в котором как раз будет производиться это самое чтение
Код: Выделить всё
for(unsigned char i = 0; i < arraysize; i++)
{
if(array[i] == etalon) readArray;
} Код: Выделить всё
find(uint8_t symbol, uint8_t * array , uint8_t arraysize ){
for(unsigned char i = 0; i < arraysize; i++)
{
if(array[i] == symbol) break;
}
return i;
}
read_array(find(125,&massive,248));
вот так, напримерvitalik_1984 писал(а):с какого символа начинать считать?
Код: Выделить всё
unsigned char flag = 0; //флаг, при нахождении нужного элемента устанавливается в 1
unsigned char j = 0;
for(unsigned char i = 0; i < arraysize; i++)
{
if(array[i] == etalon) flag = 1;
if(flag == 1) newarray[j++] = array[i];
}
согласитесь это уже немного другой подход?Тут уже видно для чего нужен флаг, только это тоже вариант не корректный.unalex писал(а):Код: Выделить всё
unsigned char flag = 0; //флаг, при нахождении нужного элемента устанавливается в 1 unsigned char j = 0; for(unsigned char i = 0; i < arraysize; i++) { if(array[i] == etalon) flag = 1; if(flag == 1) newarray[j++] = array[i]; }
Код: Выделить всё
unsigned char flag = 0; //флаг, при нахождении нужного элемента устанавливается в 1
unsigned char j = 0;
for(unsigned char i = 0; i < arraysize; i++)
{
if(flag == 1) {newarray[j++] = array[i];}
else {if(array[i] == etalon) flag = 1; }
}
Будем корректными, ваш первый вариант кода ничего не отправлял параметром.Мои вариант сразу передает в функцию номер символа.unalex писал(а): все зависит от того что автор хочет дальше делать или читать в новый массив или вызывать функцию(в этом случае отправляем в качестве параметра номер элемента)
согласен, мой вариант делает ненужные сравненияvitalik_1984 писал(а):Тут уже видно для чего нужен флаг, только это тоже вариант не корректный.
так не будут производиться ненужные сравнения с эталоном если флаг =1
ну так я там написал в общем виде - обозвал процедуру чтения абстрактным словом readArray(мог бы просто написать blabla) - вместо этого автор сам ставит то что ему нужноvitalik_1984 писал(а):Будем корректными, ваш первый вариант кода ничего не отправлял параметром
Код: Выделить всё
newarray[j++] = array[i];Код: Выделить всё
readArray(i)Код: Выделить всё
blabla = readArray(i)А если просто вот так?:Marchello писал(а):Коты, выручайте! Мозг себе вынес не могу никак сообразить как вызвать подпрограмму!
Структура проекта:
void main (void)
{
whule(1)
{
}
}
void step_motor (void)
{
}
Как мне при помощи нажатия кнопки запустить выполнение подпрограммы void step_motor (void)?????
Код: Выделить всё
While(1)
{
if(PINB.1) step_motor ();
}else returnunalex писал(а): else return;
}
smile vitalik_1984(command x)unalex писал(а):smile vitalik_1984(command x)
Error: C:\Docs\Платы\Проекты AVR\Led_light_control\Main.c(158): undefined symbol 'While'
Error: C:\Docs\Платы\Проекты AVR\Led_light_control\Main.c(158): undefined symbol 'Whule'
Слово "while" нужно писать с маленькой буквы,иначе компилятор ошибку выдаст. У меня в предыдущем сообщении нарисовалась большая,виноват—писать код си на андроиде не очень удобно.vitalik_1984 писал(а):а вы уверены, что While именно так пишется? Вроде как си чувствителен к регистру символов.
А whule(1) вообще улыбнуло