Необходима помощь с кодом
- Войдите на сайт для отправки комментариев
Ср, 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 поставить? Это не прервешь.