Предлагаю сделать радио на Arduino UNO https://duino.ru/arduino-uno-ch340g.html
Пока вот подрисовал схему
Если еще кто нибудь печатку нарисует, то дело быстрей пойдет
![Нажмите на изображение для увеличения.
Название: fm3.png
Просмотров: 11747
Размер: 6.7 Кб
ID: 7729](http://compcar.ru/forum/attachment.php?s=57fe9476d81cda7c1548859bf88c4772&attachmentid=7729&d=1518621187&thumb=1)
Софт, плагин и исходник для CF прикреплены ниже
Скетч для Arduino v.7
Автор Hamster
PHP код:
// Порты для LM
#define CE (12) //LM7001 PIN3
#define CL (11) //LM7001 PIN4
#define DA (10) //LM7001 PIN5
// Задержка на тактах, в микросекундах
#define LM_DELAY (2)
void setup()
{
Serial.begin(9600);
pinMode(CE, OUTPUT);
pinMode(CL, OUTPUT);
pinMode(DA, OUTPUT);
// Да будет радио сразу!
//SetRF(1017);
}
void loop()
{
int inRF;
byte p[2];
int t;
ReadSteering();
// Длина команды 8 байт, формат:
// rfXXXXX<cr>
t = Serial.available();
if (t >= 8)
{
p[0] = Serial.read();
p[1] = Serial.read();
if ( p[0]==114 and p[1]==102 )
{
inRF = 1;
for (int x=3; x>=0; x--)
{
inRF += (int(Serial.read())-48) * pow(10, x);
}
Serial.flush();
if (inRF >= 875 and inRF <= 1080) {SetRF(inRF); SendOK();}
else {SendERR();}
}
else {SendERR();}
}
else
{
if (t > 0) {Serial.flush(); SendOK();}
}
delay(100);
}
// Читает рулевые кнопки и пишет в порт код нажатой кнопки
void ReadSteering()
{
byte bytes[2];
unsigned int res_dt1 = analogRead(0); // прочитать данные АЦП
delay(50);
unsigned int res_dt2 = analogRead(0); //проверка дребезга
if (abs(res_dt1-res_dt2)<=20 and res_dt1<1000 ) //если нет дребезга и что-то есть
{
bytes[0] = 255;
bytes[1] = res_dt1 & 255; // преобразовать в 2-байта
bytes[2] = (res_dt1 & 768) >> 8;
Serial.write( bytes,3); // отправить прочитаное значение компьютеру
}
/*Serial.print(res_dt1,DEC);
Serial.print(" ");
Serial.println(res_dt2,DEC);*/
}
void SetRF(int RF)
{
RF += 107;
// Выставляем CE, говорим что пишем в LM
digitalWrite(CE, HIGH);
writeToLM(byte(RF));
writeToLM(byte(RF >> 8));
writeToLM(135);
// Снимаем CE, все отправили
digitalWrite(CE, LOW);
}
void writeToLM(byte ByteToSend)
{
int D;
int D1;
delayMicroseconds(LM_DELAY);
for (int x=0; x<=7; x++)
{
// Выставляем DA
D = ByteToSend >> 1;
D1 = D << 1;
if (ByteToSend==D1) // Значит был 0
{
digitalWrite(DA,LOW);
}
else
{
digitalWrite(DA,HIGH);
}
// Формируем строб CL
digitalWrite(CL, HIGH);
delayMicroseconds(LM_DELAY);
digitalWrite(CL,LOW);
delayMicroseconds(LM_DELAY);
ByteToSend = ByteToSend >> 1;
}
delayMicroseconds(LM_DELAY);
}
void SendOK()
{
Serial.println("OK");
}
void SendERR()
{
Serial.println("ER");
}