Arduino kodning hjälp

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
egonkarlsson
Inlägg: 11
Blev medlem: 6 januari 2017, 16:24:23

Arduino kodning hjälp

Inlägg av egonkarlsson »

Hej!
Nu är det så att jag har börjat programmera lite Arduino Uno.
Fruktansvärt intressant och roligt när man väl förstår! :)

Men jag har inte fått greppet på vissa "kommandon"

Jag vet att ( int ) Används för att göra variablar tex.
Men nu i morse så stötte jag på ( constants ) i sammanhang med ( int )

Kan någon förklara åt mig hur det fungerar?

Har ni någon tråd här på Elektronik forumet som förklarar och går igenom alla kommandon som Arduino uno har. Som förklarar så enkelt som möjligt så även jag förstår.

I övrigt är det ett Arduino UNO MICROCONTROLLER jag kör med. Köpte ett startpaket och är på övning 3. Övningen heter Color mixing lamp.
I kretsen har jag 3 photoceller och en RGB led med 3 Anoder och 1 gemensam cathod. Tanken med projektet är att man med hjälp av photocellerna ska läsa av den variabla resistansen i photocellerna. Ta värdet från dom och skicka ut ström på digital output.

Tack på förhand

Mvh// Egon Karlsson :)
davidi
Inlägg: 571
Blev medlem: 13 oktober 2011, 16:45:38
Ort: Ekerö

Re: Arduino kodning hjälp

Inlägg av davidi »

Det är ingenting som är specifikt för Arduino, utan det du i så fall vill lära dig mer om är programspråket C.

T ex "const int x = 42;" betyder att man skapar en variabel "x" av typen int (heltal) och tilldelar den värdet 42. const före innebär att variabeln är konstant, och att man därmed inte kan ändra värdet på den senare.
SeniorLemuren
Inlägg: 7779
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Arduino kodning hjälp

Inlägg av SeniorLemuren »

Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Arduino kodning hjälp

Inlägg av Icecap »

Jag är extremt säker på att det finns material från Arduino som beskriver detta, det skulle väl vara något forum också och de borde nog ha en hel del av detta.

'int' beskriver en variabel som - enl. standarden - är den enklaste för µC'n att hanteras med. Då Arduino ofta är en 8-bit är det i teorin alltså en byte med förtecken, alltså en 'char'.

Då Arduino ju kör deras egen standard är det troligt att en 'int' i verkligheten är en 'signed short', alltså ett word med förtecken (+/-).

'const' beskriver att värdet alltid är det samma och inte ändras ("huggit i sten"), detta betyder att det kan sparas i programminnet om det är enkelt att "komma åt" under programmets gång. Vissa µC sparar värdet i ROM men kopierar till RAM vid uppstart.

'constants' är en del av en beskrivning, kanske en sektion där man skriver in en del konstanter.
Dessa konstanter kan vara i form av #define eller liknende, även 'const int' och andra värden.
egonkarlsson
Inlägg: 11
Blev medlem: 6 januari 2017, 16:24:23

Re: Arduino kodning hjälp

Inlägg av egonkarlsson »

Blev mycket där. 8-bit, spara till ram osv.

Men i detta projekt så använder man en photocell.
Photocellen måste ju ha ett grundvärde. och är det kanske grundvärdet dom vill att man ska ha en constant på? Allså att grundvärdet är "hugget i sten"?
egonkarlsson
Inlägg: 11
Blev medlem: 6 januari 2017, 16:24:23

Re: Arduino kodning hjälp

Inlägg av egonkarlsson »

Från tidigare övning från Arduino boken.

Är en LOVE -O- METER.

3st röda led till digital output
1st TMP (Temperatur sensor) till analog Input

Syftet med det projektet är att för varje 2 grader temperaturen ökar i TMP så över signalspänningen till Analog input i Arduinot. Men man måste ha en utgångspunkt för temperatursensorn. och det är därför man måste ha en Constants?

Här har ni beskrivningen på constants från Arduino boken.

Constants are similar to variables in that they allow you to
uniquely name things in the program, but unlike variables they
cannot change. Name the analog input for easy reference, and
create another named constant to hold the baseline temperature.
For every 2 degrees above this baseline, an LED will turn on.
You’ve already seen the int datatype, used here to identify which
pin the sensor is on. The temperature is being stored as a float, or
floating-point number. This type of number has a decimal point,
and is used for numbers that can be expressed as fractions.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43150
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Arduino kodning hjälp

Inlägg av sodjan »

> Men nu i morse så stötte jag på ( constants ) i sammanhang med ( int )

Var då? Länk?

Utan ett specifikt exempel så går det ju bara att svara i generella
termer så som alla här har gjort. D.v.s. att du har fått svar på vad
en "const" är. Varför det används i ett specifikt fall kan vi ju inte veta.
Användarvisningsbild
Icecap
Inlägg: 26106
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Arduino kodning hjälp

Inlägg av Icecap »

egon: "Constants are similar to variables in that they allow you to
uniquely name things in the program, but unlike variables they
cannot change."

Den text ska översättas! Det rör sig inte om 'Constants' men om "konstanta tal", alltså fasta värden.

Lite som att man anger tillåten hastighet i km/t istället för m/s, man har den konstanta faktorn som är km/t.
egonkarlsson
Inlägg: 11
Blev medlem: 6 januari 2017, 16:24:23

Re: Arduino kodning hjälp

Inlägg av egonkarlsson »

Tusen tack för svar och för att nu inte är så dömande. Är som sagt var helt ny på allt som har med elektronik och programmering och göra.

Nu har jag gjort övningen LOVE -O- METER.

Projektets komponenter:
3st LED och 1st temperatur sensor.


Syftet med projektet:
Att få LED att lysa när temperaturen ökar i sensorn.

Skripten:

// LOVE -O- METER
const int sensorPin = A0;
const int baselineTemp = 23.0;

void setup() {
// put your setup code here, to run once:

Serial.begin(9600); //Öppna upp en serieport för komunikation

for(int pinNumber =2; pinNumber<5; pinNumber++){

pinMode(pinNumber,OUTPUT);
digitalWrite(pinNumber, LOW);
}
}


void loop() {
int sensorVal = analogRead(sensorPin);
Serial.print("sensor Value:");
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.println(temperature);

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

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

}else if (temperature >=baselineTemp+6){
digitalWrite (2,HIGH);
digitalWrite (3,HIGH);
digitalWrite (4,HIGH);

}
delay (1);
}



Nu har jag bara skrivit av det som fanns i boken. Vissa saker förstod jag mig på och vissa inte.

Är det någon kunnig som kan gå igenom skripten med mig och förklara varför det står som det gör och vad det fyller för funktioner?

Mhv// Egon
Borre
Inlägg: 4565
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Arduino kodning hjälp

Inlägg av Borre »

Börja med att posta koden med code-taggarna, du skriver alltså såhär i inlägget:

Kod: Markera allt

[code=c]
Din kod här
[/code]

Det blir såhär, betydligt mer lättläst inte sant? :)

Din kod:

Kod: Markera allt

// LOVE -O- METER
const int sensorPin = A0;
const int baselineTemp = 23.0;

void setup() {
  // put your setup code here, to run once:

  Serial.begin(9600); //Öppna upp en serieport för komunikation

  for (int pinNumber = 2; pinNumber < 5; pinNumber++) {

    pinMode(pinNumber, OUTPUT);
    digitalWrite(pinNumber, LOW);
  }
}


void loop() {
  int sensorVal = analogRead(sensorPin);
  Serial.print("sensor Value:");
  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.println(temperature);

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

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

  } else if (temperature >= baselineTemp + 6) {
    digitalWrite (2, HIGH);
    digitalWrite (3, HIGH);
    digitalWrite (4, HIGH);

  }
  delay (1);
}
Och istället för att vi förklarar så försök själv först kommenterar koden där du förstår vad som händer, och där du tror dig veta vad som händer, likt det du gjort vid Serial.begin, med // och kommentar om vad som händer på varje rad.
Det lär du dig nog mer på, och sen kan någon säkert rätt dig och visa på vad som händer. :)
egonkarlsson
Inlägg: 11
Blev medlem: 6 januari 2017, 16:24:23

Re: Arduino kodning hjälp

Inlägg av egonkarlsson »

Tusen tack Borre!!! :D
Så som du spaltade upp det var suveränt!!
Använde du något speciellt program? Går det att ändra i Arduino programmet? :)

Har faktiskt några symboler jag är tveksamma på. Men jag ska försöka luska ett tag till :)
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43150
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Arduino kodning hjälp

Inlägg av sodjan »

Borre gjorde ingenting med din kod.
Han la det bara mellan code-taggarna...
egonkarlsson
Inlägg: 11
Blev medlem: 6 januari 2017, 16:24:23

Re: Arduino kodning hjälp

Inlägg av egonkarlsson »

Nu har jag några frågor.

När vet man när man ska använda sig av parenteser, semikolon och dom här tecknen { }?

Sitter nu och experiment för mig själv och försöker klura ut hur man gör en räknare.

Syftet med detta experiment är att få upp hur många gånger jag trycker på min återfjädrande strömbrytare i serial monitor.

// Växlar mellan 1 och 0 beroende på knappens status är hög eller låg.

int Knapp=5; // Denna int säger att det är pin 5 den återfjädrande brytaren är kopplad till.

void setup() {

pinMode(Knapp,INPUT); //knappen ska ge en plusa varje gång den trycks ned.

Serial.begin(9600); //Denna funktion är för att öppna porten så arduinot kan komunicera med datorn

}

void loop() {

{
Knapp=digitalRead;

if (Knapp,HIGH)=digitalWrite ("1"); // här vill jad den ska skriva en 1 i seriel monitor om knappen är HIGH

if (Knapp,LOW)=digitalWrite ("0"); // här vill jag den ska skriva en 0 i seriel monitor om knappen är LOW



}
}



Detta är min skript som jag skrivit den. Jag vet att den inte funkar men varför gör den inte det? Vilka argument saknas.
Sen alla parenteser och semikolon har jag höftat med.
SeniorLemuren
Inlägg: 7779
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Arduino kodning hjälp

Inlägg av SeniorLemuren »

Som jag visade tidigare. ANVÄND Arduino Reference Language | Libraries Så får du svar.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 45175
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Arduino kodning hjälp

Inlägg av TomasL »

Varför lägger du inte koden du postar mellan Kod-taggar?
Det är hopplöst att läsa, och andvänd inte färg på texten, blir ännu hopplösare att använda.

Börja med att läsa en nybörjarhandledning för C-Språket, det hela blir väldigt mycket klarare då, du slipper att hålla på och gissa, och lär dig betydligt snabbare
Du hittar mänger av dem på nätet.
Skriv svar