arduino projekt 02 samt 03

Går igenom boken arduino projects book som följer med arduino starter kit igen. För något år sedan gjorde jag alla övningar (2015) och skrev en handledning till det femte projektet då. Jag tyckte att boken var bra för att den gick igenom var komponent.

Projektet ska föreställa en rymdskeppspanel. Genom att trycka eller hålla inne en knapp så ändras lamporna. Alla komponenter är kopplade separat från varandra på vars en digital ingång.

Konstigt nog så upplever jag att koden ger ett annat resultat än vad de skriver i boken. Det är säkert korrigerat i nyare böcker. Gröna lampan ska lysa i ursprungsläget och sen släckas samtidigt som de röda led-lamprona blinka om vartannat när man trycker på knappen.

int switchState = 0;

void setup() {
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(2, INPUT);
 
}

void loop() {
 switchState = digitalRead(2);

if (switchState == LOW) {
 digitalWrite(3, LOW);
 digitalWrite(4, HIGH);
 digitalWrite(5, HIGH);
 
 }

else {
 digitalWrite(3, HIGH);
 digitalWrite(4, LOW);
 digitalWrite(5, HIGH);

delay(250);

digitalWrite(4, HIGH);
 digitalWrite(5, LOW);

delay(400);
 }
}

Så ser min kod för att det ska fungera rätt. Något kanske växlar LOW och HIGH jämfört med hur boken är skriven. Jag har testat koden på två olika arduino Uno enheter och får rätt resultat var gång.

Samma sak gäller då projekt 04 att HIGH betyder att lampan är av. Koden jag skrev för projekt 04 loveMeter kanske inte kan användas rakt av. Jag har behållit lamporna på samma plats som i projekt 03 och därför ser koden annorlunda ut. Kolla in for loopen i koden och vart pinsen är deklarerade så syns det jämfört med boken.

const int sensorPin = A0;
const float baselineTemp = 20.0;
void setup() {
 Serial.begin(9600);
 for(int pinNumber = 3; pinNumber <6; pinNumber++){
 pinMode(pinNumber, OUTPUT);
 digitalWrite(pinNumber, HIGH); // HIGH släcker lampan
 }
}

void loop() {
 int sensorVal = analogRead(sensorPin);

Serial.print("Sensor Value: "); // + sensorVal);
 Serial.print(sensorVal);

float voltage = (sensorVal/1024.0) * 5.0;

Serial.print(", Volts: ");
 Serial.print(voltage);

Serial.print(", Degrees C: ");

float temperature = (voltage - .5) * 100;
 Serial.print(temperature);
 Serial.println();




if(temperature < baselineTemp){
 digitalWrite(3, HIGH);
 digitalWrite(4, HIGH);
 digitalWrite(5, HIGH);
 } else if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){
 digitalWrite(3, HIGH);
 digitalWrite(4, HIGH);
 digitalWrite(5, LOW);
 } else if(temperature >= baselineTemp+4 && temperature < baselineTemp+6){
 digitalWrite(3, HIGH);
 digitalWrite(4, LOW);
 digitalWrite(5, LOW);
 } else if(temperature >= baselineTemp+6){
 digitalWrite(3, LOW);
 digitalWrite(4, LOW);
 digitalWrite(5, LOW);
 }
 delay(1);
}

Jag går mest igenom grejerna för att få en känsla för koden så jag har inte lagt någon energi på hur den ser ut. Det var lätt att ställa in serial monitorn i eclipse. Jag la också till en Serial.println(); för att få en ny rad istället för att avläsningsdatan springer oläsligt i sidled som den gör i boken istället för neråt. Det skulle utan tvekan gå att optimera koden till bara en Serial.println() istället för sju printsatser.

Lampan lyser för att temperaturen i rummet är tillräckligt hög (+22 grader C).

Publicerat av

passar

Speak as you fly

Lämna en kommentar

Denna webbplats använder Akismet för att minska skräppost. Lär dig om hur din kommentarsdata bearbetas.