HC05AC-CTRL/gradual_input.ino

68 lines
1.8 KiB
C++

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
#include <SoftwareSerial.h>
SoftwareSerial btSerial(10, 11);
String btData;
int taste;
void setup() {
lcd.init(); // Display starten
lcd.backlight(); // Hintergrundlicht am Display
btSerial.begin(9600);
Serial.begin(115200);
pinMode(3, OUTPUT); // PWM_A-Signal als Ausgang
pinMode(2, OUTPUT); // AIN_1 digitaler Ausgang
pinMode(4, OUTPUT); // AIN_2 digitaler Ausgang
pinMode(5, OUTPUT); // BIN_1 digitaler Ausgang
pinMode(7, OUTPUT); // BIN_2 digitaler Ausgang
pinMode(6, OUTPUT); // PWM_B-Signal als Ausgang
lcd.setCursor(0, 0);
lcd.print("Taste druecken");
delay(3000);
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Hallo");
if (btSerial.available()) {
byte c = byte(btSerial.read()); // Cast last char to byte
while (btSerial.available() > 0) c = byte(btSerial.read()); // This could (should) be done above, but idk
char left = char(c & 0xF0); // interpret first four bits as signed char
char right = char((c & 0x0F) << 4); // interpret last four bits as signed char
writeMotor(left, right);
}
delay(50);
}
void writeMotor(char left, char right) {
if (right == 0) {
digitalWrite(2, LOW);
digitalWrite(4, LOW);
} else if (right > 0) {
digitalWrite(2, LOW);
digitalWrite(4, HIGH);
digitalWrite(3, byte(right) << 1);
} else {
digitalWrite(2, HIGH);
digitalWrite(4, LOW);
digitalWrite(3, byte(-(right + 1)) << 1);
}
if (left == 0) {
digitalWrite(5, LOW);
digitalWrite(7, LOW);
} else if (left > 0) {
digitalWrite(5, LOW);
digitalWrite(7, HIGH);
digitalWrite(6, byte(left) << 1);
} else {
digitalWrite(5, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, byte(-(left + 1)) << 1);
}
}