Не работает Sheduler

mishgan
Offline
Зарегистрирован: 25.04.2014
В простом коде 

#include <Scheduler.h>
 
int counter = 0;
int counter1 = 0;
 void setup()
{
  Scheduler.startLoop(loop1);
}
 
void loop () {
 analogWrite(9, counter);
 counter++;
 if (counter > 255){
  counter = 0;
 }
 delay(33);
}
 
void loop1 () {
 analogWrite(10, counter1);
 counter1=counter1+5;
 if (counter1 > 255){
  counter1 = 0;
 }
 delay(10);
 yield();
}

возникает ошибка 

In file included from sketch_jun21c.ino:2:
C:\Users\МиО\Documents\Arduino\libraries\Scheduler/Scheduler.h:62: error: 'byte' does not name a type
C:\Users\МиО\Documents\Arduino\libraries\Scheduler/Scheduler.h:64: error: 'NUMBER_OF_SCHEDULED_ACTIONS' was not declared in this scope
C:\Users\МиО\Documents\Arduino\libraries\Scheduler/Scheduler.h:65: error: 'byte' does not name a type
sketch_jun21c.ino: In function 'void setup()':
sketch_jun21c:9: error: expected unqualified-id before '.' token
sketch_jun21c.ino: In function 'void loop1()':
sketch_jun21c:28: error: 'yield' was not declared in this scope
 
У меня mega 2560
mishgan
Offline
Зарегистрирован: 25.04.2014

Подскажите в чем косяк

leshak
Offline
Зарегистрирован: 29.09.2011

Скорее всего в библиотеке Sheduller.

Хотя... слышал но сам не сталкивался, что русские буквы в именах путей могут траблы вызывать.

mishgan
Offline
Зарегистрирован: 25.04.2014

leshak пишет:

Скорее всего в библиотеке Sheduller.

Хотя... слышал но сам не сталкивался, что русские буквы в именах путей могут траблы вызывать.

Это я уже понял. 

Пробовал в Линуксе. Таже фигня. Только там выскакивает ошибка

sketch_jun21c.ino: In function 'void setup()':
sketch_jun21c:9: error: expected unqualified-id before '.' token
mishgan
Offline
Зарегистрирован: 25.04.2014

не помогло. Поменял пути на латиницу. Теже яйца только в профиль

mishgan
Offline
Зарегистрирован: 25.04.2014
#ifndef SCHEDULER_H
#define SCHEDULER_H

#if defined(ARDUINO) && ARDUINO >= 100  
#include "Arduino.h"  
#else  
#include "WProgram.hAOp"  
#endif

//provide a typedef for a void function pointer
typedef void (*function)();

typedef struct schedule_action_s {
	function action;
	unsigned long time;
	unsigned int delay;
	//assignment operator
	schedule_action_s& operator=(const schedule_action_s& rhs){
		action = rhs.action;
		time = rhs.time;
		delay = rhs.delay;
		return *this;
	}
	//boolean equality
	bool operator==(const schedule_action_s& rhs) const{
		return (action == rhs.action && time == rhs.time && delay == rhs.delay);
	}
}schedule_action;


class Scheduler {
	public:
		Scheduler();
		void update();
		void schedule(function userAction, unsigned int time);
	private:
		static const byte NUMBER_OF_SCHEDULED_ACTIONS = 10;
		void defragment();
		schedule_action action[NUMBER_OF_SCHEDULED_ACTIONS];
		byte currentSize;
};

#endif

 

mishgan
Offline
Зарегистрирован: 25.04.2014

проблема я думаю в этой строчке static const byte NUMBER_OF_SCHEDULED_ACTIONS = 10;

 

art100
Offline
Зарегистрирован: 09.03.2014

#include "WProgram.hAOp"

мат какой-то

а этот заголовочник на что ссылается sheduler.cpp

toly
Offline
Зарегистрирован: 17.05.2014

Похоже что у вас вместо arduino.h подключается WProgram.hAOp...проверить просто - вытащить atduino.h наружу из блока #ifdef, а WProgram.hAOp убрать вообще...если начнет компилироваться то надо проверять почему ARDUINO не определен, или определен не той версии (<100)

leshak
Offline
Зарегистрирован: 29.09.2011

На 90% уверен, что в изначальном посте показанны не все ошибки которые выбросила arduinoIDE

Нужно поскролить ошкошко ошибок вверх или вниз. Лог - не полный. Не полное описание ситуации - отсюда и тыкание помогающих в слепую.

Почти наверняка, там будет сообщение что не может найти файл. Либо Arduino.h, либо WProgram.hAOp, а ошибки типа "'byte' does not name a type" - это уже результат что того что файл не найден (в нем как раз и есть описание типов. если файл не найдет, то и "что это за тип" - неизвестно).

Какой именно - зависит от версии ArduinoIDE. Какая у вас версия - известно только телепатам.

Расширение .hAOP - это какая-то порнография.  .h - в этом месте, гораздо более ожидаемо. Так что либо убирать этот AOP, либо ставить себе более свежую версию ArduinoIDE.

А еще, было-бы логично, раз используется какая-то стороняя библиотека дать на нее ссылку. Что-бы, если кому-то будет не лень попробовать у себя скомпилировать этот же код мог это сделать. Или он дожен найти ее сам?  При этом еще должно повести и должна нагуглится именно ТА версия, которая у вас. Ситуации, когда по интету валяется куча разных версий одной и той же библиотеки - масса. Какая именно у вас - можно только гадать.

 

art100
Offline
Зарегистрирован: 09.03.2014

leshak пишет:

расслабся товарищ после моего поста видишь пропал

наверно пошел диск форматировать и винду переставлять

очевидно у него не в одном месте матерщина HAOP 

вот плоскогубцы все пересоберет и все получится сходу

вот вот кота от клавиатуры отгонит и все получится :)

 

mishgan
Offline
Зарегистрирован: 25.04.2014

art100 пишет:

расслабся товарищ после моего поста видишь пропал

наверно пошел диск форматировать и винду переставлять

очевидно у него не в одном месте матерщина HAOP 

вот плоскогубцы все пересоберет и все получится сходу

вот вот кота от клавиатуры отгонит и все получится :)

Если вы такой умный, то почему строем не ходите? Люди порой бывают на работе и доступа к компьютеру у них в этот момент нет.... Извини если, что то необычное для тебя сказал.

В коде выше опечатка. Реально так:

#if defined(ARDUINO) && ARDUINO >= 100  
#include "Arduino.h"  
#else  
#include "WProgram.h"  
#endif

Пробовал я подгружать по отдельности Arduino.h и WProgram.h . Не работает. 

Библиотеку брал здесь http://playground.arduino.cc/Code/Scheduler#Download

leshak
Offline
Зарегистрирован: 29.09.2011
 
"Не работает" или "Не компилируется"?  Ведь разные же вещи...  а от одного слова зависит направление поиска причины. В стартовом посте, у вас было "не компилируется" (по крайней мере ошибка была именно такая).
 
Ссылка на библиотеку, это хорошо... Но, почему-же так и не сказали какая версия ArduinoIDE?  Ведь от этого же зависит на кого из двух Arduino.h или WProgram.h обращать внимание нужно...
leshak
Offline
Зарегистрирован: 29.09.2011

Вообщем "как ожидалось". Изначальный лог ошибки, выглядит полность так:

In file included from sketch_jun22a.ino:2:
D:\AVR\arduino-1.0.4\libraries\Scheduler/Scheduler.h:33:22: warning: WProgram.h: No such file or directory
In file included from sketch_jun22a.ino:2:
D:\AVR\arduino-1.0.4\libraries\Scheduler/Scheduler.h:62: error: 'byte' does not name a type
D:\AVR\arduino-1.0.4\libraries\Scheduler/Scheduler.h:64: error: 'NUMBER_OF_SCHEDULED_ACTIONS' was not declared in this scope
D:\AVR\arduino-1.0.4\libraries\Scheduler/Scheduler.h:65: error: 'byte' does not name a type

Что сразу приводить нас к необходимости загуглить (или поиском по этому форуму) на слово WProgram.h (или саму ошибку целиком)

И найти рецепт лечения в первых же ссылках: В БИБЛИОТЕКЕ, заменить WProgram.h на


#if defined(ARDUINO) && ARDUINO >= 100  
#include "Arduino.h"  
#else  
#include "WProgram.h"  
#endif

После чего, ошибка 'byte' does not name a type - исчезает окончательно. Проблем с библиотекой больше нет 

Видимо это и было у вас на линухе. Там старая версия ArduinoIDE (поэтому там оно не ругалось на отсутсвие WProgram.h).

Зато вылазит новая ошибка теперь уже в самом скетче.

Вот, в какой-то моемент, проблема с библиотекой - решилась. Но это прошло как-то "вскольз".

Все же думают, что вы и дальше с библиотекой воюете, а вы оказывается, уже с новой проблемой боретесь.

Кстати, то что она ругается еще и на неизвестную функцию yield();, про это вы как-то забыли упомянуть.

Или вы сами не заметили, что библиотека у вас заработала? Так это потому, что обычно, работу с библиотекой начинают с запуска примеров идущих с библиотекой. Если они компилируются - значит с библиотекой все в порядке и можно начинать писать свой код. А не наоборот...

Кстати, поглядывание в примеры, помогает и свой код начать писать осмысленно.

Вы пример смотрели, читал-ли собственну ссылку?  Смотрели как нужно пользоваться этой библиотекой? Честно говоря я ничего общего между примером и вашим скетчем не увидел.

 

leshak
Offline
Зарегистрирован: 29.09.2011

Не, ну вот сколько времени бы можно было съкономить, если бы сразу сказали "что откуда брали", а если бы я не сказал, давайте ссылку на библиотеку, то вообще до "морковкиного заговения" тут бы гадали кто ходит строем, а кто нет.

OK. На библиотеку вы ссылку дали... а код откуда слямзили почему не сказали?  Раз брали-то из раных мест.

Вообщем.... "раз-два-три четеры пять, начинаю телепать..".

Вообщем инсталили мы одну библиотеку, А пример пытаемся запустить от другой. И чего оно не работает спрашивается?

Библиотеку взяли эту: http://playground.arduino.cc/Code/Scheduler#Download

А примеры взяли  от этой: http://arduino.cc/en/Reference/Scheduler

Одна - стороняя, другия идет с новыми ArduinoIDE в комплекте (и ставить ее ну нужно).

Причем у той которая в комплете, описание начинается со слов "The Scheduler library enables the Arduino Due", которая, на минуточку на процессоре ARM Cortex-M3, и ни на 8-ми битнике как ваша мега (аллилуя, что хоть какая у вас плата сказали сразу).

 

 

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

1. скачайте заново библиотеку по своей ссылке и происнтальте заново  (мало-ли что еще кот, туда успел напечатать за эти дни).
2. Примените к ней "рецепт лечения" из сообщения №15 (только внимательно)
3. Смотрите пример к ЭТОЙ библиотеке, разбирайтесь как с ней работать нужно...

И будет вам щастье. 

mishgan
Offline
Зарегистрирован: 25.04.2014

Спасибо leshak что все талково разжевали. Впредь обещаю описывать проблемы до мельчайших подробностей.