Android telefon ile DC Motor Hız Kontrolü
Flutter-Dart kodları ile yaptığımız bu uygulama bir DC Motor hız kontrol uygulamasıdır. Slider widget'ını kullanarak 0 ile 250 arasında analog değerler üretiyoruz ve bu değeri sendData
fonksiyonu ile bluetooth adaptörüne gönderiyoruz.
Mikrodenetleyici tarafında rec_data=mySerial.readString();
Satırı okuyoruz. Bu değeri integer tipine çevirip AnalogWrite
komutu ile DC motora gönderiyoruz.
Flutter-Dart Kodları aşağıda:
import 'dart:async'; //import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bluetooth_serial/flutter_bluetooth_serial.dart'; void main() => runApp(const MyApp()); class MyApp extends StatefulWidget { const MyApp({super.key}); @override // ignore: library_private_types_in_public_api _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { List<BluetoothDevice> _devices = []; late BluetoothConnection connection; String adr="00:21:07:00:50:69"; // my bluetooth device MAC Adres double sval = 10; String mots="0"; late int motint=0; @override void initState() { super.initState(); _loadDevices(); } Future<void> _loadDevices() async { List<BluetoothDevice> devices = await FlutterBluetoothSerial.instance.getBondedDevices(); setState(() { _devices = devices; }); } //---------------------------- Future<void> sendData(String data) async { data = data.trim(); try { List<int> list = data.codeUnits; Uint8List bytes = Uint8List.fromList(list); connection.output.add(bytes); await connection.output.allSent; if (kDebugMode) { // print('Data sent successfully'); } } catch (e) { //print(e.toString()); } } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text("DC MOTOR CONTROL with bluetooth"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text("MAC Adress: 00:21:07:00:50:69"), ElevatedButton(child:Text("Connect"),onPressed: () { connect(adr); },), SizedBox(height: 30.0,), Slider( min: 5, //add min and max max: 250, value: sval, onChanged: (double value) { //by default value will be range from 0-1 setState(() { sval = value; }); motint=sval.toInt(); // double to int mots=motint.toString(); // int to string sendData(mots); // send to bluetooth module }, ), Text("Motor Level 1---> " + mots,style: const TextStyle(fontSize: 50,color: Colors.green),), const SizedBox(height: 30.0,), ], ), ), ) ); } Future connect(String address) async { try { connection = await BluetoothConnection.toAddress(address); sendData('111'); //durum="Connected to the device"; connection.input!.listen((Uint8List data) { //Data entry point // durum=ascii.decode(data); }); } catch (exception) { // durum="Cannot connect, exception occured"; } } // --------------**************data gonder //Future send(Uint8List data) async { //connection.output.add(data); //await connection.output.allSent; } //------------*********** data gonder end
Arduino Kodları:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
String rec_data="5";
int motor_level=10;
void setup() {
pinMode(3, OUTPUT); // for Analog output
Serial.begin(9600);
mySerial.begin(9600); // BlueTooth Data baud,set the data rate for the SoftwareSerial port
}
void loop() { // run over and over
if (mySerial.available()) {
rec_data=mySerial.readString();
motor_level=rec_data.toInt();
analogWrite(3, motor_level);
delay(1000);
Serial.println(motor_level);
}
}