2014-12-15 2 views
0

«Я пытаюсь создать программу, в которой у меня есть 6 режимов, управляемых с помощью одной кнопки, проблема в том, что после процедуры SOS процедура продолжается вечно и не соответствует кнопке нажмите до тех пор, пока я не вернусь к последнему S SOS. Ниже приведена программа, любезно объясняющая, как я могу выйти из подпрограммы нажатием кнопки.Arduino button and led program

Во-вторых, эта программа может быть преобразована в .hexfile ? для PIC12 микроконтроллеров? С уважением, Фавад»

// Uses button presses to switch an LED between off, dim, medium, high brightness & SOS. 


// constants for this sketch 
const int buttonPin = 2;  // pushbutton pin 
const int led = 9;   // LED pin 
int dit = 500;     //MORSE CODE dit 
int dah = dit*3;    //MORSE CODE dah 
int blankTime = 100;   // GAP IN BETWEEN DIT AND DAH 

// variables for this sketch 
int ledMode = 1; // variable for recording button presses 
int ledState = 6; 
void setup() 
{ 
    // initialize the output pins: 
    pinMode(led, OUTPUT); 

    // initialize the pushbutton pin as an input: 
    pinMode(buttonPin, INPUT); 
} 

void loop() 
{ 
    // check if the pushbutton is pressed. 
    if (digitalRead(buttonPin) == HIGH) 
    {  delay(100); 
    // if it is, count a press 
    ledMode = ledMode + 1; 

    // if we've counted to an invalid mode 
    if (ledMode == 6) 
    {delay(100); 
     // reset to mode 1 
     ledMode = 1; 
    } 
    } 

    // Detect the current mode and set the LED appropriately 
    if (ledMode == 1) 
    { 
    //Mode 1 - LED is off 
    analogWrite(led, 0); 
    } 
    else if (ledMode == 2) 
    { 
    //Mode 2 - LED is dim 
    analogWrite(led, 64); 
    delay(100); 
    } 
    else if (ledMode == 3) 
    { 
    //Mode 3 - LED is medium 
    analogWrite(led, 128); 
delay(100); 
} 
    else if(ledMode==4){ 

    //Mode 4 - LED is bright 
    analogWrite(led, 255); 
    delay(100); 
} 
else if(ledMode==5) 
{ 
//Mode 5 -MORSE CODE 
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dit);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);    // wait 
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dit);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);    // wait 
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dit);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);    // wait 

    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dah);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);    // wait 
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dah);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);    // wait 
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dah);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);    // wait 

    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dit);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);    // wait 
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dit);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);    // wait 
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dit);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime); }    // wait 
    if(ledState==6){ 
return;}  
//return ;   
} 

ответ

0

Используйте digitalRead чаще.

Добавить кнопку, подтверждающую подпрограмму к середине и концу каждой буквы «SOS», чтобы очистить ledMode.

Как:

digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dit);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);   // wait 
    if (digitalRead(buttonPin) == HIGH) //READ 
    {  delay(100);     //DELAY 
    ledMode = ledMode + 0;    //CLEAR 
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dit);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);   // wait 
    if (digitalRead(buttonPin) == HIGH) //READ 
    {  delay(100);     //DELAY 
    ledMode = ledMode + 0;    //CLEAR  
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) 
    delay(dit);    // wait 
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW 
    delay(blankTime);   // wait 
    if (digitalRead(buttonPin) == HIGH) //READ 
    {  delay(100);     //DELAY 
    ledMode = ledMode + 0;    //CLEAR 
+0

Нет ваше предложение не работает ... это может быть сделано как базисов случае? – Fawad

+0

проверит его снова! –

+0

можно решить? – Fawad