/*
#include <Servo.h>
Servo servo;
byte servoPin = 4;
byte buttonpin[] = { 2, 3, 5, 6, 7 }; // declare button pins in an array
byte element; // indicates pressed button/pin
byte buttonArray = sizeof(buttonpin) / sizeof(buttonpin[0]); // get number of elements in button array
unsigned long timer; // timer keeps track of length of button press (or noise/ringing).
unsigned long timeout = 100; // timeout (in milliseconds) is the minimum for "a button is pressed".
byte redPin = 11, grnPin = 9, bluPin = 8; // pins for the common cathode RGBLED
void setup() {
Serial.begin(115200); // start serial monitor
for (int i = 0; i < buttonArray; i++) // count to number of elements in button array
pinMode(buttonpin[i], INPUT_PULLUP); // configure button pins for reading (LOW when pressed)
pinMode(redPin, OUTPUT);
pinMode(grnPin, OUTPUT);
pinMode(bluPin, OUTPUT);
servo.attach(servoPin);
}
void loop() {
if (element > buttonArray) // count through array... do not use for() loops. they blocking program flow.
element = 0; // if beyond the array size, start again from the first element
if (!digitalRead(buttonpin[element])) { // button may have been pressed, or just noise/ringing
if (millis() - timer > timeout) { // measure time from last "press" to this "press. replaces delay();
if (digitalRead(buttonpin[element])) { // valid button was released after debounce timeout
timer = millis(); // reset timer after valid button press
switch (element) {
case 0: red(); break;
case 1: grn(); break;
case 2: blk(); break;
case 3: blu(); break;
case 4: yel(); break;
default: break;
}
}
}
}
element++; // next array element
}
void blk() {
digitalWrite(redPin, LOW);
digitalWrite(grnPin, LOW);
digitalWrite(bluPin, LOW);
servo.write(90); // left slow
}
void blu() {
digitalWrite(redPin, LOW);
digitalWrite(grnPin, LOW);
digitalWrite(bluPin, HIGH);
servo.write(45); // left slow
}
void yel() {
digitalWrite(redPin, HIGH);
digitalWrite(grnPin, HIGH);
digitalWrite(bluPin, LOW);
servo.write(0); // left fast
}
void grn() {
digitalWrite(redPin, LOW);
digitalWrite(grnPin, HIGH);
digitalWrite(bluPin, LOW);
servo.write(135); // right slow
}
void red() {
digitalWrite(redPin, HIGH);
digitalWrite(grnPin, LOW);
digitalWrite(bluPin, LOW);
servo.write(180); // right fast
}
//diagram.json for wokwi
*/
// https://forum.arduino.cc/t/servo-with-joystick-x-and-y-question/1322442
// https://wokwi.com/projects/414736427464105985
# include <Servo.h>
# define bRedFast 2
# define bGreenSlow 3
# define bBlueSlow 6
# define bYellowFast 7
# define bStop 5 // unused here?
# define xServoPin 4
# define yServoPin 12
byte redPin = 11, grnPin = 9, bluPin = 8; // pins for the common cathode RGBLED
const byte ServoPin = 4;
Servo sx360;
void setup()
{
sx360.attach(xServoPin);
pinMode(bRedFast, INPUT_PULLUP);
pinMode(bGreenSlow, INPUT_PULLUP);
pinMode(bStop, INPUT_PULLUP);
pinMode(bBlueSlow, INPUT_PULLUP);
pinMode(bYellowFast, INPUT_PULLUP);
pinMode(redPin, OUTPUT);
pinMode(grnPin, OUTPUT);
pinMode(bluPin, OUTPUT);
}
void loop()
{
int speed;
bool any = false;
speed = 90; // unless we say otherwise, stopped
if (digitalRead(bRedFast) == LOW) {
speed = 180;
any = true;
red();
}
if (digitalRead(bGreenSlow) == LOW) {
speed = 135;
any = true;
grn();
}
if (digitalRead(bBlueSlow) == LOW) {
speed = 45;
any = true;
blu();
}
if (digitalRead(bYellowFast) == LOW) {
speed = 0;
any = true;
yel();
}
if (!any) blk();
sx360.write(speed);
}
void blk() {
digitalWrite(redPin, LOW);
digitalWrite(grnPin, LOW);
digitalWrite(bluPin, LOW);
}
void blu() {
digitalWrite(redPin, LOW);
digitalWrite(grnPin, LOW);
digitalWrite(bluPin, HIGH);
}
void yel() {
digitalWrite(redPin, HIGH);
digitalWrite(grnPin, HIGH);
digitalWrite(bluPin, LOW);
}
void grn() {
digitalWrite(redPin, LOW);
digitalWrite(grnPin, HIGH);
digitalWrite(bluPin, LOW);
}
void red() {
digitalWrite(redPin, HIGH);
digitalWrite(grnPin, LOW);
digitalWrite(bluPin, LOW);
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
btn6:1.l
btn6:2.l
btn6:1.r
btn6:2.r
rgb1:R
rgb1:COM
rgb1:G
rgb1:B
L slow (45)
L fast (0)
R slow (135)
R fast (180)
servo1:GND
servo1:V+
servo1:PWM
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
Unused
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r