Frågor om Arduino och programmering...

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
NyfikenRöd
Inlägg: 8
Blev medlem: 26 februari 2009, 22:27:16
Ort: Stockholm
Kontakt:

Frågor om Arduino och programmering...

Inlägg av NyfikenRöd »

Hej!
Jag har nyss inhandlat ett stycke Arduino Duemilanove, och har 10 frågor i sekunden som jag hinner glömma bort innan de antagit en konkret form, men jag hoppas att någon här har lust att hjälpa mig att komma igång.
Det jag vet om elektronik är väl några små fragment av NO-undervisningen på högstadiet, så jag kommer nog få plugga en hel del.

I alla fall, det jag vill använda kortet till är att styra lite grejer i en blivande osx86-dator, och jag tänkte börja med en potentiometer-ratt som ändrar volymen i OS X.
Detta är tänkt att utföras genom ett program på Arduinon som läser av potentiometern, kontrollerar om värdet har ändrats och skickar då en bokstav (A-H) till OSX-programmet AsProxy (från tinker.it) som kör ett enkelt applescript, "set volume" 0-7.

Så ett gäng frågor:

* Vågar man stoppa in vilken potentiometer (eller annan sensor) som helst i Arduinon?
Jag tänkte köpa något kit med diverse komponenter när jag har lite pengar, men jag har en pot liggandes hemma som det står "47K821M" på.
Vad kan det betyda, och kan den förstöra min nya leksak?
Hur vet man vad man kan koppla in i kortet utan att riskera att bränna det?

* Jag har även mycket bristande kunskaper i programmering, så också här behöver jag hjälp.
Jag har knåpat ihop några rader som jag antar kommer fungera (jag har ju inte vågat koppla in pot'en än).
Enligt potentiometer-guiden på arduino.cc så har en sådan ett värde på 0-1023 så jag har kapat det i åtta delar för att passa OS X.

Kod: Markera allt

int potPin = 2;
int potval = 0;
void setup() {
  Serial.begin(9600);
}

void loop() {
 if (potval != analogRead(potPin))
{
 potval = analogRead(potPin); 

 if (potval < 128)
{
  Serial.print("A");
}
else if (potval < 256)
{
  Serial.print("B");
}
else if (potval < 384)
{
  Serial.print("C");
}
else if (potval < 512)
{
  Serial.print("D");
}
else if (potval < 640)
{
  Serial.print("E");
}
else if (potval < 768)
{
  Serial.print("F");
}
else if (potval < 896)
{
  Serial.print("G");
}
else
{
  Serial.print("H");
}
}
}
Tror ni att det här programmet kommer göra det jag vill, dvs skicka iväg en bokstav motsvarande värdet på potentiometern om värdet har ändrats?

Mycket tacksam för hjälp
//NyfikenRöd
NyfikenRöd
Inlägg: 8
Blev medlem: 26 februari 2009, 22:27:16
Ort: Stockholm
Kontakt:

Re: Frågor om Arduino och programmering...

Inlägg av NyfikenRöd »

Äh jag kunde inte sova, så jag testade :)

Den rullade iallafall och skickade ut A-H när jag vred på ratten. So far, so good.
Problemet är bara att den skickar ut en VÄLDANS massa A-H, även när jag inte vrider på ratten.
Enda tillfällena den höll klaffen var när potentiometern var på 0 och när den var på 1023.
Så jag antar att det bara är min logik som haltar något ikväll, får kika på koden igen och se om jag kan lista ut det.
Skriv gärna en kommentar om ni skulle råka ögna igenom koden och tänka "nämen vaf.. den där raden borde ju vara där!" eller liknande.

EDIT: Nu funkar det galant! Någonting någonstans tycker tydligen att potentiometern inte är helt stilla så jag fick lägga in

Kod: Markera allt

if (potval > analogRead(potPin) + 10 || potval < analogRead(potPin) - 10)
istället för

Kod: Markera allt

if (potval != analogRead(potPin))
Och så la jag in en delay(400) så att den inte skulle bli så ruskigt känslig.

Jag kan säga att när jag beställde min Arduino så var jag väldigt tveksam till om jag skulle klara av att göra någonting med den innan jag läst ett dussintals böcker, men nu märker man att den där programmeringskursen i gymnasiet inte var helt förgäves :P
Användarvisningsbild
maDa
Inlägg: 4080
Blev medlem: 11 november 2005, 22:13:16
Ort: Malmö
Kontakt:

Re: Frågor om Arduino och programmering...

Inlägg av maDa »

Arduino är kul :)
Användarvisningsbild
Spruft
Inlägg: 840
Blev medlem: 6 mars 2006, 16:33:24
Ort: Stockholm

Re: Frågor om Arduino och programmering...

Inlägg av Spruft »

Det är grymt 8)

void loop() { //1
if (potval > analogRead(potPin) + 10 || potval < analogRead(potPin) - 10) { //2

potval = analogRead(potPin); //potval setts bara om ovanstående stämmer.

if (potval < 128)
{
Serial.print("A"); //setts bara om första if-satsen (potval > ... ..) stämmer.
}
{
osv
}
} //2
} //1

Nu ska du inte behöva någon delay i koden samtidigt som du inte floodar med Serial.print plus att du får snabbare reaktion på volymen. Sen behöver du en linjär pot (brukar stå ett A för linjär och B för log.) eftersom du delat upp det jämt i koden). Skulle jag vilja ha i alla fall.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Frågor om Arduino och programmering...

Inlägg av sodjan »

> Någonting någonstans tycker tydligen att potentiometern inte är helt stilla

Jo, det är den nog, men brus (från t.ex matningsspänningen) kommer att göra att
avläsningen nästan alltid ger lite olika värden. Du kan ju räkna ut hur stor
spänning som ett enda steg i avläsningen motsvarar, det är inte mycket.
Det är helt normalt i dessa fall att lägga in en utjämning/avrundning
för att just undvika det som du råkade ut för...

> if (potval > analogRead(potPin) + 10 || potval < analogRead(potPin) - 10)

Den där koden är inte så bra, du läser ju potten två gånger och du kommer
sannolikt att ha olika värde i de två fallen. Läs potten *en* gång till en variabel
och jobba vidare me den i dina tester.
NyfikenRöd
Inlägg: 8
Blev medlem: 26 februari 2009, 22:27:16
Ort: Stockholm
Kontakt:

Re: Frågor om Arduino och programmering...

Inlägg av NyfikenRöd »

maDa> Ja jag är helnöjd :)

Spruft> Jo det är så jag har det. Anledningen till delayen är att programmet hinner skicka iväg samma bokstav massa ggr medan man vrider på potten. Och det verkar som AsProxy är lite grinigt och slutar lyssna om det kommer för mycket. Eller om det blir för mkt för applescript kanske. Ändrade dock till delay(200) för att få lite snabbare reaktion.

Läste lite snabbt om pottar, och det verkar ju som du sa att det är en linjär jag vill ha. Vet dock inte om det är en sån jag har.. Men det funkar ju hur som helst :)

sodjan> Ok, då är jag nog inte ensam om att ha upplevt detta fenomen, och bra att veta varför det händer!

Ang. kodsnutten... I praktiken i just det här fallet spelar det nog inte så stor roll med tanke på marginalen, men man ska väl lära sig rätt från början så jag ändrade det. Funkar fint.


Tack som fan för feedback hörrni!

Och eftersom ni är så hjälpsamma så driftar jag mig till att fråga en sak om nästa komponent i min blivande dator :)

Chassit jag ska använda är något som verkar vara en uråldrig värmecentral eller liknande som de hade rivit ut ur en gammal tegelkåk på söder.
Bild
Ratten som ligger ovanpå ska sitta i hålet och det är alltså den som blir volymratt.

Det jag har tänkt mig sedan är en lampa/Power-LED inne i det röda lyktglaset på ovansidan, som ska indikera nytt e-mail eller något annat kul.
Som ni kanske ser så är glaset ganska mörkt färgat, och jag får känslan av att en Power-LED skulle vara lagom för att få ett fint rött sken som man ser utan att behöva släcka taklampan.
Då till frågan:
Räcker USB-strömmen från arduino till att driva en Power-LED?
Och isåfall, räcker det även till en servo?
Jag funderar på att bygga in en cigg-dispenser eller något liknande (som man givetvis har bara för att styla med).
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Frågor om Arduino och programmering...

Inlägg av sodjan »

> ...så driftar jag mig till att fråga en sak...

Eftersom "en sak" inte verkar ha något med rubriken eller tråden för
övrigt att göra (och den ligger i fel forums-del), så hade en ny tråd
med korrekt rubrik och i rätt avdelning varit bättre.
NyfikenRöd
Inlägg: 8
Blev medlem: 26 februari 2009, 22:27:16
Ort: Stockholm
Kontakt:

Re: Frågor om Arduino och programmering...

Inlägg av NyfikenRöd »

Okej. Lite svårt att veta hur det funkar när man är ny på ett forum.
Tänkte väl som så att eftersom jag knappt kan någonting så skulle det bli irriterande om jag startar en ny tråd varje gång jag undrar något. Men om reglerna säger så...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Frågor om Arduino och programmering...

Inlägg av sodjan »

Regler och regler... :-)

Du får väl helt enkelt fundera på om det hänger ihop med den aktuella tråden
(alltså hänger ihop *tekniskt*, inte hur det hänger ihop hemma hos dig... :-) ).
Om du vill ha entråd kring ett helt projekt, så får du sätta en rubrik där det framgår
(samt kanske placera det hela bland "projekt" t.ex).

Det handlar inte om reglar utan hur *du* får "rätt" läsare till din specifika problem.
T.ex så är det ju väldigt sannolikt att de som ansåg att dina frågor kring
pottar och Ardunio var helt ointressanta knappast skulle se dina andra frågor.

Fundera lite på det själv så ser du nog att det faller sig kanske naturligt...
NyfikenRöd
Inlägg: 8
Blev medlem: 26 februari 2009, 22:27:16
Ort: Stockholm
Kontakt:

Re: Frågor om Arduino och programmering...

Inlägg av NyfikenRöd »

Ah, Internetforum, gudarnas gåva till den som vill ha något att fundera på :)

Du har ju helt rätt i det du skriver. Tack, bock och skål!
Skriv svar