Добавить указатели
- Войдите на сайт для отправки комментариев
Втр, 24/09/2019 - 18:03
Добрый день. Требуется исполнитель для небольшой доработки:
В следующем сообщении код с комментариями.
Добрый день. Требуется исполнитель для небольшой доработки:
В следующем сообщении код с комментариями.
int16_t ledFP[] = {5, 6, 7}; void setup() { for (int i = 0; i < 3; i++){ pinMode(ledFP[i], OUTPUT);} } void loop() { action(); } int hold(int16_t stoping) { // требуется добавить указатель на нужную функцию в качестве еще одного параметра int result; static uint32_t period = 0; static int16_t interspace = stoping; if ((millis() - period) > interspace) { f1(); // тут необходима нужная функция (f1, f2, f3) period = millis(); return result; } } void f1(){ digitalWrite(ledFP[0],!digitalRead(ledFP[0])); } void f2(){ digitalWrite(ledFP[1],!digitalRead(ledFP[1])); } void f3(){ digitalWrite(ledFP[2],!digitalRead(ledFP[2])); } void action(){ hold(500); // тут необходимо указывать в качестве второго параметра имя необходимой функции }Не смог разобраться с указателями
500000р., пишите в личку.
А если серьезно, то это вопрос по языку, а не по платформе ардуино. Вы легко можете получить безвозмездный ответ на любом форуме по C/C++ или даже в гугле.
500000р., пишите в личку.
А если серьезно, то это вопрос по языку, а не по платформе ардуино. Вы легко можете получить безвозмездный ответ на любом форуме по C/C++ или даже в гугле.
Я не смог разобраться. Узнал много нового, но еще больше запутался. Читаю книгу - "Язык С Б.В. Керниган, Д.М. Ритчи", но там для чистого С. С программированием я столкнулся только начав плотно изучать Arduino.
Пджди до завтра, прикрутим тебе указателей жменю
Ога, две пачки.
void callee( int *data ) { int *i = data; Serial.println(*i); } void callee2( int *data ) { int *i = data; Serial.println(*i); } void caller( void ( *foo1 ) ( int* ), int *data ) { foo1(data); } void action() { int hold = 10050; caller( callee, &hold ); hold = 5010; caller( callee2, &hold ); }Добрый день. Требуется исполнитель для небольшой доработки:
В следующем сообщении код с комментариями.
Это похоже blink, только почему так запутано написан?
Добрый день. Требуется исполнитель для небольшой доработки:
В следующем сообщении код с комментариями.
Это похоже blink, только почему так запутано написан?
Делаю "многозадачность". Задержка много где нужна.
Еще раз доброго всем дня. Вот, что у меня получилось благодаря наводке negavoid
int16_t ledFP[] = {11, 8, 2}; void setup() { Serial.begin(9600); for (int i = 0; i < 3; i++){ pinMode(ledFP[i], OUTPUT);} } void loop() { action(); } int hold(int *stoping, void(*foo1)()) { int result; static uint32_t period = 0; static int16_t interspace = stoping; if ((millis() - period) > interspace) { foo1(); period = millis(); return result; } } void f1(){ Serial.println("1"); digitalWrite(ledFP[0],!digitalRead(ledFP[0])); } void f2(){ Serial.println("2"); digitalWrite(ledFP[1],!digitalRead(ledFP[1])); } void f3(){ Serial.println("3"); digitalWrite(ledFP[2],!digitalRead(ledFP[2])); } void action(){ hold(1000, f3); }Код работает, но меня смущает сообщение компилятора:
C:\Users\Администратор\Documents\Arduino\sketch_sep24a\sketch_sep24a.ino: In function 'int hold(int*, void (*)())': C:\Users\Администратор\Documents\Arduino\sketch_sep24a\sketch_sep24a.ino:16:31: warning: invalid conversion from 'int*' to 'int16_t {aka int}' [-fpermissive] C:\Users\Администратор\Documents\Arduino\sketch_sep24a\sketch_sep24a.ino: In function 'void action()': C:\Users\Администратор\Documents\Arduino\sketch_sep24a\sketch_sep24a.ino:40:16: warning: invalid conversion from 'int' to 'int*' [-fpermissive] C:\Users\Администратор\Documents\Arduino\sketch_sep24a\sketch_sep24a.ino:13:5: note: initializing argument 1 of 'int hold(int*, void (*)())'Меня тож кое-что смущает, а именно: ТС, ты случайно разделом не ошибся?
И правильно делает, что смущает.
О, оно ещё и скомпилировалось! Ну вообще :)))
Это на юзера администратор ругается
C:\Users\Администратор\Documents\Arduino\sketch_sep24a\sketch_sep24a.ino:13:5:
ТС, ты случайно разделом не ошибся?
Да, он пытался в другом. Там ему DetSimen даже код готовый написал, но что-то не срослось. Наверное, подумал, что здесь лучше напишут.
ТС, ты случайно разделом не ошибся?
Да, он пытался в другом. Там ему DetSimen даже код готовый написал, но что-то не срослось. Наверное, подумал, что здесь лучше напишут.
Я надеюсь, что в будущем также поржу над данной версией своего кода. )))
И правильно делает, что смущает.
О, оно ещё и скомпилировалось! Ну вообще :)))
Сам в шоке ))) Но может почту Вашу отправите? Я же предлагал на платной основе. )))
Не, пожалуй, воздержусь ))), только не обижайтесь!!! На платной основе, я, гм, работаю с несколько более сложными проблемами, чем у вас, с большими братьями ардуины. А ардуино - моё хобби, я не исполнитель, здесь я помогаю бесплатно, по фану, по велению души, просто потому, что мне так интересно :)
Не, пожалуй, воздержусь ))), только не обижайтесь!!! На платной основе, я, гм, работаю с несколько более сложными проблемами, чем у вас, с большими братьями ардуины. А ардуино - моё хобби, я не исполнитель, здесь я помогаю бесплатно, по фану, по велению души, просто потому, что мне так интересно :)
Понятно, так я и не обижаюсь )))
Кстати, только две ошибки осталось и код, при этом, работает )))
Но, Русские не сдаются! )))
Открыт для предложений ) Хочу прокачать скилл. )
void func() + return value = бессмыслица.
Все. Вопрос решен:
Еще раз спасибо negavoid и DetSimen
int16_t ledFP[] = {11, 8, 2}; void setup() { Serial.begin(9600); for (int i = 0; i < 3; i++){ pinMode(ledFP[i], OUTPUT);} } void loop() { action(); } void hold(int stoping, void(*foo1)()) { static uint32_t period = 0; static int16_t interspace = stoping; if ((millis() - period) > interspace) { foo1(); period = millis(); } } void f1(){ Serial.println("1"); digitalWrite(ledFP[0],!digitalRead(ledFP[0])); } void f2(){ Serial.println("2"); digitalWrite(ledFP[1],!digitalRead(ledFP[1])); } void f3(){ Serial.println("3"); digitalWrite(ledFP[2],!digitalRead(ledFP[2])); } void action(){ hold(1000, f2); }void func() + return value = бессмыслица.
Спасибо. Пока писал сообщение, то не увидел Ваше. Да, там и была собака зарыта. Спасибо и Вам.
Делаю "многозадачность". Задержка много где нужна.
Не так ты её делаешь. Лучше так делай
https://github.com/DetSimen/Arduino_TimerList
Делаю "многозадачность". Задержка много где нужна.
Не так ты её делаешь. Лучше так делай
https://github.com/DetSimen/Arduino_TimerList
Благодарю. Мне действительно интересно это направление. С удовольствием читаю ваш пост на github.
ччитай. там и указатели на функции есть. и как параметр передаюца даже.
С таким уровнем подготовки и многозадачность на восьмибитном МК... Ну, не знаю... Я вот, например, не берусь за такие странные дела.
С таким уровнем подготовки и многозадачность на восьмибитном МК... Ну, не знаю... Я вот, например, не берусь за такие странные дела.
И не удивительно, с твоим-то уровнем подготовки. Подобной "многозадачностью" только новички и увлекаются, тебе она уже не нужна :)