Hallo @ all,
Ich habe folgendes Vorhaben:
Mit einer Funkfernsteuerung (Hype ST6DF) möchte ich eine Kamera ein und aus schalten. Der Empfänger der Steuerung gibt aber nur ein PWM Signal aus.
Der einfachheit halber habe ich mir das PWM in beiden Endlagen des Steuerknüppels und in Nullstellung angeschaut.
--------____usw. HIGH = 2ms Hebel oben
------usw. HIGH = 1,5ms Hebel mitte
_____--_--______usw. HIGH = 1ms Hebel unten
Da die HIGH momente sehr Kurz sind habe ich mich entschlossen die LOW momente an zu schauen 18ms, 18,5ms, 19ms
Jetzt habe ich mit dem Mega angefangen und getestet.
Ging alles Problemlos. Per Serial.print Kamen saubere Werte über die Leitung und die Kamera lies sich auch bedienen.
Also habe ich das Programm soweit an den Attiny85 angepasst und es per ArduinoISP rüber geschaufelt.
Jetzt ging garnix mehr. also hab ich dem Tiny ne softserial verpasst und mir die Werte angeschaut. Leider schwanken die jetzt so dermaßen das der komplette Bereich bei jeder Hebelstellung abgedekt wird.
Ich habe jetzt zum Probieren vieles am Code geändert. Aber ich denke das Prinziep ist zu erkennen.
Bitte sagt mir das hier ein Fehler drin ist und nicht das der tiny zu lahm ist dafür
Ach ja der Tiny läuft 8Mhz Intern
wäre toll wenn einer ne Idee hat und die kund tut.
Danke und Gruß derRobert
#include <SoftwareSerial.h>
#define rxPin 1
#define txPin 2
unsigned long timestamp1 = 0;
unsigned long timestamp2 = 0;
int timestamp3 = 0;
boolean LOWmerker=false;
int wert = 0;
SoftwareSerial serial(rxPin, txPin);
unsigned long test= timestamp3;
void setup(){
pinMode(0,INPUT);
pinMode(3,OUTPUT);
digitalWrite (3, LOW);
serial.begin(4800);
serial.println("ATtiny85 Software serial");
}
void loop(){
if(timestamp3 != test){
serial.print ("TS3=");serial.println(timestamp3);
test= timestamp3;}
wert = digitalRead(4);
if(wert==LOW && LOWmerker==false){
timestamp1=micros();
LOWmerker=true;
}
if(wert==HIGH && LOWmerker==true){
timestamp2=micros();
LOWmerker=false;
}
timestamp3= timestamp2 - timestamp1;
switch (timestamp3){
case 190:
rc1();
break;
case 180:
rc2();
break;
default:
digitalWrite(3,LOW);
}
}
void rc1()
{
digitalWrite(3, HIGH);
delay(10);
digitalWrite(3, LOW);
timestamp2=0;
timestamp3=0;
}
void rc2()
{
digitalWrite(3, LOW);
delay(100);
digitalWrite(3, LOW);
timestamp2=0;
timestamp3=0;
}