Brushless ESC als RC (Licht)schalter

Schöner Ansatz Olli!


so etwa?

Code:
 switch (STICKPOS) {
    case STICK_CENTER_LOW:
      //hier steht, was in diesem Fall (case) geschehen soll
      break;
    case STICK_CENTER:
      //und hier, was in diesem Fall geschehen soll
      break;
    case STICK_CENTER_HIGH
      // und hier, was nun passieren soll
  }
Manfred
Problem ist das das Case nur GENAU bei dem Wert was tut, den zu treffen wird aber schwierig....
Man könnte den eingelesenen Wert von 1000-2000ms vorher mittel in=map(in, 1000, 2000, 1, 3); in 3 Bereiche mappen, dann ginge es mit dem Switch.
 

Zuse

Erfahrener Benutzer
Stimmt,
hatte ich bei meinem Schnellschuss nicht bedacht :)

Edit:
ich bin mir nicht sicher, ob das Skalieren mit map, also 1000-1500-2000 umsetzen auf 1-2-3 so einfach funktioniert.
Wo beginnt und endet dann der mittlere Wert "1500"?
 
Zuletzt bearbeitet:

OlliW

Erfahrener Benutzer
oder grob herunterdividieren...

1000...2000 - 936 = 64 ... 1064
64...1064 >> 7 = 0,1,2,3,4,5,6,7
switch case0....

Nachteil aller dieser Ansätze: was passiert wenn dummerweise, aus welchen Gründen auch immer, gerade die Greneze getroffen wird? => Hysterese nötig => reichhaltige if Abfragen sind am Ende der Tages immer irgendwo
 
Es geht hier immernoch nur ums Lichtschalten, nicht Flugsteuerung oder Mondlandung ;_)
Is doch latte wenn man genau zwischen den Punkten ist, dann blinkts mal so mal so und man stellt es eben am sender etwas anders ein.
denke beim Map auf 1 2 3 wird ca 1000-1333 = 1 1334-1777=2 und alles drüber 3.

Oder du kapselst das if then else konstrukt eben in ner Methode die hinten fixe positionen rausgibt., dann stört es dich in der main-loop im code nicht mehr.
 

pete1990

Erfahrener Benutzer
Ok, den Simonk Bootloader kannte ich bislang noch nicht, da ich auch bisher nur mit der BL-Heli firmware für SiLabs Regler hantiert hatte. Aber das Flashen kann ja im Endeffekt jeder so machen wies ihm am liebsten ist.
Das mit dem Mapping ist auch noch eine gute Idee, machts sicherlich etwas übersichtlicher.

@ApoC:

Ich hab morgen ne längere Zugfahrt vor mir, da werd ich mal so ne Art Tutorial dazu schreiben, dass es jeder hinbekommen müsste.

grüße,
Pete
 

pete1990

Erfahrener Benutzer
Hallo,

also hier kommt jetzt die erste halbwegs einfach zu konfigurierende Version des ESC_Lightduinos. Zusätzlich habe ich noch ein kleines Tutorial geschrieben.
Ich hoffe es ist halbwegs verständlich geworden.

Grüße,
Pete
 

Anhänge

eigentlich gehören dann aber die #defines für Stick und Blinkerei auch noch in die config.h

und mit delay ist halt unschön, weil dann im mainloop doof gewartet wird, und z.B. keine direkte Reaktion auf das RC-Signal erfolgt.

vielleicht frickelt da mal Jemand ne saubere Lösung mit ein paar countern rein ala:
Code:
int OUT1State = LOW;              // ledState used to set the LED
long OUT1_previousMillis = 0;     // will store last time LED was updated
int OUT1_interval = 500;          // interval at which to blink (milliseconds)
 
//SCHNIPP   
  else {                              //RC-Channel is in High Position
    unsigned long currentMillis = millis();
    if(currentMillis - OUT1_previousMillis > OUT1_interval) {
      // save the last time you blinked the LED 
      OUT1_previousMillis = currentMillis;   

      // if the LED is off turn it on and vice-versa:
      if (OUT1State == LOW) 
        OUT1State = HIGH;
      else 
        OUT1State = LOW;
      // set the LED with the ledState of the variable:
      digitalWrite(OUT1, OUT1State);
    }
  }
//SCHNAPP
vielleicht noch mit ein paar mehr Puls-Pause- defines in der config.h
oder gleich mit der MsTimer2- Library. http://www.**********/playground/Main/MsTimer2

und als nächstes dann die Muster im EEProm
auf gehts!
:D
 

pete1990

Erfahrener Benutzer
ja, das das noch kein schöner Code ist weiß ich auch. Ich habe ja auch einfach nur Frickler's Ansatz übertragen und es geht nach wie vor nur ums Lichtschalten. Mein nächstes Ziel ist jetzt erstmal die LiPo-Überwachung, einfach weil ich das gerne nutzen möchte und dann werde ich versuchen meinen Code irgendwie kompatibel zum Pattern Editor vom Meister zu machen. Das dann durchaus unter Nutzung eines Timers und dem EEPROM. Auch ist pulseIn nicht der sauberste Code, da auch hier kein Timer genutzt wird...mal sehen. Es wird definitiv noch weitergehen und danke für deine Unterstützung bisher.

grüße,
Pete
 

skyfreak

a freak on a leash
sers pete

ich finde es auch prima, dass es schon mal eine nachvollziehbare version für bunte lamperl gibt, insbesondere für DAUs wie mich ;) und wenn ich es mit deinem file hinbekommen hebe, dann sollte das relativ idiot-proof sein ;)

viel beitragen ausser Ideen und wünsche kann ich nicht, aber dafür weiterhin testen wenn du jemanden brauchst.
skype haste ja und meine labornetzteil tut ja noch ;)

grüsse und immer wieder danke,
der skyfreak
 

skyfreak

a freak on a leash
hat schon mal jemand erfolgreich einen ESC geflachst, der im google doc nicht als simonk bs.hex oder bs_nfet.hex gekennzeichnet ist, sondern mit tgy.hex?
 

skyfreak

a freak on a leash
hallo community

ich versuche grade die Geschichte mit dem bootloader zu testen.
leider habe ich weder ein afro noch einen usb linker von HK.

lazyzero hat mich auf den ArduinoUSBLinker gestossen.
https://github.com/c---/ArduinoUSBLinker

mein altes nanowii hat einen gyro der einen kleinen hau hat, aber PD2/INT0 wird herausgeführt, ergo sollte ich damit das Esc light flashen über das servokabel testen können.

nun aber mein problem.

gehe ich den weg über das kkflashtool, dann wird auch ein arduino leonardo gefunden, aber immer an com5 und die systemsteuerung sagt com11, ergo Fehler beim flashen des nanowii im kkflashtool, no access to com5.

Rechner neusterten und arduino nicht anhängen. kkflashtool starten, arduino dranklemmen, wird erkannt, wieder an com 5, jetzt sagt aber die systemsteuerung es wäre com11.

wenn ich die ArduinoUSBLinker.ino aufrufe und nichts mache ausser mal kompilieren, dann bekomme ich schon Fehler :(

Code:
ArduinoUSBLinker.cpp: In function 'void AUL_loop(uint8_t)':ArduinoUSBLinker:644: error: invalid conversion from 'const char*' to 'uint8_t'
ArduinoUSBLinker:644: error: initializing argument 1 of 'virtual size_t Serial_::write(uint8_t)'
ArduinoUSBLinker:667: error: invalid conversion from 'const char*' to 'uint8_t'
ArduinoUSBLinker:667: error: initializing argument 1 of 'virtual size_t Serial_::write(uint8_t)'
ArduinoUSBLinker:735: error: no matching function for call to 'Serial_::write(uint8_t*, int)'
/Users/guido/Dropbox/1_Kopter/02_MultiWii/arduino-1.0.1/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/USBAPI.h:41: note: candidates are: virtual size_t Serial_::write(uint8_t)
ArduinoUSBLinker.cpp: At global scope:
ArduinoUSBLinker.cpp:91: warning: 'void AUL_SerialInit(uint8_t)' declared 'static' but never defined
ArduinoUSBLinker.cpp:92: warning: 'void AUL_SerialWriteBuf(const uint8_t*, int16_t)' declared 'static' but never defined
ArduinoUSBLinker.cpp:93: warning: 'void AUL_SerialWriteStr(const char*)' declared 'static' but never defined
und nun? :(

gibt es einen aktuelleren ArduinoUSBLinker Sketch?

oder wie komm eich um das comport problem im kkflashtool, damit ich endlich diesen Sketch auf das nanowii spielen kann?

grüsse und danke,
skyfreak
 

skyfreak

a freak on a leash
yep, genau nach deinem blog ...

erst mal alles ausgemacht und windows runtergefahren und neu gestartet (btw ich bin mac user :()

und dann eben wie von dir beschrieben:

  • Make sure the Arduino is not plugged to the computer.
  • Start the kkflashtool, on Windows you have to select if you have a 32 or 64 bit OS.
  • go to the “Tools–>Upload ArduinoUSBLinker” menu.
  • Select the Arduino you like to use.
  • A dialog opens and asks you to plug your Arduino into your computer.
  • Wait 2-3 seconds until the Arduino is recognized by your computer.
  • Press okay.
  • A second dialog will tell you that a new device is discovered on port x.
  • Press okay.
und bei port X sagt es immer port 5 dann drücke ich ok was anderes geht ja nicht und es kommt der Fehler.
schaue ich dann im systemmanager steht da com10 (oder nach dem kompletten reboot eben com11).

und es ist wie gesagt eine nanowii FC mit 32u4 und dem PD2/INT0 auf ein pad rausgeführt, dass habe ich schon durchgeklingelt mit dem nadelbrett.

grüsse,
der skyfreak
 
Zuletzt bearbeitet:

skyfreak

a freak on a leash
haha wusste gar nicht dass es auch auf dem mac läuft :D

alles was kopter ist und RC läuft zu 95% nicht auf mac. daher rennt hier win pro 7 auf dem macbook in bootcamp.

aber dann werde ich das schnell mal auf dem mac testen :D

gruss,
der skyfreak
 
@Christian
er hat ne Nanowii, also 32U4 - das lief bei mir auch noch nie.
btw - Du hast ja nun mittlerweile auch einen ProMicro, kannst das ja gleich testen :D

Gruß
Lutz
 

VikiN

Flying Wing Freak
@skyfreak
Com port kann man doch manuell im gerätemanager ( win xp/win 7) einstellen/ändern.
Hab ich heut an 2 PCs für je 2 geräte/programme ( UART Bridge für cell log und kkflashtool ) gemacht,
Da die automatisch e erkennung nicht funktionierte

Nach der treiberinstallation für den apm usb telemetrieadapter vom eterno wars ja auch so, falls Du dich daran noch erinnerst


Ich würd die treiber mal runterhaun
Windows neu starten
Treiber neu installieren
Gerät anstecken, schaun an welchem port es sich anmeldet
Ausstecken
Kkflashtool starten und dann wie immer...
 
FPV1

Banggood

Oben Unten