Как использовать корпус переключателя с двумя кнопками, как объединить buttonState1 и buttonState2
import muvium.compatibility.arduino.*;
public class Class0 extends Arduino{
/*
Author: First Name MI. Last Name
Date: June 25, 2021
Title: Arduino Experiment 2
Description: Writing to the Output Pins using the FOR statement
Create a program that will display four different LED sequences having
different transition states repeated at different number of times and
that the whole program will repeat itself continuously
Apply the concept of using funcions for each of the four LED sequences,
each of which are to be called upon from the main program.
This time simplify the LED sequence functions using FOR control statements
to achieve the required iterations
Pin modes of each LED pins are to be iterated together using a FOR statement
The circuit:
* LEDs connected from digital pin 4-11, all with respect to ground.
*/
// ---------------------------------------------------------
// Declaration of Global Variables:
int led1 = 4; // LED1 connected to digital pin 4
int led2 = 4; // LED2 connected to digital pin 4
int led3 = 4; // LED3 connected to digital pin 4
int led4 = 4; // LED4 connected to digital pin 4
int switchPin1 = 2; // PushButton connected to digital pin 2
int switchPin2 = 3; // PushButton connected to digital pin 3
int buttonState1 = 0; // variable for reading pushbutton status
int buttonState2 = 0; // variable for reading pushbutton status
// ---------------------------------------------------------
public void setup() {
// the setup() method runs once, when the sketch starts
// initialize the digital pins as outputs;
for (led1 = 4; led1 < 12; led1++) {
pinMode(led1, OUTPUT); // Configure pin 4 to 11 as outputs
}
pinMode(switchPin1, INPUT);// Configure pin 2 as input
pinMode(switchPin2, INPUT);// Configure pin 3 as input
}
// ---------------------------------------------------------
public void loop() {
// the loop() method runs over and over again,
// as long as the Arduino has power
// read the state of pushbutton value
buttonState1 = digitalRead(switchPin1);
buttonState2 = digitalRead(switchPin2);
switch (buttonState1) {
case (0):
for (led1 = 7, led2 = 8; (led1 > 3) && (led2 < 12); led1--, led2++) {
digitalWrite(led1, HIGH); // set the LED on
digitalWrite(led2, HIGH); // set the LED on
delay(500); // wait for 500 milliseconds
digitalWrite(led1, LOW); // set the LED off
digitalWrite(led2, LOW); // set the LED off
}
break;
case 1:
for (led1 = 11, led2 = 9, led3 = 7, led4 = 5; (led1 > 9) && (led2 > 7) && (led3 > 5) && (led4 > 3); led1--, led2--, led3--, led4--) {
digitalWrite(led1, HIGH); // set the LED on
digitalWrite(led2, HIGH); // set the LED on
digitalWrite(led3, HIGH); // set the LED on
digitalWrite(led4, HIGH); // set the LED on
delay(500); // wait for 500 milliseconds
digitalWrite(led1, LOW); // set the LED off
digitalWrite(led2, LOW); // set the LED off
digitalWrite(led3, LOW); // set the LED off
digitalWrite(led4, LOW); // set the LED off
}
break;
case 2:
for (led1 = 11, led2 = 10, led3 = 9, led4 = 8; (led1 > 6) && (led2 > 5) && (led3 > 4) && (led4 > 3); led1-=4, led2-=4, led3-=4, led4-=4) {
digitalWrite(led1, HIGH); // set the LED on
digitalWrite(led2, HIGH); // set the LED on
digitalWrite(led3, HIGH); // set the LED on
digitalWrite(led4, HIGH); // set the LED on
delay(500); // wait for 500 milliseconds
digitalWrite(led1, LOW); // set the LED off
digitalWrite(led2, LOW); // set the LED off
digitalWrite(led3, LOW); // set the LED off
digitalWrite(led4, LOW); // set the LED off
}
break;
default:
for (led1 = 11, led2 = 4; (led1 > 7) && (led2 < 8); led1--, led2++) {
digitalWrite(led1, HIGH); // set the LED on
digitalWrite(led2, HIGH); // set the LED on
delay(500); // wait for 500 milliseconds
digitalWrite(led1, LOW); // set the LED off
digitalWrite(led2, LOW); // set the LED off
}
}
}
}
1 ответ
Я не знаю, что это за код, но это не код Arduino. Похоже, он завернут в какой-то другой класс. Но в реальном коде Arduino...
Чтобы "объединить" ваши два состояния кнопок, полезно думать о них как о двух отдельных битах внутри байта. Байт состоит из 8 битов, и любой из них может быть включен или выключен. Если вы свяжете свои две кнопки с двумя из этих битов, вы можете представить их как одно число в байте.
Например, если вы используете:
uint8_t buttonStates = (digitalRead(switchPin2) << 1) | digitalRead(switchPin1);
вы создаете одну переменную, содержащую оба состояния. Проще говоря, это означает "Прочитайте switchPin2, сдвиньте результат на один бит влево, затем прочитайте switchPin1 и наложите два результата вместе".
Таким образом, результатом является байт, где бит 1-switchPin2, а бит 0-switchPin1.
Таким образом, это дает вам таблицу истинности:
SP1 | SP2 | Variable
----+-----+----------
0 | 0 | 0b00000000
1 | 0 | 0b00000001
0 | 1 | 0b00000010
1 | 1 | 0b00000011
Это, конечно, числа 0-3 в десятичной системе счисления.
Итак, вы можете использовать переключатель:
switch (buttonStates) {
case 0: // switchPin1 == 0, switchPin2 == 0
// do something
break;
case 1: // switchPin1 == 1, switchPin2 == 0
// do something
break;
case 2: // switchPin1 == 0, switchPin2 == 1
// do something
break;
case 3: // switchPin1 == 1, switchPin2 == 1
// do something
break;
}
uint8_t не работает для моего arduino mega в виртуальном макете :((, @Anonymous Question
Тогда не используйте виртуальный макет, что бы это ни было. Этот код будет работать на реальном Arduino. Если вы не используете настоящий Ardunio, то это ваш наблюдательный пункт., @Majenko
Затем @AnonymousQuestion использует другой тип., @Dave Newton
о, это работает, когда я удалил uint8_t спасибо, @Anonymous Question
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- устаревшее преобразование из строковой константы в 'char*'
Java на микроконтроллере? :o. Богохульство :p, @Swedgin
что вы подразумеваете под
корпусом выключателя с двумя кнопками
? ... чего вы пытаетесь достичь?, @jsotolaЯ изменил ваши теги: на этом сайте "переключатель" означает физический компонент, который вы нажимаете пальцем, а не программную конструкцию switch/case., @Majenko
Если вы спрашиваете, как вы можете переключаться на основе комбинированного состояния двух переменных, у вас есть несколько вариантов. В этом конкретном случае вы можете создать значение с битом, представляющим каждое состояние, скажем, биты 0 и 1 будут состоянием кнопок 1 и 2, а затем просто включите это агрегированное значение. Имеет ли это смысл с точки зрения приложения или нет, зависит от того, что вы пытаетесь сделать, а это не очень понятно., @Dave Newton
в setup () почему вы повторяете одно и то же действие 4 раза?, @jsotola
@jsotola ах да, спасибо, что упомянули об этом, я уже удалил ненужное, @Anonymous Question
@AnonymousQuestion нет, он все еще там ... ваш список программ не изменился, @jsotola