Jump to content

HolycatIIAF

Members
  • Posts

    18
  • Joined

  • Last visited

Everything posted by HolycatIIAF

  1. hi my frindes. I come back again.loool how to add a another code for running a stepper motor in this code............ i try to build two or three main flight instrument. #define DCSBIOS_IRQ_SERIAL #include <AccelStepper.h> #include "DcsBios.h" #include <LiquidCrystal.h> #include <Servo.h> #include <math.h> float b,d,f; float c; int e,a; LiquidCrystal lcd(2,3,4,5,6,7); void onAlt10000ftCntChange(unsigned int newValue) { a=((newValue+353.53)/6603.6); lcd.setCursor(0, 1); lcd.print(a); a=a*10000; lcd.setCursor(0,1); lcd.print(a); } DcsBios::IntegerBuffer alt10000ftCntBuffer(0x1080, 0xffff, 0, onAlt10000ftCntChange); void onAlt1000ftCntChange(unsigned int newValue) { b=((newValue+353.53)/6603.6); if(9>b>8){ b=floor(b); } lcd.setCursor(6,1); lcd.print(b); b=b*1000; //lcd.setCursor(6,1); //lcd.print(b); lcd.setCursor(0,0); lcd.print("ALT"); } DcsBios::IntegerBuffer alt1000ftCntBuffer(0x1082, 0xffff, 0, onAlt1000ftCntChange); void onAlt100ftCntChange(unsigned int newValue) { //lcd.setCursor(0, 1); c=((newValue+353.53)/6603.6); lcd.setCursor(11,1); lcd.print©; c=c*100; e=a+b+c; lcd.setCursor(3,0); e=floor(e); lcd.print(e); } DcsBios::IntegerBuffer alt100ftCntBuffer(0x1084, 0xffff, 0, onAlt100ftCntChange); void onAlt100ftChange(unsigned int newValue) { lcd.setCursor(12, 1); d=((newValue+353.53)/6603.6); //lcd.print(d); } DcsBios::IntegerBuffer alt100ftBuffer(0x107e, 0xffff, 0, onAlt100ftChange); struct StepperConfig { unsigned int maxSteps; unsigned int acceleration; unsigned int maxSpeed; }; class Vid60Stepper : public DcsBios::Int16Buffer { private: AccelStepper& stepper; StepperConfig& stepperConfig; inline bool zeroDetected() { return digitalRead(irDetectorPin) == 1; } unsigned int (*map_function)(unsigned int); unsigned char initState; long currentStepperPosition; long lastAccelStepperPosition; unsigned char irDetectorPin; long zeroOffset; bool movingForward; bool lastZeroDetectState; long normalizeStepperPosition(long pos) { if (pos < 0) return pos + stepperConfig.maxSteps; if (pos >= stepperConfig.maxSteps) return pos - stepperConfig.maxSteps; return pos; } void updateCurrentStepperPosition() { // adjust currentStepperPosition to include the distance our stepper motor // was moved since we last updated it long movementSinceLastUpdate = stepper.currentPosition() - lastAccelStepperPosition; currentStepperPosition = normalizeStepperPosition(currentStepperPosition + movementSinceLastUpdate); lastAccelStepperPosition = stepper.currentPosition(); } public: Vid60Stepper(unsigned int address, AccelStepper& stepper, StepperConfig& stepperConfig, unsigned char irDetectorPin, long zeroOffset, unsigned int (*map_function)(unsigned int)): Int16Buffer(address), stepper(stepper), stepperConfig(stepperConfig), irDetectorPin(irDetectorPin), zeroOffset(zeroOffset), map_function(map_function), initState(0), currentStepperPosition(0), lastAccelStepperPosition(0) { } virtual void loop() { if (initState == 0) { // not initialized yet pinMode(irDetectorPin, INPUT); stepper.setMaxSpeed(stepperConfig.maxSpeed); stepper.setSpeed(1000); initState = 1; } if (initState == 1) { // move off zero if already there so we always get movement on reset // (to verify that the stepper is working) if (zeroDetected()) { stepper.runSpeed(); } else { initState = 2; } } if (initState == 2) { // zeroing if (!zeroDetected()) { stepper.runSpeed(); } else { stepper.setAcceleration(stepperConfig.acceleration); stepper.runToNewPosition(stepper.currentPosition() + zeroOffset); // tell the AccelStepper library that we are at position zero stepper.setCurrentPosition(0); lastAccelStepperPosition = 0; // set stepper acceleration in steps per second per second // (default is zero) stepper.setAcceleration(stepperConfig.acceleration); lastZeroDetectState = true; initState = 3; } } if (initState == 3) { // running normally // recalibrate when passing through zero position bool currentZeroDetectState = zeroDetected(); if (!lastZeroDetectState && currentZeroDetectState && movingForward) { // we have moved from left to right into the 'zero detect window' // and are now at position 0 lastAccelStepperPosition = stepper.currentPosition(); currentStepperPosition = normalizeStepperPosition(zeroOffset); } else if (lastZeroDetectState && !currentZeroDetectState && !movingForward) { // we have moved from right to left out of the 'zero detect window' // and are now at position (maxSteps-1) lastAccelStepperPosition = stepper.currentPosition(); currentStepperPosition = normalizeStepperPosition(stepperConfig.maxSteps + zeroOffset); } lastZeroDetectState = currentZeroDetectState; if (hasUpdatedData()) { // convert data from DCS to a target position expressed as a number of steps long targetPosition = (long)map_function(getData()); updateCurrentStepperPosition(); long delta = targetPosition - currentStepperPosition; // if we would move more than 180 degree counterclockwise, move clockwise instead if (delta < -((long)(stepperConfig.maxSteps/2))) delta += stepperConfig.maxSteps; // if we would move more than 180 degree clockwise, move counterclockwise instead if (delta > (stepperConfig.maxSteps/2)) delta -= (long)stepperConfig.maxSteps; movingForward = (delta >= 0); // tell AccelStepper to move relative to the current position stepper.move(delta); } stepper.run(); } } }; /* modify below this line */ /* define stepper parameters multiple Vid60Stepper instances can share the same StepperConfig object */ struct StepperConfig stepperConfig = { 1585, // maxSteps 2000, // maxSpeed 1750 // acceleration }; // define AccelStepper instance AccelStepper stepper(AccelStepper::DRIVER, 8, 9); // define Vid60Stepper class that uses the AccelStepper instance defined in the line above // v-- arbitrary name Vid60Stepper alt100ftPointer(0x107e, // address of stepper data stepper, // name of AccelStepper instance stepperConfig, // StepperConfig struct instance 11, // IR Detector Pin (must be HIGH in zero position) 0, // zero offset [](unsigned int newValue) -> unsigned int { /* this function needs to map newValue to the correct number of steps */ return map(newValue, 0, 65535, 0, stepperConfig.maxSteps-1); }); void setup() { DcsBios::setup(); pinMode(13, OUTPUT); } void loop() { PORTB |= (1<<5); PORTB &= ~(1<<5); DcsBios::loop(); } thx to all
  2. thx my friend. I try with VID60. :thumbup::thumbup::thumbup:
  3. which one model? this stepper motor has been very series.....
  4. hi,before connected, I removed hard interlock pin and this stepper free rotate 360 degree. and about smileys .... befor copy this code from Arduino IDE, this Emoticons not existed.and my compiler ,compile this code without any error. thx
  5. Thx Mr/Mrs albateo, I do not have access to different stepper motorsو what do I do?
  6. hello Guys. I can connected a stepper motor to DCS via a A3967 chip and arduino UNO, however, this is very funny but I have a proplem, when incressing altitude and needle reached to 12 o'clock , the stepper rotate cunter clockwise and intercept actual altitude in other side, this proplem occur in any rotation, which in desent or assent. I apologise for my bad english. MOV 001 this code whih used for altitude ((((A-10))))) #define DCSBIOS_IRQ_SERIAL #include <math.h> #include <LiquidCrystal.h> #include <Servo.h> //This library needs to go before DcsBios.h for the servos to work #include <DcsBios.h> #include <AccelStepper.h> float b,d,f; float c; int e,a; LiquidCrystal lcd(2,3,4,5,6,7); void onAlt10000ftCntChange(unsigned int newValue) { a=((newValue+353.53)/6603.6); lcd.setCursor(0, 1); lcd.print(a); a=a*10000; lcd.setCursor(0,1); lcd.print(a); } DcsBios::IntegerBuffer alt10000ftCntBuffer(0x1080, 0xffff, 0, onAlt10000ftCntChange); void onAlt1000ftCntChange(unsigned int newValue) { b=((newValue+353.53)/6603.6); if(9>b>8){ b=floor(b); } lcd.setCursor(6,1); lcd.print(b); b=b*1000; //lcd.setCursor(6,1); //lcd.print(b); lcd.setCursor(0,0); lcd.print("ALT"); } DcsBios::IntegerBuffer alt1000ftCntBuffer(0x1082, 0xffff, 0, onAlt1000ftCntChange); void onAlt100ftCntChange(unsigned int newValue) { //lcd.setCursor(0, 1); c=((newValue+353.53)/6603.6); lcd.setCursor(11,1); lcd.print©; c=c*100; e=a+b+c; lcd.setCursor(3,0); e=floor(e); lcd.print(e); } DcsBios::IntegerBuffer alt100ftCntBuffer(0x1084, 0xffff, 0, onAlt100ftCntChange); void onAlt100ftChange(unsigned int newValue) { lcd.setCursor(12, 1); d=((newValue+353.53)/6603.6); //lcd.print(d); } DcsBios::IntegerBuffer alt100ftBuffer(0x107e, 0xffff, 0, onAlt100ftChange); DcsBios::ProtocolParser parser; struct StepperConfig { unsigned int maxSteps; unsigned int acceleration; unsigned int maxSpeed; }; class Vid29Stepper : public DcsBios::Int16Buffer { private: AccelStepper& stepper; StepperConfig& stepperConfig; unsigned int (*map_function)(unsigned int); unsigned char initState; public: Vid29Stepper(unsigned int address, AccelStepper& stepper, StepperConfig& stepperConfig, unsigned int (*map_function)(unsigned int)) : Int16Buffer(address), stepper(stepper), stepperConfig(stepperConfig), map_function(map_function), initState(0) { } virtual void loop() { if (initState == 0) { // not initialized yet stepper.setMaxSpeed(stepperConfig.maxSpeed); stepper.setAcceleration(stepperConfig.acceleration); stepper.moveTo(-((long)stepperConfig.maxSteps)); initState = 1; } if (initState == 1) { // zeroing stepper.run(); if (stepper.currentPosition() <= -((long)stepperConfig.maxSteps)) { stepper.setCurrentPosition(0); initState = 2; stepper.moveTo(stepperConfig.maxSteps/2); } } if (initState == 2) { // running normally if (hasUpdatedData()) { unsigned int newPosition = map_function(getData()); newPosition = constrain(newPosition, 0, stepperConfig.maxSteps); stepper.moveTo(newPosition); } stepper.run(); } } }; struct StepperConfig stepperConfig = { 1600, // maxSteps 1000, // maxSpeed 1000 // acceleration }; // define AccelStepper instance AccelStepper stepper(AccelStepper::DRIVER, 8, 9); // define Vid29Stepper class that uses the AccelStepper instance defined in the line above // +-- arbitrary name // | +-- Address of stepper data (from control reference) // | | +-- name of AccelStepper instance // v v v v-- StepperConfig struct instance Vid29Stepper RFAN(0x107e, stepper, stepperConfig, [](unsigned int newValue) -> unsigned int { /* this function needs to map newValue to the correct number of steps */ return map(newValue, 0, 65535, 0, stepperConfig.maxSteps); }); void setup() { DcsBios::setup(); pinMode (12,INPUT); // LOW when in zero position, HIGH otherwise // set up stepper motor for zeroing //stepper.setMaxSpeed(1000); //stepper.setSpeed(500); // run clockwise until we detect the zero position //while (digitalRead (12)==1) { //stepper.runSpeed(); //} } void loop() { DcsBios::loop(); } no body help me........
  7. hi,how to download dcs-bios-arduino-library to v0.2.0, plz send me a addres for download.
  8. hi my frinde. thise proplem has been exicted.
  9. hello my frindes,plz hellp me.I'm trying to compile a simple sketch using the stepper motor for altimeter pointer with arduino library 0.2.1 on DCS-BIOS..... I copied the example and the failure of compilation that gives me to see if you can help me: this error after compile>>>>>>>>>>>>>>>> Stepper_revolation:11: error: 'DcsBios' does not name a type DcsBios::ProtocolParser parser; ^ C:\Users\dear ali\Documents\Arduino\my sketch\Stepper_revolation\Stepper_revolation.ino: In function 'void loop()': Stepper_revolation:51: error: 'parser' was not declared in this scope parser.processChar(Serial.read()); ^ Stepper_revolation:53: error: 'DcsBios' has not been declared DcsBios::PollingInput::pollInputs(); ^ exit status 1 'DcsBios' does not name a type this code is:>>>>>>>>>>>> // include AccelStepper library #include <AccelStepper.h> // include DcsBios library #include <DcsBios.h> #include <Servo.h> // DcsBios-related declarations DcsBios::ProtocolParser parser; #define STEPS_PER_REVOLUTION 240 #define ZERO_OFFSET 0 AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 int currentStepperPosition = 0; // current stepper position (in steps, from 0 to STEPS_PER_REVOLUTION-1) signed long lastAccelStepperPosition; void setup() { Serial.begin(250000); pinMode (12,INPUT); // LOW when in zero position, HIGH otherwise // set up stepper motor for zeroing stepper.setMaxSpeed(1000); stepper.setSpeed(500); // run clockwise until we detect the zero position while (digitalRead (12)==1) { stepper.runSpeed(); } // add zero offset stepper.runToNewPosition(stepper.currentPosition() + ZERO_OFFSET); // tell the AccelStepper library that we are at position zero stepper.setCurrentPosition(0); lastAccelStepperPosition = 0; // set stepper acceleration in steps per second per second // (default is zero) stepper.setAcceleration(1000); } void loop() { // handle DcsBios communication while (Serial.available()) { parser.processChar(Serial.read()); } DcsBios::PollingInput::pollInputs(); // move stepper motor stepper.run(); } void onDcsBiosWrite(unsigned int address, unsigned int value) { if (address == 0x107e) { digitalWrite (13,1); unsigned int alt100ftValue = (value & 0xffff) >> 0; // convert data from DCS to a target position expressed as a number of steps int targetPosition = map(alt100ftValue, 0, 65535, 0, STEPS_PER_REVOLUTION-1); // adjust currentStepperPosition to include the distance our stepper motor // was moved since we last updated it int movementSinceLastUpdate = stepper.currentPosition() - lastAccelStepperPosition; currentStepperPosition += movementSinceLastUpdate; lastAccelStepperPosition = stepper.currentPosition(); if (currentStepperPosition < 0) currentStepperPosition += STEPS_PER_REVOLUTION; if (currentStepperPosition > STEPS_PER_REVOLUTION) currentStepperPosition -= STEPS_PER_REVOLUTION; int delta = targetPosition - currentStepperPosition; // if we would move more than 180 degree counterclockwise, move clockwise instead if (delta < -(STEPS_PER_REVOLUTION/2)) delta += STEPS_PER_REVOLUTION; // if we would move more than 180 degree clockwise, move counterclockwise instead if (delta > (STEPS_PER_REVOLUTION/2)) delta -= STEPS_PER_REVOLUTION; // tell AccelStepper to move relative to the current position stepper.move(delta); } }
  10. If possible, any one, send me a sample example for altimeter or airspeed....
  11. Hello my friend. Exactly, Is there a way for my problem ?
  12. i want to show airspeed information send to LiquidCrystal lcd.(2*16) hello my Friends. I want to get dcs-bios, altitude ,speed information,and .... ,as a number, not as a servo output. if i can get a number ,i can put that number into a liquidcrystal lcd display with arduino board. plz help me....:helpsmilie::helpsmilie::helpsmilie: thx a lot:thumbup:. I apologize for my bad english.:cry:
  13. dcs bios hi my frinds.plz help me. i cannt conect dcs bios with DCS world and frequently recived this maasage. 0 [main] socat 11564 find_fast_cwd: WARNING: Couldn't compute FAST_CWD pointer. Please report this problem to the public mailing list cygwin@cygwin.com
  14. Hi my friends, plz help me, how to add a new aircraft module such as f5 e3. And how to connect dcs-bios with arduino uno board, i conducted with instructions, step by step, but I haven't any output, (master caution light),
×
×
  • Create New...