требуется ОЧЕНЬ СРОЧНАЯ помощь в программировании Arduino

ant-tv
Offline
Зарегистрирован: 21.03.2011

Доброго всем времени суток!
Вопрос в следующем:
Максимум завтра требуется закончить программу для недавно (неделю назад) купленного Arduino. Требуется следующее:

Arduino должна работать как генератор звуковой частоты (ну это понятно, функция tone() ). Через определённый промежуток времени частота должна меняться на другую. Одновременно с этим должна меняться яркость светодиодов подсветки (RGB, код от стандартной MoodLamp).
Частота должна меняться 2мя путями:
1) автоматически (например раз в 1 минут)
2)в ручную - отслеживая кнопку. Т.е. при нажатии кнопки частота звука и яркость светодиодов должны меняться на следующие значения.
Также для настройки частот требуется ввод с Serial Console.
Собственно помощь нужна в следующем:
1) как сделать переключение частот без ф-ции delay() ?
2) как настроить поведение кнопки?
и самое непонятное - 3) как сделать настройку частот с Serial Console?
Спасибо!
ЗЫ  ну и текущее состояние кода (как я понимаю - переключение без delay() сейчас не работает :( )
--------------------------------------
 

ant-tv
Offline
Зарегистрирован: 21.03.2011

char buffer[18]; //буфер ввода
int red, green, blue;
int RedPin = 9; // red LED
int GreenPin = 10; //green LED
int BluePin = 11; // Blue LED
int spkr = 13; // speaker output
int button = 7; // button
int numChar = Serial.available();
long previousMillis = 0; //interval
long interval = 5000;
void setup()
{
Serial.begin(9600); //serial port
Serial.flush();
pinMode(RedPin, OUTPUT);
pinMode(GreenPin, OUTPUT);
pinMode(BluePin, OUTPUT);
pinMode(spkr, OUTPUT);
pinMode(button, INPUT);
/*I can't manage with serial control of the tones.
And has a difficulties with logical operations to control a button
(I mean - if you press the button the frequency changes. If not -
the interval change the frequency)
*/
}
void loop()
{
tone (spkr, 1000, 2000); // tone 1
//here must be the code to change the colour of LEDs
if (millis() - previousMillis > interval) {
previousMillis = millis(); }

tone (spkr, 2000, 2000); // tone 2
if (millis() - previousMillis > interval) {
previousMillis = millis(); }

tone (spkr, 3000, 2000); // tone 3
if (millis() - previousMillis > interval) {
previousMillis = millis(); }
tone (spkr, 4000, 2000); // tone 4
if (millis() - previousMillis > interval) {
previousMillis = millis(); }

tone (spkr, 5000, 2000); // tone 5
if (millis() - previousMillis > interval) {
previousMillis = millis(); }
tone (spkr, 6000, 2000); // tone 6
if (millis() - previousMillis > interval) {
previousMillis = millis(); }
tone (spkr, 7000, 2000); // tone 7
if (millis() - previousMillis > interval) {
previousMillis = millis(); }

tone (spkr, 8000, 2000); // tone 8
if (millis() - previousMillis > interval) {
previousMillis = millis(); }

tone (spkr, 9000, 2000); // tone 9
if (millis() - previousMillis > interval) {
previousMillis = millis(); }

tone (spkr, 10000, 2000); // tone 10
if (millis() - previousMillis > interval) {
previousMillis = millis(); }

tone (spkr, 11000, 2000); // tone 11
if (millis() - previousMillis > interval) {
previousMillis = millis(); }
tone (spkr, 12000, 2000); // tone 12
if (millis() - previousMillis > interval) {
previousMillis = millis(); }
}

Modular
Offline
Зарегистрирован: 05.03.2011

Я что-то пропустил или я вообще не вижу в твоей программе попытку считать значение с пина подключенного к кнопке, вроде такого: 
buttonState = digitalRead(buttonPin);
Также не вижу где ты считываешь данные - Serial.read();
А еще обрати внимание, что при использовании Tone()  на 3 и 11 пине не будет работать ШИМ режим.
 

ant-tv
Offline
Зарегистрирован: 21.03.2011

да я кнопку пока обозначил только и ещё не задействовал.
 
А Serial.read я не понял пока как работает. И вроде из-за этого Serial.Read сегодня ардуину "брикнул" - она работала но ни на что не отвечала. Avrdude теперь ругается что не знает эту плату. И не работает даже простая мигалка (с офисной виндовой машины всё работало)
Я не программист. А только учусь. Кроме попытки выучить Вильнюс-БЭЙСИК 1986 на БК-0010-01 в начале 90-х - я программировать не умею.
Хотел вот как раз и спросить - как сделать чтобы частоты задавать с консоли (мне для отладки надо)
Спасибо

Modular
Offline
Зарегистрирован: 05.03.2011

 Посмотри вот этот пример