2017-01-23 5 views
0

В настоящее время я работаю с малиной Pi для упражнений.Arduino-uno project

Я работаю со следующими на макете:

  • 5 светодиодов
  • 2 Переключатели

Мой следующий код должен работать следующим образом:

С первой кнопкой вы можете выбрать следующий светодиод, а с помощью второй кнопки вы можете включить/выключить выбранный светодиод. Когда вы в последний светодиод дает истинный или ложный (включен или выключен) со следующим выходом:

Circuits Я не вижу, что случилось с моим кодом:

//const variables 
const int leds[] = {3, 5, 6, 9, 11}; 
const int buttons[] = {12, 13}; 

//variables that will change 
int buttonState[] = {false, false}; 
int lastButtonState[] = {false, false}; 
int values[] = {false, false, false, false}; 

void setup() { 
    //init LEDs 
    for(int i = 0; i < sizeof(leds); i++){ 
     pinMode(leds[i], OUTPUT); 
    } 

    //init buttons 
    for(int i = 0; i < sizeof(buttons); i++){ 
     pinMode(buttons[i], INPUT); 
    } 
} 

void loop() { 
    //fade when game starts 
    fade(); 

    //start game 
    start(); 

    //output of game 
    output(); 
} 

void output(){ 
    bool t1 = !values[0]; 
    bool t2 = t1 && values[1]; 
    bool t3 = values[2] || values[3]; 
    bool Q = !(t2 || t3); 
    if(!Q){ 
     digitalWrite(leds[4], true); 
    }else{ 
     digitalWrite(leds[4], false); 
    } 
} 

void start(){ 
    //total of leds 
    int j = 0; 
    //check if user is not at 5th led 
    while(j < 4){ 
     //loop through buttons 
     for(int i = 0; i < 2; i++){ 
      // Read button 
      buttonState[i] = digitalRead(buttons[i]); 
      // check button state 
      if (buttonState[i] != lastButtonState[i]) { 
       // if the state has changed 
       if (buttonState[i] == HIGH) { 
        //check if button 1 
        if(i == 0){ 
         //select next LED 
         j++; 
        } 
        //else button 2 
        else{ 
         // if the current state of the 2nd button is HIGH 
         while(i == 1){ 
          //if current value of led is false, put it true 
          if(values[j] == false){ 
           //put led on 
           digitalWrite(leds[j], true); 
           values[j] = true; 
           delay(50); 
          }else{ 
           //put led off 
           digitalWrite(leds[j], false); 
           delay(50); 
           values[j] = false; 
          } 
          //go back to button 1? 
          i = 0; 
         } 
        } 
        //go back to button 1? 
        i = 0; 
       } 
      } 
      // save the current state as the last state, 
      // for next time through the loop 
      lastButtonState[i] = buttonState[i]; 

      // wait a little 
      delay(50); 
     } 
    } 
} 

void fade(){ 
    //put every led on half-on 
    for(int i = 0; i < sizeof(leds); i++){ 
     analogWrite(leds[i], 100); 
    } 
} 
+2

Несомненно, это не строится без предупреждений? Почему бы вам не упомянуть о каких-либо проблемах? 'PinMode (leds, OUTPUT);' statement должен быть неправильным, это должно быть 'pinMode (leds [i], OUTPUT);', это была точка цикла в конце концов (и то же самое со входом). – unwind

+0

Когда я проверил его, он работал без ошибок, но я обновил его сейчас. Так что это не проблема. Так что в настоящее время вторая кнопка, которая должна включать/выключать светодиоды, отключает светодиоды и не горит. – DiceOfDoom

+0

До тех пор, пока ваш вопрос касается исключительно программного обеспечения, он по теме. Но только для справки, вопросы, которые могут быть связаны либо с программным обеспечением, либо с оборудованием, следует задавать по адресу http://electronics.stackexchange.com/ (там, где они будут нуждаться в некоторых схемах в дополнение к коду). По вопросам о Ардунио, пожалуйста, обращайтесь по адресу http://arduino.stackexchange.com/. Существует также http://raspberrypi.stackexchange.com/. – Lundin

ответ

1

В C и C++, если вы хотите сравнить два значения, чтобы проверить, равны ли они, вы должны использовать == (оператор сравнения) вместо = (оператор присваивания). Вы accidentily использовать неправильный оператор здесь:

while(i = 1){ 

И здесь:

if(values[j] = false){ 

Изменение тех ==.

+0

Спасибо за упоминание, что я обновил его, но, к сожалению, это не решает мою проблему – DiceOfDoom

 Смежные вопросы

  • Нет связанных вопросов^_^