Växel indikator till gixern

Hej alla proffs.

Jag är en noob in programmering.. men jag har googlat mycket och får inte ihop det ändå...

Projektet är detta:

En växel sensor gör en analog signal till en arduino nano (A0)

Data:
1: 51
Neutral : 1023
2: 82
3: 135
4: 217
5: 410
6: 614

Och ut skall arduinon sen ge en puls på ca 300ms på 2 utgångar beroende på om du växlar upp eller ned.. och sen skall en 3:e utgång pulsas också i ca 300ms när du har neutral , pulsen måste bara bli en gång annars räknar växel indikatorn upp... = inte bra..

Problem 1: jag får inte till det hur den skall känna av om jag växlar från neutral till 1.. ( värdet går från 1023 till 51...)

Problem 2: det verkar som jag inte får till pulsen bra... bara en utgång får vara aktiv åt gången...

Problem 3: det vore bra om jag inte vore så gammal... :slight_smile:

Ursäkta stavfel ... blev osams med svenska läraren för 40 år sen...

Hoppas någon kan iallafall få mig på rätt väg...

Jag skickar med min kod.. som egentligen inte funkar alls... det finns en del som jag provat med in den också.... :slight_smile:

// Jocke

// these constant won't change:

 int sensorValue = A0;    // Gear sensor voltage in   
 int neutral = 4;            // Neutral indication
 int geardown = 5;           // Gear move down
 int gearup = 6;           // Gear move Up
 
 byte hysteresis = 4;

 boolean enableFlag = true; //when true allow for checking
 boolean timingFlag = false;

 unsigned long toggleMillis;
 unsigned long toggleTime = 300UL;
 int period = 200;
 unsigned long time_now = 0;

 



// Variables will change:
//int currentVoltage ;         // current voltage value
//int previousVoltage ;     // previous voltage value  


void setup()

{ 
 
 pinMode(sensorValue, INPUT); // initialize gear sensor pin as a input:
 pinMode(4, OUTPUT);        // initialize Neutral pin out
 pinMode(5, OUTPUT);        // initialize the Gear Down pin
 pinMode(6, OUTPUT);        // initialize the Gear UP pin
 pinMode(8, INPUT);        // Debugging Neutral pin in
 pinMode(9, INPUT);        // Debugging the Gear Down pin in
 pinMode(10, INPUT);        // Debugging the Gear UP pin in
 Serial.begin(9600);   // initialize serial communication for debugging
 } 
     
   
void loop()
{
  int neutral = digitalRead(8);
  int gearup = digitalRead(9);
  int geardown = digitalRead(10);
  int sensorValue = analogRead(sensorValue);
  time_now = millis(); 



    Serial.print("Sensor value :");              // Debugg line
    Serial.println(sensorValue);                 // Print The actual Value
    Serial.print("Neutral pin :");               // Debugg line
    Serial.println(digitalRead(8), DEC);         // Print The actual Value
    Serial.print("Gear UP :");                   // Debugg line
    Serial.println(digitalRead(9), DEC);         // Print The actual Value
    Serial.print("Gear Down :");                 // Debugg line
    Serial.println(digitalRead(10), DEC);        // Print The actual Value
    
       
  // int currentVoltage = analogRead(sensorPin);// read the voltage across the gear sensor pin:
  //if (currentVoltage != previousVoltage)  //the current voltage value to its previous value 
   
 
   
 
// Neutral Pin
//-----------------------------------------------------------------------------------------------
  while(millis() < time_now + period);         //wait approx. [period] ms        
  if (enableFlag == true && sensorValue >= 1020)  //Gear sensor is in Neutral check
    {  
    digitalWrite(4,HIGH);                        //Turn on the LED
    toggleMillis = millis();                     //Record the start time the LED turned on
    enableFlag = false;                          //Disable this block of code as we want this to happen ony ONCE when >= 1010
    timingFlag = true;                           //Enable the next block of code to check if it is time to turn off the LED
    }  
  if(timingFlag == true && millis() - toggleMillis >= toggleTime)  //If we are timing, is it time to turn off the LED?
   {    
    digitalWrite(4,LOW);                        //Turn off the LED
    toggleMillis = millis();                    //Record the start time the LED turned 0ff
    timingFlag = false;                         //Disable this block of code as we are now finished timing
   }
  if(timingFlag == false && sensorValue < 1020 - hysteresis) //When not timing, is the gear sensor in gear?
   {
    enableFlag = true;                            //When we get under (1010 - hysteresis) we can start checking for >= 1010 again
   }
 
 


// Gear one
//-----------------------------------------------------------------------------------------------

   {
    while(millis() < time_now + period);         //wait approx. [period] ms
  if (enableFlag == true && sensorValue <= 60)  //Gear sensor is in gear one check
   {  
     digitalWrite(6,HIGH);                        //Turn on the LED
     toggleMillis = millis();                     //Record the start time the LED turned on
     enableFlag = false;                          //Disable this block of code as we want this to happen ony ONCE when <= 60
     timingFlag = true;                           //Enable the next block of code to check if it is time to turn off the LED
   }
  if(timingFlag == true && millis() - toggleMillis >= toggleTime)  //If we are timing, is it time to turn off the LED?
   {
    digitalWrite(6,LOW);                        //Turn off the LED
    toggleMillis = millis();                    //Record the start time the LED turned 0ff
    timingFlag = false;                         //Disable this block of code as we are now finished timing
    
   }  
  if(timingFlag == false && sensorValue <= 60 - hysteresis) //When not timing, is the gear sensor in gear?
   {
   enableFlag = true;                            //When we get over (50 - hysteresis) we can start checking for >= 50 again
   }
  }
}