Hilfe Bei Kopterprojekt

Hallo,

Ich habe mich an einen Kopter zu schaffen gemacht den man selber drucken kann.

Es handelt sich um eine I1 Clone von DJI. Ich bin auch fast fertig und es fehlt nur noch eins für mein Glück.

Der Arduino der mir die Arme hoch und runter bewegt. Den kann man zwar im Netz bestellen was ich auch getan habe nur leider lassen sich die Engländer zu keinem Ton bewegen wann das Ding nun endlich nach zwei Wochen bei mir an kommt.

Also ich brauche da mal eure Hilfe ich werde hier mal einiges online stellen um auf Hilfe zu hoffen…

Ich komme auch nicht mit leeren Händen daher, nur leider kann ich den Code nicht auf mein Board brennen warum ist mir nach 2 Tagen fummeln ein Rätsel daher muss ich hier um Hilfe bitten.

Bild 1 ist das was er können soll

Das Video zeigt was er können soll

Und hier ist der Code dazu

#include <Servo.h>
#include <PinChangeInt.h>




// Define RX variables 
#define PIN1 2
#define PIN1dataReg PIND
#define pin1state (PIN1dataReg & (1 << PIN1))
volatile long pulseStart1; // pulse start time measured from millies in ISR for pin 1
volatile long pulseTime1; // pulse width time measured from millies in ISR for pin 1 <-- this is the output we require


Servo myservo;  // create servo object to control a servo 
int pos = 0;    // variable to store the servo position 


// Define Microswitch pins
const int msdown = 5;
const int msup = 4;
int msdownstate = 0; 
int msupstate = 0;


// Define Variables for LEDs
int led1 = 6;                    // output pin for LED 1
int led2 = 7;                    // output pin for LED 2
int led3 = 8;                    // output pin for LED 3
int led4 = 9;                    // output pin for LED 4
int led13 = 13;                   // onboard LED indictor incase no others are attached
unsigned long time;              // holds current time for change of state
int flashtime = 400;            // time to flash LEDs in milliseconds
boolean ledon = false;         // remembers start of LED
boolean movedown = true;      // safety feature 
boolean moveup = true;        // safety feature


// The below procedure handles the pulse from the RX input
void handlePin1()  
{  
if(pin1state)  
  pulseStart1=micros(); // we got a positive edge  
else  
  pulseTime1=micros()-pulseStart1; // Negative edge: get pulsewidth  
}  


// LED Control - very basic, can be expanded.
void turnledoff() {
  digitalWrite(led1, LOW);      
  digitalWrite(led2, LOW);      
  digitalWrite(led3, LOW);     
  digitalWrite(led4, LOW);
  digitalWrite(led13, LOW);    
}
void turnledon() {
  digitalWrite(led1, HIGH);      
  digitalWrite(led2, HIGH);      
  digitalWrite(led3, HIGH);     
  digitalWrite(led4, HIGH);      
  digitalWrite(led13, HIGH);  
}
void flashled() {
    // LED Flash 
if (millis() - time > flashtime){
    time = millis();
    
    if (ledon){
      turnledoff();
      ledon = false;
    } else {
      turnledon();
      ledon = true;
    }
    
}


}


// Lets set everything up
void setup() {
// initialize serial communication at 115200 bits per second so we can see whats going on:
Serial.begin(115200);

pinMode(PIN1, INPUT);          // Initialize rx input pin
digitalWrite(PIN1, HIGH);      // Set the rx pin to High to start the counter
PCintPort::attachInterrupt(PIN1, &handlePin1, CHANGE); // Attach the interrupt

pinMode(led1, OUTPUT);         // Assign output mode to pin for LED 1
pinMode(led2, OUTPUT);         // Assign output mode to pin for LED 2
pinMode(led3, OUTPUT);         // Assign output mode to pin for LED 3
pinMode(led4, OUTPUT);         // Assign output mode to pin for LED 4
pinMode(led13, OUTPUT);         // Assign output mode to pin for LED 4


pinMode(msup, INPUT);
pinMode(msdown, INPUT);
msupstate = digitalRead(msup);
msdownstate = digitalRead(msdown);
time = millis();               // Save current millis reading (this is a counter that always runs in milliseconds) 
turnledon();
}


// Main Program
void loop() {

msupstate = digitalRead(msup);
msdownstate = digitalRead(msdown);
// read the input channels


 if (pulseTime1 > 900 && pulseTime1 < 1300){ //legs down
 myservo.attach(3);
  pos = 0;
  moveup = true;
  if (msupstate == LOW){
    if (movedown){myservo.write(pos);}
  flashtime = 200;
  flashled();
  } else {
    movedown = false;
    myservo.detach();
    turnledon();
  }
 }
  if (pulseTime1 > 1299 && pulseTime1 < 1701){ //no movement
  myservo.detach();
  
  pos = 100;
 }
 
if (pulseTime1 > 1700) { //legs up
myservo.attach(3);
  pos = 180;
  movedown = true;
  if (msdownstate == LOW){
     if (moveup) {myservo.write(pos);} 
  flashtime = 200;
  flashled();
  } else {
    moveup = false;
    turnledon();
    myservo.detach();
  }
}  
 
}

Dazu gehört noch eine Liberty die ich nicht zum laufen bekomme

https://code.google.com/p/arduino-pinchangeint/downloads/list

Ich füge sie hinzu und bekomme immer wieder Fehler beim kompeliern!

Ich wäre euch echt dankbar wenn einer mir und meinen Projekt weiter helfen könnte.

Hier scheint es zu Funktionieren

http://diyrc.co.uk/3d-printed-inspire-clone/inspire-clone-electronics/

Wenn mir jemand einen Funktiereden Nano/Mini verkaufen will also mit Software drauf bin ich sofort dabei bitte Pm

Bitte Code Tags verwenden! Der Linke Knopf </>

Wozu brauchst du PinChange Interrupts? Selbst der UNO hat zwei vollwertige externe Interrupts!

https://www.arduino.cc/en/Reference/AttachInterrupt

Die Bezugsquellen der Arduino sind:
https://www.arduino.cc/en/Main/Buy

In Deutschland zB Watterott der auch einen eigenen Nachbau hat.

Zum Programmieren brauchst Du einen USB-Adapter der auch dort zu finden ist.

Grüße Uwe

Ja das weiß ich… ich habe ein Arduino Uno hier aber wenn ich den Code aufladen will kommen ohne ende Fehler …

Der Code ist nicht von mir der stammt vom letzt Link auf meinem ersten Beitrag…

http://diyrc.co.uk/3d-printed-inspire-clone/inspire-clone-electronics/

#include <Servo.h>
#include <PinChangeInt.h>




// Define RX variables 
#define PIN1 2
#define PIN1dataReg PIND
#define pin1state (PIN1dataReg & (1 << PIN1))
volatile long pulseStart1; // pulse start time measured from millies in ISR for pin 1
volatile long pulseTime1; // pulse width time measured from millies in ISR for pin 1 <-- this is the output we require


Servo myservo;  // create servo object to control a servo 
int pos = 0;    // variable to store the servo position 


// Define Microswitch pins
const int msdown = 5;
const int msup = 4;
int msdownstate = 0; 
int msupstate = 0;


// Define Variables for LEDs
int led1 = 6;                    // output pin for LED 1
int led2 = 7;                    // output pin for LED 2
int led3 = 8;                    // output pin for LED 3
int led4 = 9;                    // output pin for LED 4
int led13 = 13;                   // onboard LED indictor incase no others are attached
unsigned long time;              // holds current time for change of state
int flashtime = 400;            // time to flash LEDs in milliseconds
boolean ledon = false;         // remembers start of LED
boolean movedown = true;      // safety feature 
boolean moveup = true;        // safety feature


// The below procedure handles the pulse from the RX input
void handlePin1()  
{  
if(pin1state)  
  pulseStart1=micros(); // we got a positive edge  
else  
  pulseTime1=micros()-pulseStart1; // Negative edge: get pulsewidth  
}  


// LED Control - very basic, can be expanded.
void turnledoff() {
  digitalWrite(led1, LOW);      
  digitalWrite(led2, LOW);      
  digitalWrite(led3, LOW);     
  digitalWrite(led4, LOW);
  digitalWrite(led13, LOW);    
}
void turnledon() {
  digitalWrite(led1, HIGH);      
  digitalWrite(led2, HIGH);      
  digitalWrite(led3, HIGH);     
  digitalWrite(led4, HIGH);      
  digitalWrite(led13, HIGH);  
}
void flashled() {
    // LED Flash 
if (millis() - time > flashtime){
    time = millis();
    
    if (ledon){
      turnledoff();
      ledon = false;
    } else {
      turnledon();
      ledon = true;
    }
    
}


}


// Lets set everything up
void setup() {
// initialize serial communication at 115200 bits per second so we can see whats going on:
Serial.begin(115200);

pinMode(PIN1, INPUT);          // Initialize rx input pin
digitalWrite(PIN1, HIGH);      // Set the rx pin to High to start the counter
PCintPort::attachInterrupt(PIN1, &handlePin1, CHANGE); // Attach the interrupt

pinMode(led1, OUTPUT);         // Assign output mode to pin for LED 1
pinMode(led2, OUTPUT);         // Assign output mode to pin for LED 2
pinMode(led3, OUTPUT);         // Assign output mode to pin for LED 3
pinMode(led4, OUTPUT);         // Assign output mode to pin for LED 4
pinMode(led13, OUTPUT);         // Assign output mode to pin for LED 4


pinMode(msup, INPUT);
pinMode(msdown, INPUT);
msupstate = digitalRead(msup);
msdownstate = digitalRead(msdown);
time = millis();               // Save current millis reading (this is a counter that always runs in milliseconds) 
turnledon();
}


// Main Program
void loop() {

msupstate = digitalRead(msup);
msdownstate = digitalRead(msdown);
// read the input channels


 if (pulseTime1 > 900 && pulseTime1 < 1300){ //legs down
 myservo.attach(3);
  pos = 0;
  moveup = true;
  if (msupstate == LOW){
    if (movedown){myservo.write(pos);}
  flashtime = 200;
  flashled();
  } else {
    movedown = false;
    myservo.detach();
    turnledon();
  }
 }
  if (pulseTime1 > 1299 && pulseTime1 < 1701){ //no movement
  myservo.detach();
  
  pos = 100;
 }
 
if (pulseTime1 > 1700) { //legs up
myservo.attach(3);
  pos = 180;
  movedown = true;
  if (msdownstate == LOW){
     if (moveup) {myservo.write(pos);} 
  flashtime = 200;
  flashled();
  } else {
    moveup = false;
    turnledon();
    myservo.detach();
  }
}  
 
}

Ich habe leider keine Ahnung davon daher kann mir jemand den Code so umbauen das der Funktuniert

Das wäre total super !!!

Was heißt hier ohne Ende Fehler? Du wirst dir die PinChangeInt.h schon besorgen müssen.

Ich würde wie gesagt die Lib rauswerfen und die normale externen Interrupts verwenden

Am Code ändert sich da nicht viel.

Kann das jemand für mich machen ?

"Ich würde wie gesagt die Lib rauswerfen und die normale externen Interrupts verwenden

Am Code ändert sich da nicht viel."

Wie schon gesagt ich habe keine Ahnung wie das geht!!!!

Ich wäre euch extrem Dankbar .........

cmd-rewen:
Kann das jemand für mich machen ?

"Ich würde wie gesagt die Lib rauswerfen und die normale externen Interrupts verwenden

Am Code ändert sich da nicht viel."

Wie schon gesagt ich habe keine Ahnung wie das geht!!!!

Ich wäre euch extrem Dankbar .........

Wenn man sich an solche Projekte heratraut, sollte man sich auch mit den Basics vertraut machen und nicht darauf hoffen, das alles mal eben von anderen erledigt wird. Helfen wollen wir dir gern, aber du must deinen Teil dazu beitragen.

Oder versuche mal die PinChangeInt Lib richtig zu installieren. Eine aktuelle Version gibt es hier:

Entpacke das in deinen Arduino\libraries Ordner und entferne das “-master” aus dem Namen des Ordners (ganz wichtig!!). Der Ordner muss “PinChangeInt” heißen. Dann ist wenigstens die Library richtig installiert.

Aber wenn du nicht mal das verstehst, wieso wagst du dich dann an ein solches Projekt?

Ach das weiß ich schon ....

nur es ist halt so das man eine fertigen Arduino kaufen kann ......

Was ich auch getan habe alles andere habe ich in einem halben Jahr Kleinarbeit fertig bekommen und mir selber bei gebracht und mich darauf verlassen das ich ein fertiges Board bekomme. Sonst hätte ich das Projekt nicht begonnen nun ist es leider so das ich wie es ausschaut keins bekommen werde und habe etwas angst das damit alles den Bach runter geht. Mir nun aber auch noch das Programmieren bei zu bringen wäre sicher schön das überschreitet aber leider meine Zeit ..... Daher meinen Bitte. Ich habe keinerlei Grundkenntnisse und würde sicher nicht fragen wenn es ein andere Alternative für mich gibt. klar kann ich mich rein arbeiten aber das wird sicher gut und gerne 1 Jahr + dauern bevor ich überhaupt verstehe was da in dem Code steht.

Wie auch immer wenn dennoch jemand die Zeit hat und es schnell geht wo bei auch hier ich nicht sagen kann was schnell ist dann möge er mir helfen......

Wenn das nicht schnell zu erledigen ist dann eben nicht. Aber das mir unterstellt wird ich würde andere für mich arbeite lassen finde ich schon etwas naja wie soll ich sagen ätzend.

Ich helfe auch immer wieder gerne im Forum meines Vertrauens weiter. Und habe auch unzählige Stunden damit verbraucht mich mit Problem andere auseinander zu setzen. Aber so was würde ich nie schreiben.......

Aber gut zurück zum Thema

Das ist wie Kochen genau nach Rezept. Er baut den Copter genau nach Anleitung. Er wird mehr Ahnung von der Technik haben.

Diese Steuerung ist nur dafür da, die Ausleger mit den Motoren zu bewegen.

Wenn es an die Flugsteuerung geht, sehen wir ihn bestimmt wieder. :wink:

Wie gesagt, Fehler können kommen wenn du Library nicht richtig installiert hast.

Probier mal die manuelle Installation wie in #8 beschrieben

Nein sicher nicht!

Ich habe verstanden das einige hier sich zu schade sind um mir oder auch anderen zu helfen aber dann haltet bitte die klappe.

Oder gehört es zum guten Ton sich über Leute lustig zu machen?

cmd-rewen:
Nein sicher nicht!

Ich habe verstanden das einige hier sich zu schade sind um mir oder auch anderen zu helfen aber dann haltet bitte die klappe.

Oder gehört es zum guten Ton sich über Leute lustig zu machen?

So wirst du sicher keine Hilfe erwarten können.

Bei alle Respekt warum muss ich mich dafür rechtfertigen das ich etwas nicht kann ich bin bereit mich mit dem Thema auseinander zu setzten....

Das ist wie Kochen genau nach Rezept. Er baut den Copter genau nach Anleitung. Er wird mehr Ahnung von der Technik haben.

Diese Steuerung ist nur dafür da, die Ausleger mit den Motoren zu bewegen.

Wenn es an die Flugsteuerung geht, sehen wir ihn bestimmt wieder. :wink:

Aber ich kann nicht nachvollziehen was solche Kommentare sollen ?!?

Das ist nicht nett und das wird man wohl sagen dürfen oder ?????

Mein Post war weder gegen dich als Person noch in irgendeiner Negativ gemeint, sondern sollte als Erklärung für die anderen sein, warum. Weil dein Projekt eines ist, indem der Arduino nur als Mittel zum Zweck ist und dich das verständlicher weise auch nicht weiter interessiert. Das ist ja auch in Ordnung. Und Hilfe bekommst du ja auch soweit das machbar ist.

Aber die Reaktion hier ist eben, wenn sich jemand seine Projektarbeit in der Ausbildung oder Studium machen lassen will, recht unterkühlt.

Dies ist ja aber bei dir nicht der Fall. Ich hab mir das Projekt mal kurz angesehen, alle Achtung, wenn du das bis zum flugfähigen Inspire Nachbau durchziehst.

P.S.: Die Posts haben sich überschnitten, hättest dich nicht so aufregen müssen.

OK OK ....

Ich bin ganz ruhig und Ok das kann ich gerne Glauben.....

Ich bin auch im Moment etwas neben der Spur weil sich die Firma in England nicht mal meldet die das ganze angeboten hat... Und mein Geld habe sie Kassiert.... 29 Euro immerhin.........

Und neben Motoren Reglern und dem FC sicher ein halbes Jahr + 750 Euro auf dem spiel stehen..

Und nun will ich schon gern mal fliegen sehen........

Also entschuldigt meine dünn Häufigkeit......

cmd-rewen:
Nein sicher nicht!

Ich habe verstanden das einige hier sich zu schade sind um mir oder auch anderen zu helfen....

Das trifft sicher auf keinen hier in diesem Thread zu. Nur Hilfe kann man nur erwarten, wenn man auch seinen Part dazu tut und sich in die Materie einarbeitet. Anders versteht man die gegebenen Hilfe nicht.

Hallo Hallo also

Nach einem PC Wechsel und der Datei von Serenifly

Was soll ich sagen es läuft !!!!

zumindest ist es nun auch dem Arduino Uno am laufen .... Ich danke allen aus ganzem Herzen

Danke Danke Danke :o :o :o :o :o :o :o