C: Hur ska jag kunna deklarera denna variabel?
Hej!
Jag har en lång kod här. Efter själva koden har kört klart så ska den hoppa till loop() men innan just loop() så ska den ta med sig några värden också. Jag försöker då deklarera variabler. Jag tänker göra om t.ex "34" till 34 som ni ser. Men jag får det inte att fungera. Vart ska jag deklarera variablerna?
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 12
// pin 7 - Serial clock out (SCLK)
// pin 8 - Serial data out (DIN)
// pin 13 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 2 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 8, 13, 4, 2);
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// Deceleration for LED
const int led_green = 10;
const int led_red = 9;
void setup()
{
// Sett green and red LED output
pinMode(led_green, OUTPUT);
pinMode(led_red, OUTPUT);
// Sett a tone at start
tone(5, 400, 400);
// Flash with LED at start
digitalWrite(led_green, HIGH);
digitalWrite(led_red, HIGH);
delay(400);
digitalWrite(led_green, LOW);
digitalWrite(led_red, LOW);
display.begin(); // Begin to use the display
display.setContrast(50); // set contrast
display.clearDisplay(); // Remove the adafruit logo and clear!
/* Some questions to declare method, temperature and time */
int first = first_question(); // the first question
int second = second_question(first); // the second question
// Start up the library
sensors.begin();
delay(5000); //important on linux as serial port can lock up otherwise
}
void printTemperaturesToSerial() {
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
//Serial.print("Requesting temperatures...");
sensors.requestTemperatures(); // Send the command to get temperatures
//Serial.println("DONE");
// Read each of our sensors and print the value
for(int i=0; i < 2; i++) // two sensors
{
Serial.print("Temperature for Device ");
Serial.print( i );
Serial.print(" is: ");
// Why "byIndex"? You can have more than one IC on the same bus.
// 0 refers to the first IC on the wire
Serial.println( sensors.getTempCByIndex(i) );
}
Serial.println();
}
int tangent_key() // press any key to choose metod
{
int tangent = 1023;
while(tangent >= 1015)
{
tangent = analogRead(A5);
}
if (tangent > 585 && tangent < 595) // number 1
{
tone(5, 400, 400);
return 1;
}
else if (tangent > 50 && tangent < 60) // number 2
{
tone(5, 400, 400);
return 2;
}
else if (tangent > 370 && tangent < 390) // number 3
{
tone(5, 400, 400);
return 3;
}
else if (tangent > 999 && tangent < 1004) // number 4
{
tone(5, 400, 400);
return 4;
}
else if (tangent > 35 && tangent < 47) // number 5
{
tone(5, 400, 400);
return 5;
}
else if (tangent > 10 && tangent < 19) // number 6
{
tone(5, 400, 400);
return 6;
}
else if (tangent > 800 && tangent < 815) // number 7
{
tone(5, 400, 400);
return 7;
}
else if (tangent > 4 && tangent < 10) // number 8
{
tone(5, 400, 400);
return 8;
}
else if (tangent > 170 && tangent < 185) // number 9
{
tone(5, 400, 400);
return 9;
}
else if (tangent >= 0 && tangent < 1) // number 0
{
tone(5, 400, 400);
return 0;
}
else if (tangent > 855 && tangent < 875) // number 100 or B for back
{
tone(5, 400, 400);
display.clearDisplay();
return 100;
}
else if (tangent > 1006 && tangent < 1012) // number 200 or E for enter
{
tone(5, 400, 400);
display.clearDisplay();
return 200;
}
else
{
display.clearDisplay();
display.println("****ERROR****");
display.print("Try again");
display.display();
delay(3000);
first_question();
}
}
int tangent_key2(int first) // press any key to choose time
{
int tangent = 1023;
while(tangent >= 1015)
{
tangent = analogRead(A5);
}
if (tangent > 585 && tangent < 595) // number 1
{
tone(5, 400, 400);
return 1;
}
else if (tangent > 50 && tangent < 60) // number 2
{
tone(5, 400, 400);
return 2;
}
else if (tangent > 370 && tangent < 390) // number 3
{
tone(5, 400, 400);
return 3;
}
else if (tangent > 999 && tangent < 1004) // number 4
{
tone(5, 400, 400);
return 4;
}
else if (tangent > 35 && tangent < 47) // number 5
{
tone(5, 400, 400);
return 5;
}
else if (tangent > 10 && tangent < 19) // number 6
{
tone(5, 400, 400);
return 6;
}
else if (tangent > 800 && tangent < 815) // number 7
{
tone(5, 400, 400);
return 7;
}
else if (tangent > 4 && tangent < 10) // number 8
{
tone(5, 400, 400);
return 8;
}
else if (tangent > 170 && tangent < 185) // number 9
{
tone(5, 400, 400);
return 9;
}
else if (tangent >= 0 && tangent < 1) // number 0
{
tone(5, 400, 400);
return 0;
}
else if (tangent > 855 && tangent < 875) // number 100 or B for back
{
tone(5, 400, 400);
display.clearDisplay();
return 100;
}
else if (tangent > 1006 && tangent < 1012) // number 200 or E for enter
{
tone(5, 400, 400);
display.clearDisplay();
return 200;
}
else
{
display.clearDisplay();
display.println("****ERROR****");
display.println("Try again");
display.display();
delay(2000);
second_question(first);
}
}
int first_question() // the first question
{
display.clearDisplay();
display.println("*****MENU*****");
display.print("Press 1 or 2:");
display.display();
if (tangent_key() == 1)
{
display.clearDisplay();
display.print("You press: 1");
display.display();
delay(2000);
return 300;
}
else if (tangent_key() == 2)
{
display.clearDisplay();
display.print("You press: 2");
display.display();
delay(2000);
return 400;
}
else
{
display.clearDisplay();
display.println("Invalid number");
display.print("Try again");
display.display();
delay(2000);
tone(5, 400, 400);
display.clearDisplay();
first_question();
}
}
int second_question(int first)
{
/* if first == 300 it means that you gonna
run with device 0 and device 1 */
/* if first == 400 it means that you only
gonna run device 0 */
if (first == 300) // Sett time for device 0.
{
int i = 0;
int time1 = 0;
int sum_time1[2];
display.clearDisplay();
display.print("*****TIME*****");
display.println("Dv0 time::");
display.println("Range 50-80:");
display.display();
while (i >= 0 && time1 != 200) // 200 is for Enter - continue
{
time1 = tangent_key2(first);
delay(50);
if (time1 == 100)
{
display.clearDisplay();
display.print("*****BACK*****");
display.println("You press B");
display.println("Retruning...");
display.display();
delay(2000);
second_question(first); // jump back to the begining if press letter B as back.
}
sum_time1[i] = time1;
delay(50);
if (i == 0)
{
display.clearDisplay();
display.print("*****TIME*****");
display.println("Dv0 time:");
display.println("Range 50-80:");
display.println(String(sum_time1[i]));
display.display();
delay(500);
i = i + 1;
}
else if (i == 1)
{
display.clearDisplay();
display.print("*****TIME*****");
display.println("Dv0 time:");
display.println("Range 50-80:");
display.println(String(sum_time1[i-1])+= String(sum_time1[i]));
display.println("Press E now.");
display.display();
delay(500);
i = i + 1;
}
else if (i == 2)
{
if (time1 == 200)
{
display.clearDisplay();
display.print("Done");
display.display();
delay(2000);
}
else
{
display.clearDisplay();
display.print("*****TIME*****");
display.print("No more!");
display.print("Press E now");
display.display();
delay(2000);
i = i + 1;
}
}
delay(500);
}
/* We have now enter Time 1. Let's move next to time 2 on device 1 */
display.clearDisplay();
display.print("Done...");
display.println(String(sum_time1[0])+= String(sum_time1[1]));
display.display();
delay(2000);
i = 0;
int time2 = 0; // new declaration of a new time. Time 2
int sum_time2[2];
display.clearDisplay();
display.print("*****TIME*****");
display.println("Dv1 time:"); // enter time 2
display.println("Range 50-80:");
display.display();
while (i >= 0 && time2 != 200) // 200 is for Enter - continue
{
time2 = tangent_key2(first);
if (time2 == 100)
{
display.clearDisplay();
display.print("*****BACK*****");
display.println("You press B");
display.println("Retruning...");
display.display();
delay(2000);
second_question(first); // jump back to the begining if press letter B as back.
}
delay(50);
sum_time2[i] = time2;
delay(50);
if (i == 0)
{
display.clearDisplay();
display.print("*****TIME*****");
display.println("Dv1 time:");
display.println("Range 50-80:");
display.println(String(sum_time2[i]));
display.display();
delay(500);
i = i + 1;
}
else if (i == 1)
{
display.clearDisplay();
display.print("*****TIME*****");
display.println("Dv1 time:");
display.println("Range 50-80:");
display.println(String(sum_time2[i-1])+= String(sum_time2[i]));
display.println("Press E now.");
display.display();
delay(500);
i = i + 1;
}
else if (i == 2)
{
if (time2 == 200)
{
display.clearDisplay();
display.print("Done");
display.display();
delay(2000);
}
else
{
display.clearDisplay();
display.print("*****TIME*****");
display.print("No more!");
display.print("Press E now");
display.display();
delay(2000);
i = i + 1;
}
}
delay(500);
}
/* We have now enter Time 2. Let's move next to temp 1 on device 0 */
display.clearDisplay();
display.print("Done...");
display.println(String(sum_time2[0])+= String(sum_time2[1]));
display.display();
delay(2000);
i = 0;
int temp1 = 0; // new declaration of a new temp. Temp1 1
int sum_temp1[2];
display.clearDisplay();
display.print("*****TEMP*****");
display.println("Dv0 temp:"); // enter temp 1
display.println("Range 50-80:");
display.display();
while (i >= 0 && temp1 != 200) // 200 is for Enter - continue
{
temp1 = tangent_key2(first);
if (temp1 == 100)
{
display.clearDisplay();
display.print("*****BACK*****");
display.println("You press B");
display.println("Retruning...");
display.display();
delay(2000);
second_question(first); // jump back to the begining if press letter B as back.
}
delay(50);
sum_temp1[i] = temp1;
delay(50);
if (i == 0)
{
display.clearDisplay();
display.print("*****TEMP*****");
display.println("Dv0 temp:");
display.println("Range 50-80:");
display.println(String(sum_temp1[i]));
display.display();
delay(500);
i = i + 1;
}
else if (i == 1)
{
display.clearDisplay();
display.print("*****TEMP*****");
display.println("Dv0 temp:");
display.println("Range 50-80:");
display.println(String(sum_temp1[i-1])+= String(sum_temp1[i]));
display.println("Press E now.");
display.display();
delay(500);
i = i + 1;
}
else if (i >= 2)
{
if (temp1 == 200)
{
display.clearDisplay();
display.print("Done");
display.display();
delay(2000);
}
else
{
display.clearDisplay();
display.print("*****TEMP*****");
display.print("No more!");
display.print("Press E now");
display.display();
delay(2000);
i = i + 1;
}
}
delay(500);
}
/* We have now enter Temp 1. Let's move next to temp 2 on device 1 */
display.clearDisplay();
display.print("Done...");
display.println(String(sum_temp1[0])+= String(sum_temp1[1]));
display.display();
delay(2000);
i = 0;
int temp2 = 0; // new declaration of a new temp. Temp1 2
int sum_temp2[2];
display.clearDisplay();
display.print("*****TEMP*****");
display.println("Dv1 temp:"); // enter temp 2
display.println("Range 50-80:");
display.display();
while (i >= 0 && temp2 != 200) // 200 is for Enter - continue
{
temp2 = tangent_key2(first);
if (temp2 == 100)
{
display.clearDisplay();
display.print("*****BACK*****");
display.println("You press B");
display.println("Retruning...");
display.display();
delay(2000);
second_question(first); // jump back to the begining if press letter B as back.
}
delay(50);
sum_temp2[i] = temp2;
delay(50);
if (i == 0)
{
display.clearDisplay();
display.print("*****TEMP*****");
display.println("Dv1 temp:");
display.println("Range 50-80:");
display.println(String(sum_temp2[i]));
display.display();
delay(500);
i = i + 1;
}
else if (i == 1)
{
display.clearDisplay();
display.print("*****TEMP*****");
display.println("Dv1 temp:");
display.println("Range 50-80:");
display.println(String(sum_temp2[i-1])+= String(sum_temp2[i]));
display.println("Press E now.");
display.display();
delay(500);
i = i + 1;
}
else if (i >= 2)
{
if (temp2 == 200)
{
display.clearDisplay();
display.print("Done");
display.display();
delay(2000);
}
else
{
display.clearDisplay();
display.print("*****TEMP*****");
display.print("No more!");
display.print("Press E now");
display.display();
delay(2000);
i = i + 1;
}
}
delay(500);
}
display.clearDisplay();
display.print("Done...");
display.println(String(sum_temp2[0])+= String(sum_temp2[1]));
display.display();
delay(2000);
display.clearDisplay();
delay(10);
display.print("****VALUES****");
delay(20);
display.print(String(sum_time1[0])+= String(sum_time1[1]));
delay(20);
display.println(" Time dv0");
delay(20);
display.print(String(sum_time2[0])+= String(sum_time2[1]));
delay(20);
display.println(" Time dv1");
delay(20);
display.print(String(sum_temp1[0])+= String(sum_temp1[1]));
delay(20);
display.println(" Temp dv0");
delay(20);
display.print(String(sum_temp2[0])+= String(sum_temp2[1]));
delay(20);
display.println(" Temp dv1");
delay(20);
display.print("Starting...");
delay(20);
display.display();
delay(2000);
}
else
{
int i = 0;
int time1 = 0;
int sum_time1[2];
display.clearDisplay();
display.print("*****TIME*****");
display.println("Dv0 time::");
display.println("Range 50-80:");
display.display();
while (i >= 0 && time1 != 200) // 200 is for Enter - continue
{
time1 = tangent_key2(first);
delay(50);
if (time1 == 100)
{
display.clearDisplay();
display.print("*****BACK*****");
display.println("You press B");
display.println("Retruning...");
display.display();
delay(2000);
second_question(first); // jump back to the begining if press letter B as back.
}
sum_time1[i] = time1;
delay(50);
if (i == 0)
{
display.clearDisplay();
display.print("*****TIME*****");
display.println("Dv0 time:");
display.println("Range 50-80:");
display.println(String(sum_time1[i]));
display.display();
delay(500);
i = i + 1;
}
else if (i == 1)
{
display.clearDisplay();
display.print("*****TIME*****");
display.println("Dv0 time:");
display.println("Range 50-80:");
display.println(String(sum_time1[i-1])+= String(sum_time1[i]));
display.println("Press E now.");
display.display();
delay(500);
i = i + 1;
}
else if (i >= 2)
{
if (time1 == 200)
{
display.clearDisplay();
display.print("Done");
display.display();
delay(2000);
}
else
{
display.clearDisplay();
display.print("*****TIME*****");
display.print("No more!");
display.print("Press E now");
display.display();
delay(2000);
i = i + 1;
}
}
delay(500);
}
/* We have not enter Time 1. Let's move next to temp 1 on device 0 */
display.clearDisplay();
display.print("Done...");
display.println(String(sum_time1[0])+= String(sum_time1[1]));
display.display();
delay(2000);
i = 0;
int temp1 = 0; // new declaration of a new temp. Temp1 1
int sum_temp1[2]; // new declaration of a new temp. Temp1 1
display.clearDisplay();
display.print("*****TEMP*****");
display.println("Dv0 temp:"); // ente temp 1
display.println("Range 50-80:");
display.display();
while (i >= 0 && temp1 != 200) // 200 is for Enter - continue
{
temp1 = tangent_key2(first);
if (temp1 == 100)
{
display.clearDisplay();
display.print("*****BACK*****");
display.println("You press B");
display.println("Retruning...");
display.display();
delay(2000);
second_question(first); // jump back to the begining if press letter B as back.
}
delay(50);
sum_temp1[i] = temp1;
delay(50);
if (i == 0)
{
display.clearDisplay();
display.print("*****TEMP*****");
display.println("Dv0 temp:");
display.println("Range 50-80:");
display.println(String(sum_temp1[i]));
display.display();
delay(500);
i = i + 1;
}
else if (i == 1)
{
display.clearDisplay();
display.print("*****TEMP*****");
display.println("Dv0 temp:");
display.println("Range 50-80:");
display.println(String(sum_temp1[i-1])+= String(sum_temp1[i]));
display.println("Press E now.");
display.display();
delay(500);
i = i + 1;
}
else if (i >= 2)
{
if (temp1 == 200)
{
display.clearDisplay();
display.print("Done");
display.display();
delay(2000);
}
else
{
display.clearDisplay();
display.print("*****TEMP*****");
display.print("No more!");
display.print("Press E now");
display.display();
delay(2000);
i = i + 1;
}
}
delay(500);
}
display.clearDisplay();
display.print("Done...");
display.println(String(sum_temp1[0])+= String(sum_temp1[1]));
display.display();
delay(2000);
display.clearDisplay();
delay(10);
display.print("****VALUES****");
delay(10);
display.print(String(sum_time1[0])+= String(sum_time1[1]));
delay(10);
display.println(" Time dv0");
delay(10);
display.print(String(sum_temp1[0])+= String(sum_temp1[1]));
delay(10);
display.println(" Temp dv0");
delay(30);
display.print("Startning...");
delay(30);
display.display();
delay(2000);
}
// Jump to loop() with values of dv1 and dv0.
// Tunr string to int.
int dv0_time = int(String(sum_time1[0])+= String(sum_time1[1])); // Här har jag problem!! #####<<<<----
int dv1_time = int(String(sum_time2[0])+= String(sum_time2[1]));
int dv0_temp = int(String(sum_temp1[0])+= String(sum_temp1[1]));
int dv1_temp = int(String(sum_temp2[0])+= String(sum_temp2[1]));
}
void loop() // The loop
{
printTemperaturesToSerial();
delay(1000); //wait 1 sec
}
Regulator_kod.ino: In function ‘int second_question(int)’:
Regulator_kod:869: error: ‘sum_time1’ was not declared in this scope
Regulator_kod:870: error: ‘sum_time2’ was not declared in this scope
Regulator_kod:871: error: ‘sum_temp1’ was not declared in this scope
Regulator_kod:872: error: ‘sum_temp2’ was not declared in this scope
Absolut längst ned.
Jag har ju redan deklarerat om ni söker på sun_temp1 osv.
Tar jag bort koden.
int dv0_time = int(String(sum_time1[0])+= String(sum_time1[1])); // Här har jag problem!! #####<<<<----
int dv1_time = int(String(sum_time2[0])+= String(sum_time2[1]));
int dv0_temp = int(String(sum_temp1[0])+= String(sum_temp1[1]));
int dv1_temp = int(String(sum_temp2[0])+= String(sum_temp2[1]));
Så fungerar det OK!
Om jag skriver om koden längst ned till.
display.clearDisplay();
display.print("Done...");
display.println(String(sum_temp1[0])+= String(sum_temp1[1]));
display.display();
delay(2000);
display.clearDisplay();
delay(10);
display.print("****VALUES****");
delay(10);
display.print(String(sum_time1[0])+= String(sum_time1[1]));
delay(10);
display.println(" Time dv0");
delay(10);
display.print(String(sum_temp1[0])+= String(sum_temp1[1]));
delay(10);
display.println(" Temp dv0");
delay(30);
display.print("Startning...");
delay(30);
display.display();
delay(2000);
String dv0_time_s = String(sum_time1[0])+= String(sum_time1[1]);
int dv0_time_int = int(dv0_time_s);
}
// Jump to loop() with values of dv1 and dv0.
// Tunr string to int.
/*int dv0_time = int(String(sum_time1[0])+= String(sum_time1[1])); // Här har jag problem!! #####<<<<----
int dv1_time = int(String(sum_time2[0])+= String(sum_time2[1]));
int dv0_temp = int(String(sum_temp1[0])+= String(sum_temp1[1]));
int dv1_temp = int(String(sum_temp2[0])+= String(sum_temp2[1]));*/
}
void loop() // The loop
{
printTemperaturesToSerial();
delay(1000); //wait 1 sec
}
Så fungerar det. Men dock inte när jag ska göra om String till int.