私のアイデア:電源を切るときにラジコンの最高速度と記憶を調べるには、速度を上げるときにヘッドライトをオンにする、回転するときにターンシグナルをオンにする、ブレーキをかけるときにブレーキライトをオンにする、駐車時にサイドライトをオンにする、マシンのボタンを押すときにライトを点滅させる(最大速度リセットボタン) 。
1. Arduino Nano
2. LCD 1602およびI2C
3. GPS-GY-NEO-6MV2(GPS受信機)
十分なライブラリがない場合は、LiquidCrystal_I2C.h、EEPROM.h、Wire.h、SoftwareSerial.h、TinyGPS.hをダウンロードしてコンピューターにインストールする必要があります。
スケッチ#include <EEPROM.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //I2C: SDA pin A4 / SCL pin A5 /VCC pin +3,3V /GND pin GND
#include <SoftwareSerial.h>
#include <TinyGPS.h>
TinyGPS gps;
SoftwareSerial ss(4, 3); // GPS: RX pin D4, TX pin D3, VCC pin +5V ,GND pin GND
static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
float flat, flon; //
unsigned long fix_age, time, date, speed, course; //
int value;
int value2;
int pin = 7; // D7
int pins = 8; // D8
int pin1 = 11;// : D11
int pin2 = 12;// : D12
int pin3 = 10;// : D10
int pin4 = 9;// : D9
int pin6 = 6;// : D6
unsigned long duration1;// 1372 , 1834 ,973
unsigned long duration2;// 1834 , 973
int pin7 = 2;// : pin D2
int pin8 = 13;// pin D13
const int buttonPin = 5; // () , pin D5
int buttonState = 0; //
void setup()
{
pinMode(pin, INPUT);
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pins, INPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
pinMode(pin8, OUTPUT);
pinMode(buttonPin, INPUT); // , ,
Serial.begin(115200); //
ss.begin(9600); //gps
Serial.println("RRRR777");
lcd.init(); //
lcd.clear();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("RRRR777 2015");
lcd.setCursor(0, 1);
lcd.print(" GPS RCavto");
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500); //
digitalWrite(pin8, HIGH); //
digitalWrite(pin7, LOW); //
delay(500); //
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500); //
digitalWrite(pin8, HIGH); //
digitalWrite(pin7, LOW); //
delay(500); //
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500); //
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500); //
digitalWrite(pin8, HIGH); //
digitalWrite(pin7, LOW); //
delay(500); //
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500); //
digitalWrite(pin8, HIGH); //
digitalWrite(pin7, LOW); //
delay(500); //
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500);
digitalWrite(pin7, LOW); //
digitalWrite(pin8, LOW); //
delay(500); //
lcd.clear();
delay(500);
}
void loop()
{
duration1 = pulseIn(pin, HIGH);
duration2 = pulseIn(pins, HIGH);
if ((duration1 > 1500) && (duration1 < 2000))
{digitalWrite(pin1, HIGH); // LEFT
delay(250); //
digitalWrite(pin1, LOW); //
}
if ((duration1 < 1300) && (duration1 > 800))
{digitalWrite(pin2, HIGH); // RIGHT
delay(250); //
digitalWrite(pin2, LOW); //
}
if ((duration2 > 1480) && (duration2 < 2000))//
{ analogWrite(pin4, 20); //
analogWrite(pin3, 255); //
delay(500); //
}
if ((duration2 < 1480) && (duration2 > 800)) //
{analogWrite(pin4, 255); //
analogWrite(pin3, 20); // +*
digitalWrite(pin6, LOW); //
delay(50);
}
if ((duration2 < 1400) && (duration2 > 800))//
{//digitalWrite(pin4, LOW); //
digitalWrite(pin6, HIGH); //
delay(500); //
}
float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
float h = gps.f_speed_kmph(); // speed in km/hr
int h1 = (h-(int)h)*100;
Serial.println(h);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Mersedes GT3"); //
lcd.setCursor(0, 1);
lcd.print("S=");
lcd.print(h);
lcd.setCursor(8, 1);
lcd.print("MS=");
value = EEPROM.read(0); //
value2 = EEPROM.read(1);
lcd.print(value);
lcd.print(".");
lcd.print(value2);
buttonState = digitalRead(buttonPin);//
if (buttonState == HIGH)// LOW) ///
{
EEPROM.write (0,0);
EEPROM.write (1,0);
lcd.setCursor(8, 1);
lcd.print("MS=RESET");
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500); //
digitalWrite(pin8, HIGH); //
digitalWrite(pin7, LOW); //
delay(500); //
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500); //
digitalWrite(pin8, HIGH); //
digitalWrite(pin7, LOW); //
delay(500);
lcd.setCursor(0, 1);
lcd.print("Rusticktigr777@mail.ru");
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500); //
digitalWrite(pin8, HIGH); //
digitalWrite(pin7, LOW); //
delay(500); //
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500); //
digitalWrite(pin8, HIGH); //
digitalWrite(pin7, LOW); //
delay(500); //
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500);
digitalWrite(pin8, HIGH); //
digitalWrite(pin7, LOW); //
delay(500); //
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500); //
digitalWrite(pin8, HIGH); //
digitalWrite(pin7, LOW); //
delay(500); //
digitalWrite(pin7, HIGH); //
digitalWrite(pin8, LOW); //
delay(500);
digitalWrite(pin7, LOW); //
digitalWrite(pin8, LOW); //
}
if (h > value)//RECORD
{
EEPROM.write (0,h);
EEPROM.write (1,h1);
}
smartdelay(500);
}
static void smartdelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (ss.available())
gps.encode(ss.read());
} while (millis() - start < ms);
}
static void print_float(float val, float invalid, int len, int prec)
{
if (val == invalid)
{
while (len-- > 1)
Serial.print('*');
Serial.print(' ');
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1); // . and -
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
Serial.print(' ');
}
smartdelay(0);
}
static void print_int(unsigned long val, unsigned long invalid, int len)
{
char sz[32];
if (val == invalid)
strcpy(sz, "*******");
else
sprintf(sz, "%ld", val);
sz[len] = 0;
for (int i=strlen(sz); i<len; ++i)
sz[i] = ' ';
if (len > 0)
sz[len-1] = ' ';
Serial.print(sz);
smartdelay(0);
}
static void print_date(TinyGPS &gps)
{
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long age;
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
if (age == TinyGPS::GPS_INVALID_AGE)
Serial.print("********** ******** ");
else
{
char sz[32];
sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
month, day, year, hour, minute, second);
Serial.print(sz);
}
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
smartdelay(0);
}
設定:コーナリングまたは移動時に正しく動作しない場合は、コンピューターのプログラムを介して値を独自に変更します:データが処理されておらず、GPSの緑色のLEDが点灯している場合、行のif((durationX> XXXX)&&(durationX <XXXXX)) / RX RXピンD4、TXピンD3を交換する必要がある場合があります
PSアイデアは、プログラミングを知っているシンプルなものであることが判明しました。また、エンジンの温度とエンジンに関する通知をこのマシンに追加し、時間、タコメーター、ビデオカメラをMercedes-Benz GT3に追加できます。