attiny85 и приемник 433 МГц
Добавлено: Ср окт 31, 2018 22:03:05
Всем привет! Не получается объединить attiny85 и приемник на 433 МГц. Передатчиком выступает Ардуино UNO + передатчик. Приемником должна быть Attiny85. Суть простая: в зависимости от передаваемой команды генерировать ШИМ на двух контактах. Но ничего не работает. Точнее Attiny85 не принимает сигнал.
Вот тестовый код приемника:
как только приходит какой-то сигнал, то сразу же зажигается светодиод. На Ардуино Мега2560 этот код работает, а на attiny85 не хочет.
код передатчика (UNO):
Уже несколько часов бьюсь с этой attiny85! Не принимает сигнал и все! Может и принимает, но искаженный, проверить это никак. К тому же непонятно какие настройки выбирать в IDE для attiny85... (прошиваю через ArduinoAsISP)
Может у вас есть какие-то идеи? Очень нужна ваша помощь
Вот тестовый код приемника:
Спойлер
Код: Выделить всё
#include <Manchester.h>
#define port1 1 //Left motor pin
#define RX_PIN 4 //= pin 6
void setup()
{
man.setupReceive(RX_PIN, MAN_1200);
man.beginReceive();
pinMode(port1, OUTPUT);
digitalWrite(port1, LOW);
}
void loop()
{
if (man.receiveComplete()) {
uint16_t m = man.getMessage();
digitalWrite(port1, HIGH);
man.beginReceive(); //start listening for next message right
//after you retrieve the message
}
}код передатчика (UNO):
Спойлер
Код: Выделить всё
#include <Manchester.h>
const char *mx = "1"; //Max speed forward
const char *md = "2"; //Middle speed forward
const char *mn = "3"; //Minimum speed (off)
const char *lmd = "4"; //Left at middle speed
const char *rmd = "5"; //Right at middle speed
const char *lmx = "6"; //Left at max speed
const char *rmx = "7"; //Right at max speed
char *controller;
int v;
int s;
int x = 0;
int y = 1;
uint16_t transmit_data;
#define TX_PIN 8 //pin where your transmitter is connected
void setup()
{
Serial.begin(9600);
//man.workAround1MhzTinyCore(); //add this in order for transmitter to work with 1Mhz Attiny85/84
man.setupTransmit(TX_PIN, MAN_1200);
}
void loop()
{
v = analogRead(x); //Read x axis of joystick (throttle) (I held my joystick the opposite way so axes are inverted)
s = analogRead(y); //Read y axis of joystick (turn)
if(v >= 800) //If read max
{
Serial.println(((uint8_t *)mx, strlen(mx)));
if (s >= 500 && s <= 600) //if read middle at max
{
transmit_data=1;
Send();
}
if(s < 500) //if read left at max
{
transmit_data=6;
Send();
}
else //of not either of above, it must be right at max
{
transmit_data= 7;
Send();
}
}
else if (v <= 50) //if minimum throttle
{
transmit_data=3;
Send();
}
else //if not minimum throttle or max throttle, it must be middle
{
if (s >= 30 && s <= 1000) //middle at middle speed
{
transmit_data=2 ;
Send();
}
else if (s < 30) //left at middle speed
{
transmit_data=4 ;
Send();
}
else //if not left or middle, it must be right at middle speed
{
transmit_data=5 ;
Send();
}
}
}
void Send(){
man.transmit(transmit_data);
delay(100);
}Может у вас есть какие-то идеи? Очень нужна ваша помощь