Необходима помощь с кодом
- Войдите на сайт для отправки комментариев
Ср, 24/12/2014 - 17:18
Ребят,есть вот такой код;
#include <pt6961.h> #include <EEPROM.h> #include <SPI.h> int pausable=1; int tr=0; int td=0; int valu=0; ////пин 10 SSpin spi,3 пин пищалки,13 CLK,11 strobe. int val=0; int timer=30; int buttonState=0; PtDriver comm; //имя класса void setup() { pinMode (A0, INPUT); pinMode (9, INPUT); pinMode (7, OUTPUT); pinMode (6, OUTPUT); pinMode (8, OUTPUT); //аналоговый вход на вход) } void loop() { comm.init(10); //ss pin spi,и инициализация комманд для начала работы драйвера digitalWrite(9, HIGH); digitalWrite(8, LOW); buttonState = digitalRead(9); if (buttonState == LOW) { delay(10); start(); } } void start(){ switch (pausable) { case 1: for(int i = timer; i > 0; i--){ EEPROM.write(1, 0); EEPROM.write(1, i); //// comm.digit(i, 1);//параметр 1 цифра,параметр 2 от 0 до 2. 0 ничего,1 горит значек плей,2 горит значек паузы. //// tone(3, 2000, 200); delay(1000); if(i==1){ EEPROM.write(1, 0); comm.digit(0, 2); //1 play 2 pause tone(3, 2000, 1500); delay(6000); delay(1000); digitalWrite(7, HIGH); digitalWrite(6, LOW); delay(4000); digitalWrite(6, LOW); digitalWrite(7, LOW); delay(3000); break; } } break; case 2: valu=EEPROM.read(1); comm.digit(valu, 2); delay(100000); break; } }
В общем я не могу никак сделать одну вещь.В общем по нажатию кнопки запускается функция start().Мне необходимо чтоб по второму нажатию кнопки функция start немедленно прекратила свою работу и переменная pausable добавилась на 1.А потом она должна возпроизвестись снова но так как pausable будет 2 то должен воспроизвестись уже case 2.У меня не выходит немедленно завершить работу цикла...По нажатию кнопки ничего не происходит и таймер всеравно считает вместо того чтоб стать на паузу...Помогите...
Это с какой целью в loop ?
И еще, чтобы программу можно было без вопросов понять, пины лучше определить через #define, чтобы имена были читабельные и ошибок меньше будет. Например, так:
А по существу, в функции start есть куча delay(...), потому прервать в таком виде не получится. Если переписать, например, на конечные автоматы, тогда вполне возможно. Читайте признанного в этом деле автора, цикл статей Татарчевского http://www.kit-e.ru/articles/circuit/2006_11_164.php
делайте обработку нажатия кнопки прерываниями.
http://arduino.ru/Tutorial/Arduino_Interrupts
делайте обработку нажатия кнопки прерываниями.
http://arduino.ru/Tutorial/Arduino_Interrupts
Интересно, как это поможет ТС вот в этом "Мне необходимо чтоб по второму нажатию кнопки функция start немедленно прекратила свою работу"?
ребят,а если использовать goto?типа если равно тому то то немедленно перебросить к case 2?
А посреди delay(6000); тоже goto поставить? Это не прервешь.