Notifications
Clear all

Questions about changing to array from buttons  

Page 7 / 8

byron
(@byron)
Honorable Member
Joined: 2 years ago
Posts: 519
 

@gam

I had a go at refactoring your code along the lines I indicated.  It will be full of bugs and silly things as I've not got an arduio loaded with all your sensors and motors and I have not had a chance to test it.  But a quick read through should indicate if its of any interest for your project.  I wont feel in the least put out if you choose to ignore it all.   I had a fun couple of hours and it got my mind working in C++ again as I usually program in python these days. 

 

 

/*Auto Blast gate project: for dust collection in wood shop.
Arduino Nano
ACS712 current sensor
DRV8825 stepper driver
Nema 17 stepper
Each tool will be monitor by a current sensor and when that analog port exceeds a given threshold
1. Rotate the stepper to a predetermined position to align ports for that tool.
2. After the gate is align a digital pin will drive relay to turn on Vacuum system.
Vacuum will stay on as long as sensor exceed the threshold while tool is running + 5 seconds.
3. If the same tool is used next, the Stepper will remain in it's current position.
But the vacuum system should still operate the same.*/

// defines pins numbers
const int stepPin = 3;
const int dirPin = 2;
const int enPin = 8;
const int vacPin = 4; //for Vacuum relay

int g_CA = 0;  // a global variable to hold the current angle
int g_NA;      // a global variable to hole the new angle


void setup() {
  Serial.begin(9600);
  
  // Sets the 3 pins as Outputs
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(enPin, OUTPUT);
  pinMode(vacPin, OUTPUT); //Just added this for vac
  
  //set values for 2 outputs
  digitalWrite(enPin, LOW);
  digitalWrite(dirPin, HIGH);
  digitalWrite(vacPin, LOW); //just add this for vac
}

// more code here to move motor to starting angle.
// amend to globable variable CurrentAngel to be whatever the
// start angle is.

// function getAngle that loops through all the analogue pins and will
// return the angle indicated by the first analogue pin.wit a value of < 600 
//  The function will loop until a value of over 600 is found. 
int getAngle() {
  while(true){
    if (analogRead(A0) > 600) {
      return 0;
      }
    else if (analogRead(A1) > 600) {
      return 45;
      }
    else if (analogRead(A2) > 600) {
      return 225;
      }
    else if (analogRead(A3) > 600) {
      return 270;
      }
    }
}

// function moveServo will move the servo to the new angle 
// and then set the global variable g_CurrentAngel to the angle now set
// if the angle required is the same as the current angle then 
// then funtion will exit and do nothing.
void moveServo() {
  int stepPerAngle = 5 / 9; // full step = 1.8 or could have used "*1.8"
  int numstep;
  if (g_NA == g_CA) {
    return;
    }
  // calculate numstep to new angle and set the motor direction pin
  if (g_NA - g_CA > 0 && g_NA - g_CA <= 180) {
    digitalWrite(dirPin, HIGH);
    numstep = ((g_NA -  g_CA) * 5 / 9);
    }
  else if (g_CA - g_NA > 0 && g_CA - g_NA > 180) { 
    digitalWrite(dirPin, HIGH);
    numstep = ((g_NA + 360 - g_CA) * 5 / 9);
    }
  else if (g_NA - g_CA < 0 && g_NA - g_CA <= 180) { 
    digitalWrite(dirPin, LOW);
    numstep = ((g_CA - g_NA) * 5 / 9);
    }
  else if (g_NA - g_CA > 0 && g_NA - g_CA > 180) { 
    digitalWrite(dirPin, LOW);
    numstep = ((g_CA + 360 - g_NA) * 5 / 9);
    }

  // move stepper to new angle
  for (int x = 0; x < numstep; x++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);  //speed
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
    }
  delay(200);
  
  // set g_CA to the new Angle
  g_CA = g_NA;

}
  
// function to switch van on
void switchVacOn() {
  if (vacPin == LOW) {
    digitalWrite(vacPin, HIGH);
  }
}

 // function to monitor current angle current sensor
 void monitorCurrentAngle() {
    bool is_off = false;
    while(true) {
      switch (g_CA) {
        case 0:
          if (analogRead(A0) == LOW) {
            is_off = true;
            break;
            }
        case 45:
          if (analogRead(A1) == LOW) {
            is_off = true;
            break;
            }
        case 255:
          if (analogRead(A2) == LOW) {
            is_off = true;
            break;
            }
        case 270:
          if (analogRead(A3) == LOW) {
            is_off = true;
            break;
            }
      if(is_off == true) {
          return;
          }
      } 
  }
}

// function to switch vac of after a delay
void switchVacOff() {
  delay(4000);
  digitalWrite(vacPin, LOW);
}

void loop() {
  g_NA = getAngle(); // function will loop until a current sensor tiggers on
  moveServo();
  switchVacOn();
  monitorCurrentAngle(); // fuction will loop until current sensor triggers off
  switchVacOff();

}
 

 


ReplyQuote
GAM
 GAM
(@gam)
Eminent Member
Joined: 5 months ago
Posts: 49
Topic starter  

@robotbuilder 

My response was to the quote below.

Posted by: @robotbuilder

If you only use one tool at a time then why not just have a flap at each location that you can open and close manually and a button at each location to turn the vacuum pump on or off?

Your correct about the gate needs to be aligned first.  From what I'm seeing the stepper gets there quickly.  Of course it just moving a pointer now and not a disc, which while well balanced will have much more mass. That being said most tool have a on/off switch that's turn on first and then you use both hands to push or move the wood through the tool, eg Table Saw, Plainer, Joiner, drill press. So there is time for things to happen. The Miter Saw would be an exception as it has a trigger that needs to be depressed during the cut. In that case you could hold it on for a sec before cutting. Or you could give the trigger a quick pull that would move the gate.  The Miter Saw is one you might make multiple cuts at in quick session, but after the first use the gate would already be aligned. 

I'm sure once in use there will be some "I never thought about that"   


ReplyQuote
GAM
 GAM
(@gam)
Eminent Member
Joined: 5 months ago
Posts: 49
Topic starter  

@byron,   This is interesting and I'm glad you used some of the same terms.  I can follow it pretty well. I do have some question I will ask later.  No time now,  Good to see a different way!


ReplyQuote
robotBuilder
(@robotbuilder)
Prominent Member
Joined: 2 years ago
Posts: 800
 

@gam

Hope this is not too annoying being in your thread for I am not addressing your actual code directly but instead I am giving alternate ways of coding the parts of the problem. Depends if this is a one off project or if you are interested in coding solutions in general. I can move it to another thread if you like.

This code moves the stepper motor in the shortest direction to one of eight positions depending which button has been pressed.  I haven't used any stepper library thus there is a longish subroutine stepper(steps,direction) included.  Also the stepper has 4096 steps for a full rotation because it is geared.

The code works and has been tested on the hardware shown below. The vacuum turns on (LED on pin 32) if a button is being pressed and the disc is in the right position.

 

 

#define IN1 8 
#define IN2 9 
#define IN3 10 
#define IN4 11 

int currentAngle = 0;
int newAngle = 0;

void setup() { 
  pinMode(IN1, OUTPUT); 
  pinMode(IN2, OUTPUT); 
  pinMode(IN3, OUTPUT); 
  pinMode(IN4, OUTPUT);
  
  pinMode(22,INPUT);
  pinMode(23,INPUT);
  pinMode(24,INPUT);
  pinMode(25,INPUT);
  pinMode(26,INPUT);
  pinMode(27,INPUT);
  pinMode(28,INPUT);
  pinMode(29,INPUT);

  pinMode(32,OUTPUT);
  pinMode(33,OUTPUT);
  pinMode(34,OUTPUT);
  pinMode(35,OUTPUT);
  pinMode(36,OUTPUT);
  pinMode(37,OUTPUT);
  pinMode(38,OUTPUT);
  pinMode(39,OUTPUT);
  
  // delay(1000); 
} 

int GET_TOOL_NUMBER(){
  int toolNumber;
    toolNumber = -1;
    if (digitalRead(22) == LOW) toolNumber = 0;
    if (digitalRead(23) == LOW) toolNumber = 1;
    if (digitalRead(24) == LOW) toolNumber = 2;
    if (digitalRead(25) == LOW) toolNumber = 3;
    if (digitalRead(26) == LOW) toolNumber = 4;
    if (digitalRead(27) == LOW) toolNumber = 5;
    if (digitalRead(28) == LOW) toolNumber = 6;
    if (digitalRead(29) == LOW) toolNumber = 7;
    return toolNumber;
}

void moveStepper(int steps_left,int Direction) { 

  int Steps = 0; 
  unsigned long last_time; 
  unsigned long currentMillis ; 
  long time;
   
  while(steps_left>0){ 
    currentMillis = micros(); 
    if(currentMillis-last_time>=1000){ 

      for (int x=0;x<1;x++){ 
        switch(Steps){ 
          case 0: 
          digitalWrite(IN1, LOW);
          digitalWrite(IN2, LOW); 
          digitalWrite(IN3, LOW); 
          digitalWrite(IN4, HIGH); 
          break; 
          case 1:
          digitalWrite(IN1, LOW); 
          digitalWrite(IN2, LOW); 
          digitalWrite(IN3, HIGH); 
          digitalWrite(IN4, HIGH); 
          break; 
          case 2: 
          digitalWrite(IN1, LOW); 
          digitalWrite(IN2, LOW); 
          digitalWrite(IN3, HIGH); 
          digitalWrite(IN4, LOW); 
          break; 
          case 3: 
          digitalWrite(IN1, LOW); 
          digitalWrite(IN2, HIGH); 
          digitalWrite(IN3, HIGH); 
          digitalWrite(IN4, LOW); 
          break; 
          case 4: 
          digitalWrite(IN1, LOW); 
          digitalWrite(IN2, HIGH); 
          digitalWrite(IN3, LOW); 
          digitalWrite(IN4, LOW); 
          break; 
          case 5: 
          digitalWrite(IN1, HIGH); 
          digitalWrite(IN2, HIGH); 
          digitalWrite(IN3, LOW); 
          digitalWrite(IN4, LOW); 
          break; 
          case 6: 
          digitalWrite(IN1, HIGH); 
          digitalWrite(IN2, LOW); 
          digitalWrite(IN3, LOW); 
          digitalWrite(IN4, LOW); 
          break; 
          case 7: 
          digitalWrite(IN1, HIGH); 
          digitalWrite(IN2, LOW); 
          digitalWrite(IN3, LOW); 
          digitalWrite(IN4, HIGH); 
          break; 
          default: 
          digitalWrite(IN1, LOW); 
          digitalWrite(IN2, LOW); 
          digitalWrite(IN3, LOW); 
          digitalWrite(IN4, LOW);  
          break; 
        } 
        if(Direction==1){ 
          Steps++;
        } 
        if(Direction==0){ 
          Steps--; 
        } 
        if(Steps>7){
          Steps=0;
        } 
        if(Steps<0){
          Steps=7; 
        }  
      } 

      time=time+micros()-last_time; 
      last_time=micros(); 
      steps_left--; 
    } 
  } 
} 

void TURN_OFF_VACUUM(){
  digitalWrite(32,LOW);
}

void TURN_ON_VACUUM(){
  digitalWrite(32,HIGH);
}

int tool;
int Direction2;
int stepCount;

void MOVE_DISC_TO_TOOL_POSITION(){
  stepCount = abs(newAngle-currentAngle);
    
  if (newAngle < currentAngle){
    Direction2 = 0;
  }else{
    Direction2 = 1;
  }
  
  if (abs(newAngle-currentAngle)>2047){
    stepCount = 4096 - stepCount;
    if (Direction2==0){
      Direction2 = 1;
    }else{
      Direction2 = 0;
    }
  }

  moveStepper(stepCount,Direction2);

  currentAngle = newAngle;  // update current position
}

int toolID;

void loop(){
  
  toolID = GET_TOOL_NUMBER();
  
  if (toolID != -1){   // returns -1 if no tool on
    
    newAngle = toolID * 512;  // each quarter = 512 steps
    TURN_OFF_VACUUM();       // vacuum off while moving disc
    MOVE_DISC_TO_TOOL_POSITION();
    TURN_ON_VACUUM();
  }else{
    TURN_OFF_VACUUM(); 
  }
  
}

To enlarge image, right mouse click on image and select open link in new window.

stepperTest

 

This post was modified 1 month ago by robotBuilder

ReplyQuote
byron
(@byron)
Honorable Member
Joined: 2 years ago
Posts: 519
 

@gam

and another solution - no programming required 😀, but I thought it was a neat solution and one I could see myself putting into my shop.  

 


ReplyQuote
GAM
 GAM
(@gam)
Eminent Member
Joined: 5 months ago
Posts: 49
Topic starter  

@byron  He did a great job on that!  I hope he didn't have to make very many.  


ReplyQuote
GAM
 GAM
(@gam)
Eminent Member
Joined: 5 months ago
Posts: 49
Topic starter  

@robotbuilder  Wow! lot of work you did.  First off , send me anything you want, I don't understand some, but learn with everything. Other than that, I'm not sure the Question this is under is valid anymore?  Not knowing the forums ins and outs would someone else be able to find this and benefit? 

Questions

  • what are the different cases for? I think those are stepper inputs
  • Have you tried pushing more than 1 button at a time.  Discovered that mine only ignores the 2nd button if the degrees > the 1st.  If the 2nd button is < the 1st it tries to move to 2nd position till button is released?

I think the only part of the library I using is for the nonblocking delay timer.

 


ReplyQuote
robotBuilder
(@robotbuilder)
Prominent Member
Joined: 2 years ago
Posts: 800
 
Posted by: @gam

@robotbuilder  Wow! lot of work you did. 

I like solving programming problems.  Of course liking something doesn't mean you are any good at it 🙂

I noticed you can step your stepper motor using a stepPin to your expansion board that drives the MKS stepper. I don't have such a board so it is a bit more complicated in my case. All you have to do in your code is set the direction pin and then turn the step pin on and off to step the motor, no library required. I am using this Arduino compatible 5volt stepper motor and controller.

stepperAndController

I now know from Bill's tutorial on steppers how to use #include <Stepper.h> to set the speed and number of steps for this controller which will dramatically reduce the size of the code required to move the stepper motor as any complexity will be hidden in the header file.

No I haven't tried pushing more than one button but looking at the code it is going to return the button with the largest tool Number. That would be like turning two tools on at once.

I have just spotted a flaw in the main loop. I forgot to check if na==ca. Because my "vacuum pump" is just a LED I couldn't spot the problem when I ran the code.

The idea is to allocate code out to functions so the main loop is simply a description of the process which, if you choose the function names wisely, can read like a human language. The labels are said to be self commenting.

 

This post was modified 1 month ago by robotBuilder

GAM liked
ReplyQuote
robotBuilder
(@robotbuilder)
Prominent Member
Joined: 2 years ago
Posts: 800
 

@gam

I was looking at some of the wood workshop solutions and the problems with dust collection blast gates clogging up and not working properly. I wondered if the same thing would happen to your disc.  I thought why not a flap like a door flap with hinges? The suction would keep the flaps tightly closed while the desired flap would be kept open with a magnetic, solenoid or motor operated latch. If the disc system failed over time maybe each inlet could instead have such a flap mechanism.

dustBlustFlaps

With my stepper motors there are 2040 step in one revolution so 255 steps between positions (2040/8). I see no reason to use degrees because there isn't an exact integer amount of steps per degree and surely round up errors would accumulate as the disc moved back and forth. There are however exactly 255 steps in 45 degrees.

There is probably a simpler way to compute the number and sign of the steps.

It would be simple to convert the code to work with your stepper motor.

This uses the stepper.h   It works with my hardware.

 

 

//Include the Arduino Stepper Library
#include <Stepper.h>

const float STEPS_PER_REV = 32; 
const float GEAR_REDUCTION = 64;
const float STEPS_PER_OUT_REV = STEPS_PER_REV * GEAR_REDUCTION;
 
Stepper steppermotor(STEPS_PER_REV, 8, 10, 9, 11);

int discAngle = 0;   // current angle of disc
int toolAngle = 0;   // required angle of disc for tool

void setup() { 
  
  pinMode(22,INPUT);  // tool on inputs
  pinMode(23,INPUT);
  pinMode(24,INPUT);
  pinMode(25,INPUT);
  pinMode(26,INPUT);
  pinMode(27,INPUT);
  pinMode(28,INPUT);
  pinMode(29,INPUT);

  pinMode(32,OUTPUT);  // control vacuum

} 

// if button pressed returns number 0 to 7 or -1 if no button pressed
int GET_TOOL_NUMBER(){
  int toolNumber;
    toolNumber = -1;
    if (digitalRead(22) == LOW) toolNumber = 0;
    if (digitalRead(23) == LOW) toolNumber = 1;
    if (digitalRead(24) == LOW) toolNumber = 2;
    if (digitalRead(25) == LOW) toolNumber = 3;
    if (digitalRead(26) == LOW) toolNumber = 4;
    if (digitalRead(27) == LOW) toolNumber = 5;
    if (digitalRead(28) == LOW) toolNumber = 6;
    if (digitalRead(29) == LOW) toolNumber = 7;
    return toolNumber;
}

void TURN_OFF_VACUUM(){
  delay(100);
  digitalWrite(32,LOW);
}

void TURN_ON_VACUUM(){
  digitalWrite(32,HIGH);
}

int Direction2;
int stepCount;

void MOVE_DISC_TO_TOOL_POSITION(){
  
  //******  compute number and direction of steps ****
  stepCount = abs(toolAngle-discAngle);  
  if (toolAngle < discAngle){
    Direction2 = 0;
  }else{
    Direction2 = 1;
  }  
  if (abs(toolAngle-discAngle)>1020){
    stepCount = 2040 - stepCount;
    if (Direction2==0){
      Direction2 = 1;
    }else{
      Direction2 = 0;
    }
  }
  if (Direction2 == 0){
    stepCount = -stepCount;
  }

  // ***  move stepper motor
  steppermotor.setSpeed(800);   // move stepper
  steppermotor.step(stepCount);
  delay(100);

  discAngle = toolAngle;  // update disc position
  
}

int toolID;

void loop(){

  toolID = GET_TOOL_NUMBER();        // get tool number 0 to 7 or -1
  
  if (toolID != -1){                 // returns -1 if no tool on
    toolAngle = toolID * 255;        // convert to angle
    if (toolAngle != discAngle){     // must move disc
      TURN_OFF_VACUUM();             // vacuum off while moving disc
      MOVE_DISC_TO_TOOL_POSITION();  // move disc
      TURN_ON_VACUUM();              // vacuum on
    }else{
      TURN_ON_VACUUM();              // tool on, disc in place
    }
  }else{
    TURN_OFF_VACUUM();               // tool off so turn of vacuum
  }
  
}

 

This post was modified 1 month ago 3 times by robotBuilder

ReplyQuote
robotBuilder
(@robotbuilder)
Prominent Member
Joined: 2 years ago
Posts: 800
 

@gam

This is how I would modify the getToolNumber() function.  Instead of returning an angle from the ACS712 current sensors it would simply return the tool number from which the angle or step value could be computed.

 

int GET_TOOL_NUMBER(){
  int toolNumber;
    toolNumber = -1;
    if (analogRead(A0) > 600) toolNumber = 0;
    if (analogRead(A1) > 600) toolNumber = 1;
    if (analogRead(A2) > 600) toolNumber = 5;
    if (analogRead(A3) > 600) toolNumber = 6;
    return toolNumber;
}

 

This post was modified 1 month ago by robotBuilder

ReplyQuote
byron
(@byron)
Honorable Member
Joined: 2 years ago
Posts: 519
 

@robotbuilder

It seems there are three things that are synonymous - tool number / analogue pin / angle (and possibly a 4th the port number).  I'd have to ponder about how to link all three but for 2 a dictionary could be used.

std::map<char, int> PinAngle = {
    { 'A0', 0 },
    { 'A1', 45 },
    { 'A2', 255 }
etc };

In the refactored code I produce for @gam it would have been helpful if I had stored which analogue pin for the current angle (or tool) being used was to more easily code to monitor if said pin was over 600 or had gone low.  It would  also make it easy to check the value again the delay period and before the vacuum is switch off.  What do you think?

@gam following the post on the neat blast gates operated by wire I'm now thinking, for my shop at least, it would be simpler just to find a solution to electronically operate my existing blast gates.  On youtube there are a number of examples of using motors and even air lines to move the normal manually operated gates by doing some cleaver alterations.   I could then also easily operate the gates manually if desired.  

And a final though, as the likes of an ESP8266 are as cheap as chips (or the ESP32 - but priced as a bag of chips)  one could have a 'local to the tool'  button/sensor/esp8266 that could communicate via wifi or bluetooth to the blast gate controller, or to the patented gam circular gate selector. 😎  

 

 


ReplyQuote
robotBuilder
(@robotbuilder)
Prominent Member
Joined: 2 years ago
Posts: 800
 

@byron

What do you think?

My programming skill set is very limited. Programming was an occasional hobby. I am entirely self taught.  I haven't learned to use the advanced features of c++.  I don't even bother with writing classes (although with the C++ compilers I use classes).  Programming is just an occasional hobby started a long time ago when I was teaching myself basic electronics.  On the old machines (TRS-80, C64, Amiga) my language of choice was Assembler code because it was fast, simple to understand and you could directly access the hardware.  With MSDOS I took up using TurboC++.  The developmental environments for using C++ are now very complex and I don't have the time or brains to learn it all.  I now prefer to program in the BASIC language which I also used on the old machines. Arduino C++ is easy to use.

Although I see in the introductions many members boasting their experience and expertise in programming and/or electronics I don't see them helping others.  This is not uncommon on forums.  Experts talk to experts. Those of us on the lower rungs talk to others on the lower rungs.

Gam's project isn't exactly rocket science in terms of software and hardware but I found it interesting as a problem to solve.

 


ReplyQuote
byron
(@byron)
Honorable Member
Joined: 2 years ago
Posts: 519
 
Posted by: @robotbuilder

Those of us on the lower rungs talk to others on the lower rungs.

Count me in on the lower rungs 😀.  I did program in C way back when (early 80's) but then I got proficient enough in Visual Basic (VB6) with SQLServer to be a contract programmer for a few years (early 90's I think) before going on to other things and I ceased to earn a living as a programmer.  When I retired I got a Raspberry Pi and learned a bit of python.  I found it rather fun.  The rpi gave me an intro into electronics and then to getting an arduino and getting up to speed on Arduino programming.  (sadly I've a long way to go with electronics and need to do much more to get to even a basic level)

On getting the arduino I did follow some on-line courses in C++ but I've not used it in earnest.  I find I'm most comfortable in python and love its lists, tuples and dictionary concepts, and the ease of using classes, creating multi-threading and multi-procssesor programs, I could go on but nuff said.  I'm not so hot on the C++ equivalents to things like pythons dictionary lists, so I was struggling a bit on the use of maps.  

As I see you quite like a problem to solve I've a feeling you would quite like python and would soon get comfortable with it.  No denying some effort to get to grips with python would be required, but not so much a man of your calibre would find it too daunting.  I found learning python to be much more pleasant than C++.  I think Python would have the advantage over Basic in being available on most platforms, though not arduino, and Im under the impression that Basic is not well supported any more (but I have not done any research, and I do miss good old VB6 for the shear ease of getting a good GUI up and running).

The arduino has a huge number of code examples and libraries which is a huge help in getting going with it, though with the advent of micropython that will run on ESP8266, ESP32, the new rpi2040 and others, and also CircuitPython runs on a bunch of boards I think the micropython ecosystem will soon be it equal.  

Arduino programming is easy enough to learn, but you've conquered it.  I recommend an rpi 2040 board, An hour or two per evening every other day getting up to speed with python and give it a month and you may even be uninstalling your Basic programming tools 😎.


ReplyQuote
GAM
 GAM
(@gam)
Eminent Member
Joined: 5 months ago
Posts: 49
Topic starter  

@byron @robotbuilder  Love your drawings,  and that is correct on the flaps,  most people use a sliding type because it will sort of clean it self. when that flap closes their maybe  debris under it that might prevent a good seal. again you would need a separate motor or some drive device at gate. 

Yes there are many ways to drive the gate,  The servo has been used,  pneumatic air cylinders, (compressor),  and I have seen and tried electric door lock for cars,  they where quick, cheap and strong. All have advantages and draw backs, 

As for using the Degree as opposed to using a math solution (gate number * number of steps.  I did my best to make those ports at the correct place but if they are not perfect changing the degrees for a particular gate would be easy.   


ReplyQuote
GAM
 GAM
(@gam)
Eminent Member
Joined: 5 months ago
Posts: 49
Topic starter  

@byron @robotbuilder

Posted by: @byron

ESP8266 are as cheap as chips (or the ESP32 -

I have been interested in these boards and have thought the same thing. Not ready to jump ship yet but would like to pick some up to play with. 

On the Python subject,  I found more groups for that and everyone talks about how much easier it is.  It think there are compilers? that will convert it back to C++ if needed. 

Have written the homing sketch for my project and tested it.  Now need to merge it with the other sketch.   


ReplyQuote
Page 7 / 8