Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 13 mars 2014, 23:27:20
av Spisblinkaren
Tack!
Men hur gjorde du?
Kopierade in i typ notepad bara då, eller?
Och formateringen/tabbar behålls då, eller?
Förlåt, jag är så otroligt dålig på datorer!
I synnerhet Microsoft/Windows
MVH/Roger
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 13 mars 2014, 23:37:28
av sodjan
Jag öppnade din Excel fil.
Markerade hela kolumn A som innehåller koden och tryckte ctrl-C
Skrev code-taggarna och klistrade in koden mellan dom med ctrl-V.
Voila! Inga ändringar av format eller någonting...
Hur gjorde du får att få in det i Excel?
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 13 mars 2014, 23:47:53
av Spisblinkaren
Vadå "code-taggarna", du måste prata så att ett barn förstår
Själv markerade jag bara allt i utvecklingsmiljön, öppnade excel och klistrade in det bara (osäker dock vart musen stog men jag antar allra högst upp till vänster).
Det största problemet med min metod tycker jag är att "grid:en" kommer med. Jag vet att man kan få bort den men kommer inte ihåg hur.
MVH/Roger
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 13 mars 2014, 23:53:09
av sodjan
Du skulle ha markerat i utvecklingsmiljön och kopierat in i *forumet*...
code-taggarna här med dubbla taggar för att även få med dom i "koden".
När jag skriver det så är det alltså två rader med "code" resp "/code".
Normalt är det så klart bara en i "varje ände", så att säga.
likt html? För hör och häpna viss elementär html kan jag
MVH/Roger
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 14 mars 2014, 00:05:19
av Spisblinkaren
Skratt, det blev tydligen rätt!
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 14 mars 2014, 00:07:48
av nifelheim
Arduino IDE har en möjlighet till,
om du går in i menyn under "Edit" hittar du "Copy for forum"
Då kopieras koden med Quote taggar, färger, bibehållen formatering,
och det är "bara" att klistra in den.
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 14 mars 2014, 00:11:10
av sodjan
> Antingen kopierar jag bara från utvecklingsmiljön och direkt in i forumet eller så skriver jag...
Är inte helt med på hur du menar, kopiera från utv.miljn *och* använd code-taggarna. Inte "eller".
> Då kopieras koden med Quote taggar, färger, bibehållen formatering...
Prova gärna (du kan prova med "Förhandsgranska" utan att klicka "Skicka"), men det
är inte säkert att just EF stöder de taggar som Arduino-IDE lägger in.
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 16 mars 2014, 00:53:41
av Spisblinkaren
Okej, nu börjar det likna nåt!
Jag fick problem med hur man hanterar arrayer men kompilatorn gav mig lite tips (int måste tydligen kodas int* när man skall hantera hela vektorer med data).
Bifogar program (som dock bara gått att kompilera...)
/*
Poll
*/
//int servo=13;
//int PotValue;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(13, OUTPUT); //output for Servo/debugging
pinMode(7, OUTPUT); //LED for memoryFull
// initialize the digital pin as an input.
// Pin 2&3 are connected to a button tied to GND with pullup 10K to VCC.
pinMode(2, INPUT); //input for NewUser button
pinMode(3, INPUT); //input for Cal button
}
int k; //will be globally calibrated
int temp;
int strengthArray[500]; //array for converted samples (RAM=2kB, 1 value=10bit~2B...PROBLEM!)
int reg1_stat;
int reg1_dyn;
int reg2_stat;
int reg2_dyn;
int reg3_stat;
int reg3_dyn;
int reg4_stat;
int reg4_dyn;
int i=1; //sample couter init
int pressedCal=0;//Cal has not been pressed
int Convert_A(int Analog) {
return 500 + 2 * Analog;
}
int Convert_D(int Digital) {
return 500 + 2048 * Digital;
}
int actualForce(int Sample) {
return k*Sample;
}
void memoryFull() {
digitalWrite(7, HIGH);
}
void runServo(int width) {
digitalWrite(13, HIGH);
delayMicroseconds(width);
digitalWrite(13, LOW);
delay(20);
}
// sensor value is somehow stored to SD
void storeSensor(int* value){
temp=value[1]; // dummy
}
// holdTime value is converted and affects updating speed
int holdTime(int value){
if (value=100) return 50; // dummy
}
// newUser enables new data sequence input
void newUser(){
i=1; //resets sample counter
digitalWrite(7, LOW); //switches off memoryFull LED
}
// Cal calibrates sensor to actual reference force (1kg)
int Cal(){
return 1; // dummy
}
void loop () {
reg1_stat=analogRead(0);
reg2_stat=analogRead(1);
reg3_stat=digitalRead(2);
reg4_stat=digitalRead(3);
// delays 40ms to await any knob changes.
delay(40);
// abs neccesary due to sampling accuracy.
reg2_dyn=analogRead(1);
if (abs(reg2_dyn-reg2_stat)>10){
runServo(Convert_A(reg2_dyn)); // used for debugging
pressedCal=0;//if other than Cal is pressed again
holdTime(reg2_dyn);
}
reg3_dyn=digitalRead(2);
if (reg3_dyn != reg3_stat){
runServo(Convert_D(reg3_dyn)); // used for debugging
pressedCal=0;//if other than Cal is pressed again
newUser();//resets i and LED
}
reg4_dyn=digitalRead(3);
if (reg4_dyn != reg4_stat){
runServo(Convert_D(reg4_dyn)); // used for debugging
pressedCal++;
if (pressedCal=2){ //Cal starts only on second press
k=Cal();//sets the global value of k
pressedCal=0;//resets Cal counter
}
}
// abs neccesary due to sampling accuracy.
reg1_dyn=analogRead(0);
if (abs(reg1_dyn-reg1_stat)>10){
runServo(Convert_A(reg1_dyn)); // used for debugging
pressedCal=0;//if other than Cal is pressed again
strengthArray[i]=actualForce(reg1_dyn);
i++;
if (i=501) {
memoryFull(); //turns on LED
storeSensor(strengthArray);//moves data to SD
}
}
}
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 16 mars 2014, 12:24:09
av sodjan
Ett annat tips för att snabbare får svar...
Och du en specifik kodningsfråga (som det verkar vara här), försök fixa
ett litet kort test-case som visar just det du undrar över. Att kopiera
in 100 rader kod där det inte ens famgår var problemet är (varför ska
*vi* leta efter det?), hjälper inte mycket.
Dessutom finns det ingen fråga i ditt inlägg över huvudtaget, så jag
förstår inte riktigt vad som var meningen med det. Om du har en
fråga, ställ den!
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 16 mars 2014, 15:36:08
av Spisblinkaren
Point taken
Lite av grejen med att kopiera in hela programmet är annars att jag enkelt kan hänvisa till EF för den person som jag egentligen gör det här spännande nybörjarprojektet för.
Samtidigt tänkte jag att det kanske vore roligt för er att se hur det går för mig och få feedback på saker jag eventuellt tänkt/kodat fel.
Slutligen är det väl ärligt talat också en bekräftelse-grej
MVH/Roger
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 16 mars 2014, 22:43:55
av Spisblinkaren
Hej!
För att inte irritera er för mycket har jag nu bara postat ett avsnitt av programmet som jag är särskilt stolt över.
Denna loopas alltså typ 25 ggr i sekunden och ett värde (sensor_stat) sätts i början av loopen för att sedan jämföras med det dynamiska värdet (sensor_dyn) som fås vid varje förändring av reglaget.
Hela det nuvarande programmet kan inte bara kompileras utan verkar fungera med min testbänk.
Jag har dock minst två mycket svåra moment kvar och det är att skriva till SD och display som jag inte har en susning om hur
Dom finns dock i min ägo.
Hoppas ni finner programavsnittet intressant.
MVH/Roger
PS
Jag har snyggat till variabelnamnen lite. Snacka om onödigt
// abs neccesary due to sampling accuracy.
sensor_dyn=analogRead(0);
if (abs(sensor_dyn-sensor_stat)>10){
strengthArray[i]=actualForce(sensor_dyn);
tempMaxForce=actualForce(sensor_dyn);
if (tempMaxForce>maxForce){
maxForce=tempMaxForce;
displayTmp(maxForce);//sends maxForce to display only if new maxForce
runServo(analogConvert(maxForce));// used for debugging
}
delay(peakHold); //holds maxForce
displayTmp(actualForce(sensor_dyn));//sends current value to display
runServo(analogConvert(sensor_dyn));// used for debugging
i++;
if (i=501) {
memoryFull(); //turns on red LED
storeSensor(strengthArray);//moves data to SD
}
}
}
Re: Hur använda Arduino UNO för att sampla och lägga i datab
Postat: 17 mars 2014, 23:27:22
av Spisblinkaren
Bifogar video och hela programmet (som jag avser printa ut på jobbet):
/*
Poll
*/
//int servo=13;
//int PotValue;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(13, OUTPUT); //output for Servo/debugging
pinMode(6, OUTPUT); //green LED for Cal
pinMode(7, OUTPUT); //red LED for memoryFull
// initialize the digital pin as an input.
// Pin 2&3 are connected to a button tied to GND with pullup 10K to VCC.
pinMode(2, INPUT); //input for NewUser button
pinMode(3, INPUT); //input for Cal button
}
int temp;
int peakHold=10; //initiates minimum holdTime to 10ms
int tempCal; //temporary calibration variable
int tempMaxForce; //used for holdTime of maximum force
int strengthArray[500]; //array for converted samples (RAM=2kB, 1 value=10bit~2B)
int sensor_stat;
int sensor_dyn;
int holdTime_stat;
int holdTime_dyn;
int newUser_stat;
int newUser_dyn;
int cal_stat;
int cal_dyn;
int i=1; //sample counter init
int maxForce=0; //initiates maximum force to 0kg
int analogConvert(int Analog) {
return 500 + 2 * Analog;
}
int digitalConvert(int Digital) {
return 500 + 2048 * Digital;
}
void runServo(int width) {
digitalWrite(13, HIGH);
delayMicroseconds(width);
digitalWrite(13, LOW);
delay(20);
}
int actualForce(int Sample) {
return Sample;//gives four digits i.e hg-resolution of 0-102,3kg.
//return Sample/10; gives decimal point(?)
}
void memoryFull(int state) {
if (state==1)
digitalWrite(7, HIGH); //green@debug
if (state==0)
digitalWrite(7, LOW);
}
void highBlink() { //._.___
digitalWrite(6, HIGH);
delay(10);
digitalWrite(6, LOW);
delay(50);
digitalWrite(6, HIGH);
delay(10);
digitalWrite(6, LOW);
}
void lowBlink() { //.___
digitalWrite(6, HIGH);
delay(10);
digitalWrite(6, LOW);
delay(1000);
digitalWrite(6, HIGH);
delay(10);
digitalWrite(6, LOW);
}
void calBlink() { //ON
digitalWrite(6, HIGH);
}
// displays value on LCD (may be predefined as display())
int displayTmp(int value){
return 1;//dummy
}
// sensor value is somehow stored to SD
void storeSensor(int* value){
temp=value[1]; //dummy
}
void holdTime(int value){
peakHold=value+10;//delay cannot be zero
}
// newUser enables new data sequence input
void newUser(){
//digitalWrite(7, LOW); //switches off memoryFull LED
i=1; //resets sample counter
maxForce=0; //resets maxForce
memoryFull(0); //turns off red LED
}
// Cal calibrates sensor to actual reference force (1kg)
void Cal(){
tempCal=analogRead(0);//put 1kg of force before pressing Cal button
while ((tempCal>50) || (tempCal<5)) { //tune as closely as you can (50=debug)
if (tempCal>10) highBlink();//blinks green LED ._.___
if (tempCal<10) lowBlink();//blinks green LED .___
delay(500);//tune pot on sensor
tempCal=analogRead(0);
}
calBlink();//turns green LED on
i=1; //resets sample counter
maxForce=0; //resets maxForce
memoryFull(0); //turns off red LED
}
void loop () {
sensor_stat=analogRead(0);
holdTime_stat=analogRead(1);
newUser_stat=digitalRead(2);
cal_stat=digitalRead(3);
// delays 40ms to await any knob changes.
delay(40);
// abs neccesary due to sampling accuracy.
holdTime_dyn=analogRead(1);
if (abs(holdTime_dyn-holdTime_stat)>10){
//runServo(analogConvert(holdTime_dyn)); // used for debugging
holdTime(holdTime_dyn);// sets holdTime
}
newUser_dyn=digitalRead(2);
if (newUser_dyn != newUser_stat){
runServo(digitalConvert(newUser_dyn)); // used for debugging
newUser();//resets sample counter, memoryFull LED and maxForce
}
cal_dyn=digitalRead(3);
if (cal_dyn != cal_stat){
runServo(digitalConvert(cal_dyn)); // used for debugging
Cal();
}
// abs neccesary due to sampling accuracy.
sensor_dyn=analogRead(0);
if (abs(sensor_dyn-sensor_stat)>10){
strengthArray[i]=actualForce(sensor_dyn);
tempMaxForce=actualForce(sensor_dyn);
if (tempMaxForce>maxForce){
maxForce=tempMaxForce;
displayTmp(maxForce);//sends maxForce to display only if new maxForce
runServo(analogConvert(maxForce));// used for debugging
}
delay(peakHold); //holds maxForce
displayTmp(actualForce(sensor_dyn));//sends current value to display
runServo(analogConvert(sensor_dyn));// used for debugging
i++;
if (i==21) {//std=501
memoryFull(1); //turns on red LED
storeSensor(strengthArray);//moves data to SD
}
}
}