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...
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å....
// 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
}
}
}