Grovdjupmätning med 3040CNC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
lgrfbs
Inlägg: 6971
Blev medlem: 28 januari 2005, 15:48:53
Ort: X-län
Kontakt:

Grovdjupmätning med 3040CNC

Inlägg av lgrfbs »

Programmet är inte klart ännu.
Tanken är att jag laddar ett CNC program i maskinen som är ett gäng borrcyckler med väntetid i botten och MCU:n ska då känna av att mätvärdena via en sjutpot som är ansluten till A/D omvandlaren har stannat till och registrera det, för att invänta nästa stabila värdet och så ska det fortsätta tills hela CNC-programmet är genomkört.
A/D delen av programmet är inte klart, men ändå har en logiskbug smygit sig in, är det någon som ser vad jag gjort för fel?
CNC_rof_prob Logik fel.png
De rader i röda block är de som inte ska dyka upp.

Kod: Markera allt

#include <SoftwareSerial.h>

String Text ="";
int utdata = 0;
int deep = 0;
int Data = 0;
int st = 0;
int incomingByte = 0; // for incoming serial data
SoftwareSerial mySerial(10, 11); // RX, TX


void setup() {
  // put your setup code here, to run once:
  // Open serial communications and wait for port to open:
  Serial.begin(57600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}


void loop() {
if (st == 0) {
Serial.println("");
Serial.println("Enter numberss of sampel: ");
Serial.println(" n or N = new sampel range ");
st=1;
  }
  if (Serial.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial.read();

    // say what you got:
    //Serial.println("Okey, got it.");
    //Serial.print("I received: ");
    Data=(incomingByte-48);
    if (incomingByte==110){st=99;}
    if (incomingByte==78) {st=99;}
    if (st==99){
     Text ="";
     utdata = 0;
     deep = -1;
     Data = 0;
     st = 0;
     incomingByte = 0; // for incoming serial data
    }

    if (Data>=0){
      if (incomingByte>=48 && incomingByte<=57){
       //Serial.println("Siffror");}
       //Serial.println(incomingByte);
       //Serial.println("<---incomingByte");
       //Serial.println(Data);
       //Serial.println("<---Data");
       Text = Text+String(Data);
       //Serial.print(Text);
       //Serial.println("<---Text");
       utdata=Text.toInt();
       //Serial.print(utdata);
       //Serial.println("<---utdata");
      }
    }
    if (Serial.available() == 0) {
      st=2;
      Serial.println("----------------------------------------------------");
      Serial.println("Okey, got it.");
    }
  }
  
  if (st == 2){
    // put your main code here, to run repeatedly:
    if (deep<0){st=0;}
    if (deep>0){
      Serial.print(",");
    }
    Serial.print(deep);
    deep=deep+1;
    if (deep>utdata) {
      Serial.println(" ");
      deep=0;
    }
  }
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(25);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(10);                       // wait for a second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(25);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(100);                       // wait for a second
}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: Grovdjupmätning med 3040CNC

Inlägg av JimmyAndersson »

Kod: Markera allt

if (incomingByte==110){st=99;}
    if (incomingByte==78) {st=99;}
    if (st==99){
Om första eller andra if-raden är sann, så blir den tredje också sann.
Det innebär att om incomingByte är 110 eller 78 så ska allt i tredje if-raden hända.
Ska det vara så?

Annars: Sätt den sista if-delen först istället. :)

Jag har inte lusläst koden, så jag vet inte om det löser problemet, men det var det första som stack ut.
Användarvisningsbild
lgrfbs
Inlägg: 6971
Blev medlem: 28 januari 2005, 15:48:53
Ort: X-län
Kontakt:

Re: Grovdjupmätning med 3040CNC

Inlägg av lgrfbs »

Ja den ska funktionellt vara så, skulle nog gå att skriva det som en if-sats med ett 'or'-styrkod mellan de båda villkoren.
Den är till för att kolla om "N" eller "n" har mottagits.
Skriv svar